计算机网络---TCP与UDP的区别 | 青训营笔记

66 阅读4分钟

1. TCP和UDP的区别

【总结】

1)TCP是面向连接的,UDP是无连接的

2)TCP是可靠的,UDP是不可靠的

3)TCP是是面向字节流的,UDP是面向数据报文的

4)TCP只支持点对点通信,UDP支持一对一,一对多,多对多

5)TCP报文首部20个字节,UDP首部8个字节

6)TCP有拥塞控制机制,UDP没有

7)TCP协议下双方发送接收缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接收缓冲区

【追问1】为什么说TCP是可靠的?

1)数据包校验(16位数据校验和)防止发送过来的数据是错误数据 (UDP也有)

2)确认序列号(发:seq=x; 收:ack=x+1),对失序报文进行重排,保证数据顺序正确

3)丢弃重复数据包,防止数据冗余重复

4)确认应答机制(ACK),接收方接受数据之后会发送一个确认

5)超时重传机制,发送方发出数据后会启动一个定时器,超过该定时器时间依旧未收到对方确认,便会重新发送该数据

6)流量控制(16位窗口大小)确保接收方收到的数据在自身缓冲区中不会溢出

7)拥塞控制,保证数据在网络中传播的可靠性,降低丢包的概率,提高TCP的可靠性

【追问2】TCP报文首部20个字节,具体有包含哪些结构?

1)源端口 16位;目标端口 16位;(4个字节)

2)序列号 32位;(4个字节)

3)回应序号ACK 32位;(4个字节)

4)TCP头长度 4位;reserved 3位;控制代码(NS/ CWR/ ECE/ URG/ ACK/ PSH/ RST/ SYN/ FIN) 9位;(2字节)

5)窗口大小 16位;偏移量 16位;(4字节)

6)校验和 16位;(2字节)

7)选项 32位(可选);

补充:UDP首部结构8字节,即 源端口16位 源端口16位 长度16位 校验和16位

【追问3】如何理解面向字节流的,面向数据报文的?

1)面向字节流的:TCP发送时要考虑对方给出的 窗口值 和 网络拥塞情况 界定发送的 数据块的大小,即:大了我分块发送,少了我可以累积在一起在发送。保证你接收方收到的字节流和发送方发出的字节流一样就行

2)面向数据报文的:每次传输都是一个一个数据包交付,不合并也不拆分,向下向上只是加首部和去首部的区别

【追问4】什么是流量控制?流量控制的目的?

1)什么是流量控制?  如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

2)如何实现流量控制?  由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

3)流量控制引发的死锁?  当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。

4)怎么避免死锁的发生?  为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

【追问5】什么是拥塞控制?

1)拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;

2)常用的方法就是:( 1 )慢开始、拥塞避免( 2 )快重传、快恢复。

image-20230416160519613.png