计算机网络传输层(下)

TCP协议的介绍和拥塞控制的基本原理,以及TCP协议的拥塞算法。

面向连接的传输协议

TCP概述

1.TCP的特点:

(1)点对点:只能有一个发送方,一个接受方。

(2)可靠的、按序的字节流。

(3)流水线机制:TCP拥塞控制和流量控制机制设置窗口尺寸。

(4)发送方和接受方拥有缓存。

(5)全双工。

(6)面向连接

  • 通信双方在发送数据之前必须建立连接。
  • 连接状态只在连接的两端中维护,在沿途节点中并不维护状态。
  • TCP连接包括:两台主机的缓存、连接状态变量、socket等。

(7)拥有链路控制机制

2.TCP段结构

3.序列号和ACK

(1)序列号

  • 序列号指的是segment中第一个字节的编号,而不是segment的编号。
  • 建立TCP连接时,双方随机选择序列号。

(2)ACKs

  • 希望接受到的下一个字节的序列号。
  • 累计确认:该序列号之间的所有字节均已被正确接收到。

TCP可靠数据传输

1.TCP的可靠数据传输概述

(1)TCP在IP层提供的不可靠服务基层上实现可靠数据传输服务。

(2)使用流水线机制

(3)使用积累确认机制

(4)使用单一重传定时器

2.TCP发送方事件

(1)从应用层收到数据

  • 创建segment
  • 序列号是segment第一个字节的编号
  • 开启计时器
  • 设置超时时间

(2)超时

  • 重传引起超时的segment
  • 重启定时器

(3)收到ACK

​ 如果确定此前未确定的segment则更新sendbase,如果窗口中还有未被确认的分组。则重新启动定时器。

3.快速重传机制

(1)通过重复ACK检测分组丢失。

(2)如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失,则在定时器超时之前即进行重传。

TCP流量控制

​ 检测buffer的剩余空间,通过回传消息告知发送方控制流量大小。

TCP连接管理

对于这一部分,我认为CSDN有一篇文章写得比较清晰,“TCP连接管理”这一段则是对CSDN上文章的转载。

  1. TCP连接的建立与终止
    一个TCP连接是由一个四元组构成,分别是两个IP地址和两个端口号。
    一个TCP的连接分为3个阶段:启动,数据传输,退出。

  2. TCP连接的步骤:
    (1)客户端发送一个SYN报文段, SYN报文段就是TCP头部中的SYN置1的报文段,在这个报文段中指明想要连接的端口号和客户端的初始序列号,通常把这个报文段称为段1.

    ​ (2)服务器端收到这个报文,发送自己的SYN报文做为响应,在这个报文中,包括服务器端的初始序列号,同时还会给客户端发送一个ACK,ACK的值为客户端的初始序列号+1,这个报文称为段2,每次发送一个SYN,序列号就会自动加1.
    ​ (3)客户端收到服务器端发来的SYN报文,将服务器的初始序列号+1,作为ACK,返回给服务器,这个报文称为段3
    发送的这三个报文,就能完成一个TCP的连接建立,称为三次握手。

  3. TCP关闭步骤:
    连接的任何一方,都可以发起关闭操作,同时还支持双方同时关闭连接的操作。
    (1)连接的主动关闭者,发送一个FIN报文(TCP头部中的FIN置1的报文),希望接收者看到自己当前的序列号,还有一个ACK(确定对方最近一次发来的数据)
    (2)连接的被动关闭者将收到的连接主动发起者发来的当前序列号+1,作为ACK的值,返回给连接主动者。
    (3)被动关闭者转变为主动关闭者,发送自己的FIN报文,包括自己的报文序列号。
    (4)连接的主动关闭者收到连接的被动关闭者发送来的FIN报文,发送一个ACK,对收到这个报文的响应。关闭一个TCP连接,需要四个报文,称为TCP的四次握手。

  4. TCP半关闭:
    由于TCP的双工通信特性,TCP支持半关闭。TCP的半关闭操作是指仅关闭数据流的一个传输方向,而另一方仍在传输数据直到它被关闭为止。

  5. 同时打开与关闭:
    假设主机A的应用程序通过本地7777端口向主机B的8888端口发送一个主动打开请求,同时,主机B的应用程序也通过本地8888端口向主机A的7777端口发送一个主动打开请求。

    ​ 一个同时打开过程需要交换四个报文段,比普通的三次握手增加了一次,由于通信双方都是客户端和服务器的角色。
    ​ 同时关闭与普通的并没有太大的区别,因为通信的一方,都可以主动的提出关闭请求,并发送首个FIN,两者最大的区别在于,同时关闭是交叉,而普通的关闭是顺时的。

  6. 初始序列号:
    (1)在发送用于建立连接的SYN之前,通信双方会选择一个初始序列号。初始序列号会随时间而改变,因此每个连接都拥有不同的初始序列号。初始序列号可被视为一个32位的计数器,计数器的值每4微秒加1,以防止出现于其他连接的序列号重叠的情况。

  7. 连接建立超时
    在连接建立超时的时候,连接的打开方会产生指数回退行为:客户端TCP为了建立连接而频繁发送SYN报文段,首个报文段发送后3s发送第二个,第二个报文段之后6s发送第三个,第三个报文段12s后发送第四个…
    ————————————————
    版权声明:本文为CSDN博主「纯粹.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_39346534/article/details/105644307

