TCP 和 UDP

TCP是一种面向连接的协议,提供可靠的数据传输,包括序列号、确认、重传和拥塞控制机制。UDP则是无连接的,适合实时应用,但不保证数据可靠性。文章还介绍了TCP的拥塞控制算法,包括慢开始、拥塞避免、快重传和快恢复,以及这些机制如何应对网络拥塞和效率问题。
摘要由CSDN通过智能技术生成

TCP(Transmission Control Protocol,传输控制协议)

是面向连接的协议,即在收发数据前,必须和对方建立可靠的连接,TCP的头部为20个字节。

UDP(User Datagram Protocol,用户数据报协议)

是一个面向无连接的协议,它以数据报(Datagram)的形式传输数据。在传输数据之前,源端和终端不需要建立连接,UDP的信息头部为8个字节,UDP使用 "尽最大努力交付" 的方式,导致了UDP不保证可靠交付。

区别

两种常用的传输层协议,在网络通信中有以下区别:

1. 连接性:

- TCP是面向连接的协议,通信双方在发送和接收数据之前需要先建立连接,并在连接的双方保持状态信息。

- UDP是面向无连接的协议,发送数据时不需要事先建立连接。每个数据包(称为数据报)都是独立的,相互之间没有依赖关系。

2. 数据传输方式:

- TCP提供面向字节流的传输方式,将数据分割成适当的大小并按顺序传输。数据以字节流的形式在网络上传输,保证数据的有序性。

- UDP以数据报(Datagram)的形式传输数据,每个数据报都有自己的标识和长度信息,可以独立地传输。每个数据报都是独立的,可能会被路由器拆分或重新组装。

3. 可靠性:

- TCP提供可靠的数据传输,通过序号、确认、重传、拥塞控制等机制来保证数据的完整性和有序性,但在网络拥塞时可能会产生延迟。

- UDP不提供数据的可靠传输,数据报可能会丢失或乱序。UDP适用于对实时性要求较高的应用,如音频、视频等,因为它能够更快速地传输数据。

4. 使用场景:

- TCP适用于需要可靠传输、数据顺序和错误校验的应用,如网页浏览、文件传输、电子邮件等。

- UDP适用于对实时性要求较高、数据传输速率高以及容忍少量数据丢失的应用,如视频流、语音通话、实时游戏等。

TCP可靠性机制

1. TCP是面向连接的协议,建立连接后发送和接收数据。UDP是无连接的协议,发送数据时不需要建立连接。

2. TCP提供可靠的数据传输,采用序列号、确认应答、重传和流量控制等机制来保证数据的完整性和顺序。UDP不提供可靠性保证,不进行序列号和重传,适用于实时性要求高的应用。

3. TCP使用滑动窗口协议进行流量控制,限制发送速率,防止数据丢失。TCP还有超时重传和拥塞控制机制来应对网络不稳定和拥塞。

4. UDP没有流量控制和拥塞控制机制,因此传输速度快,延迟较低,但无法保证可靠性。

TCP 报文

TCP 报文是 TCP 传输的的数据单元,也叫 报文段

1. 源端口号和目的端口号:用于标识发送方和接收方的应用进程。

2. 序列号:每个TCP报文段都有一个序列号,用于标识报文段中的数据在字节流中的位置。

3. 确认序列号:接收方发送给发送方的确认报文中包含的序列号,用于告知发送方已成功接收到的数据字节。

4. 标志位:TCP报文中的标志位用于控制连接的建立、维护和关闭,如SYN、ACK、FIN等。

5. 窗口大小:接收方通过通知发送方接收窗口大小来控制发送速率和缓存空间。

6. 校验和:用于检测报文在传输过程中是否发生了错误。

7. 首部长度:TCP首部的长度,用于提供从报文开始到数据开始位置之间的偏移量。

8. 选项:可选的TCP选项,用于提供一些额外的功能和参数设置。

9. 数据:TCP报文段中携带的数据部分。

UCP 报文

1. 源端口号和目的端口号:用于标识发送方和接收方的应用进程。

2. 长度:UDP报文的长度,包括报文头部和数据部分。

3. 校验和:用于检测报文在传输过程中是否发生了错误。

4. 数据:UDP报文中携带的数据部分。

TCP拥塞控制