拥塞控制原理

  1. 拥塞

    (1)非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理。”

    (2)表现:分组丢失、分组延迟过大。

  2. 拥塞的成因和代价

    (1)成因1:线路带宽有限。

    (2)代价1:拥塞时分组延迟大。

    (3)成因2:路由缓存有限。

    (4)代价2:需要大量的数据重传,造成网络资源浪费。

  3. 拥塞控制的方法

    (1)端到端的拥塞控制:

    • 网络层不需要显示地提供支持
    • 端系统通过观察loss,delay等网络行为判断是否发送拥塞
    • TCP采取这种方法

    (2)网络辅助的拥塞控制:

    • 路由器向发送方显示地反馈网络拥塞消息
    • 简单的拥塞提示(1bit):SNA,DECbit,TCP/IP ECN,ATM
    • 提示发送方应采取何种速率
  4. ATM ABR拥塞控制

    (1)ABR:available bit rate

    • “弹性服务”
    • 如果发送路径负载较低,则尽可能的使用带宽
    • 如果发送路径拥塞,则发送方降到最低保障速率

    (2)RM cells:

    • 发送方发送
    • 在交换机位置改变RM cell位(网络辅助),再由返回方把RM cell返回给发送方

TCP拥塞控制(TCP拥塞控制算法)

慢启动

​ 1.当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为1。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至原来的2倍。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

​ 2.当TCP连接时,cwnd的值通常初始置为一个MSS(最大报文段大小)的较小值,初始发送速率大约为MSS/RTT。

​ 3.在慢启动状态,cwnd的值以一个MSS开始,cwnd每当传输的报文被确定就增加1个MSS。

​ 4.如图,这个过程每过一个RTT,发送速率就翻番。因此,TCP发送数量初始慢,但在慢启动阶段以指数增长。

​ 5.慢启动结束的三种方法:

​ (1)如果存在一个由超时指示的丢包事件(拥塞),TCP发送方将cwnd设置为1并重新楷书慢启动过程。它将下一个状态的变量的值ssthresh(慢启动阈值)设置为cwnd/2,即当检测到拥塞时将ssthresh设为拥塞窗口的一半。

​ (2)当检测到拥塞时ssthresh设为cwnd的值得一半,当cwnd等于ssthresh时,进入拥塞避免模式。

​ (3)如果检测到3个冗余的ACK,这时TCP执行一种快速重传。

拥塞避免

​ 1.一旦进入拥塞避免状态,则采用一种较为保守的方法,每个RTT只将cwnd的值增加一个MSS。

​ 例如,如果MSS是1460字节并且cwnd是14600字节,则在一个RTT内发送10个报文段。每个到达ACK(假设每个报文段是一个ACK)增加1/10个MSS的拥塞窗口长度,以此在收到所有10个报文段的确认后,拥塞窗口的值增加一个MSS。

​ 2.当出现超时时,cwnd的值被设置为1个MSS;当丢包事件出现时,ssthresh的值被更新为cwnd的一半。

​ 3.AIMD(加法增大乘法减小):

​ (1)乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd置为1,sthresh置为cwnd的一半,然后开始执行慢启动算法

​ (2)加法增大:当网络频发出现超时情况时,ssthresh就下降的很快,为了减少注入到网络当中的分组数,而加法增大是执行拥塞避免算法后,是拥塞窗口缓慢的增大,以防止网络过早出现拥塞。

快重传和快速恢复状态

​ 1.快重传:

​ (1)在上图中,接收方成功的接受了发送方发来的M1,M2并且分别发送了ACK,现在接收方没有收到M3,而收到了M4,显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重传算法,在收到M4,M5等报文段的时候,不断重复的向发送方发送M2的ACK,如果接收方一连收到三个重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段。

​ (2)对于引起TCP进入快速恢复状态的缺失报文段,对收到的ACK,cwnd的值增加一个MSS。当对丢失的报文的一个ACK到达时,TCP在降低cwnd后进入快速恢复状态。

​ 3.快恢复:

​ (1)当发送方连续收到三个重复确认,执行乘法减小,ssthresh减半。

​ (2)由于发送方可能认为网络现在没有拥塞,因此与慢开始不同,把cwnd值设置为ssthresh减半之后的值,然后执行拥塞避免算法,线性增大cwnd。
恢复状态的缺失报文段,对收到的ACK,cwnd的值增加一个MSS。当对丢失的报文的一个ACK到达时,TCP在降低cwnd后进入快速恢复状态。

​ 3.快恢复:

​ (1)当发送方连续收到三个重复确认,执行乘法减小,ssthresh减半。

​ (2)由于发送方可能认为网络现在没有拥塞,因此与慢开始不同,把cwnd值设置为ssthresh减半之后的值,然后执行拥塞避免算法,线性增大cwnd。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值