假定如下条件:
1.数据是单方向传送,另一个方向只能传送确认。
2.接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
3.以TCP报文段的个数为讨论问题的单位,而不是以字节为单位。

1.拥塞

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫做拥塞。

在计算机网络中的链路容量 (即带宽)、交换结点中的缓存和处理机等,都是网络的资源。

“ 慢开始 ” 是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢。

“ 拥塞避免 ” 并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

2.拥塞窗口 cwnd

发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞拥塞窗口就减少一些。

判断出现网络拥塞的依据:没有按时收到应当到达的确认报文 (即发生重传)。

发送方将拥塞窗口作为发送窗口,即 swnd = cwnd

3.慢开始门限值 ssthread

维护一个慢开始门限ssthresh状态变量:

当 cwnd < ssthresh 时,使用慢开始算法;
当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法;
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

4.输入负载与吞吐量之间的关系 

理想的拥塞控制:吞吐量达到饱和之前,输入负载不断增大,吞吐量和输入负载增长比例相等(45°),当输入负载超过某一限度时,网络资源受限,吞吐量便保持在饱和值,此时一些输入分组会被丢弃。

无拥塞控制:实际网络中,随着输入负载的增大,吞吐量的增长率逐渐减小【即在吞吐量未达到饱和之前,一些输入分组已经被丢弃】。当网络的吞吐量明显小于理想的吞吐量时,便出现轻度拥塞;当输入负载到达某一吞吐量,整个网络的吞吐量将随输入负载的增大而下降,便产生拥塞状态,但若不进行控制,输入负载增大到一定程度时,吞吐量下降为0,产生死锁。

实际的拥塞控制:实际网络中,常常因为转发节点缓存不够大,而造成分组的丢失,分组丢失是网络发生拥塞的征兆而不是原因,通过拥塞控制算法对拥塞状态进行控制。

5.快重传和快恢复

有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞,这将导致发送方超时重传,并误认为网络发生了拥塞;发送方错误地启动慢开始算法,并把拥塞窗口cwnd又设置为最小值1,因而降低了传输效率。
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传

要求:

1.接收方不要等待自己发送数据时才进行确认,而是要立即发送确认;

2.发送方即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认,

3.发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。  

6.传输轮次与拥塞窗口的关系  

一个传输轮次:往返时间RTT 

1.设置拥塞窗口cwnd初始值为1,慢开始门限ssthresh设置为16,传输轮次每+1,拥塞窗口大小呈指数增长一次,直到到达慢开始门限ssthresh【值为16】。

2.此时cwnd=16,启动拥塞避免算法,拥塞窗口大小开始启用线性增长。

3.当cwnd=24时,假设在传输过程中丢失了4个数据报文段,接收方收到20个数据报文段,因此只发送20个确认报文段,一段时间后,之前丢失的数据报文段的重传计时器超时,发送方认为网络出现拥塞,触发超时重传,进行以下工作:

  • 将ssthresh的值更新为发生拥塞时的cwnd的一半【此处为12】;
  • 将cwnd的值减少为1,并重新开始执行慢开始算法;

4.当cwnd=12时(到达慢开始门限ssthresh【值为12】),转为开始执行拥塞避免算法,当发送方收到3个重复确认时,触发快重传算法和快恢复算法,进行以下工作:

  • 将ssthresh的值更新为发生拥塞时的cwnd的一半【此处为8】;
  • 将cwnd的值减少为8,并重新开始执行拥塞避免算法;

7.TCP拥塞控制算法 

TCP tahoe 版本  【慢开始 拥塞避免】
TCP Reno 版本   【快重传、快恢复 】

快重传、快恢复 解决了前者的什么问题?

有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞,这将导致发送方超时重传,并误认为网络发生了拥塞;发送方错误地启动慢开始算法,并把拥塞窗口cwnd又设置为最小值1,因而降低了传输效率。采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失,使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

cwnd 和 ssthresh 变化和之前的区别在哪?

如果错误的触发超时重传,会启动慢开始算法,把拥塞窗口cwnd设置为1,ssthresh设置为误认为发生拥塞的cwnd的值的一半(12)。

但若触发快重传算法,会直接触发快恢复,开始拥塞避免算法,将ssthresh设置为收到三个重复确认的cwnd的值的一半(8),而cwnd也设置为ssthresh,直接开始拥塞避免算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为何幸福如驴薄饼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值