读书笔记之《计算机网络》---第五章 运输层

本章目录

  1. 运输层协议概述
  2. 用户数据报协议UDP
  3. 传输控制协议TCP概述
  4. 可靠传输的工作原理
  5. TCP报文段首部格式
  6. TCP可靠传输的实现
  7. TCP流量控制
  8. TCP拥塞控制
  9. TCP的运输连接管理

运输层协议概述
两个主机进行通信其实就是两个主机中的应用进程互相通信
运输层的两种不同的运输协议,面向连接的TCP和无连接的UDP
两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元,根据TCP或UDP分别称为TCP报文段和UDP用户数据报
这里写图片描述

在运输层使用协议端口号,简称端口,解决进程通信复用和分用问题
端口号只具有本地意义
服务端使用的端口号分为两类:

  1. 熟知端口号或系统端口号:0~1023
  2. 登记端口号:1024~49161

用户数据报协议UDP
UDP的主要特点:

  1. UDP是无连接到
  2. UDP使用尽最大努力交付
  3. UDP是面向报文的:应用层交给UDP多长的报文,UDP就照样发送,不拆分,也不合并
    UDP没有拥塞控制
    UDP支持一对一、一对多、多对一和多对多的交互通信
    UDP的首部开销小

UDP的首部格式如下图:
这里写图片描述
源端口:源端口号
目的端口:目的的端口号
长度:UDP用户数据报的长度,最小值是8(仅首部)
检验和:检测UDP用户数据报再传输中是否有错
伪首部:在计算校验和时临时加上,不是真正的UDP首部,发送UDP数据报时会去掉
UDP的检验和是首部和数据部分一起检验

UDP计算检验和的方法与IP数据报的检验类似,IP数据报的检验和只检验首部,而UDP的检验和把首部和数据部分一起检验。
检验方法:在发送方首先把全零放入检验和字段,再把伪首部以及UDP用户数据报看成许多16位的字串接起来,若UDP的用户数据包的数据部分不是偶数个字节,则要填入一个全零的字节(但这个字节不会被发送),然后按照二进制反码计算出这些16位字的和,将此和的二进制反码写入检验和字段。在接收方把UDP用户数据报连同伪首部一起,按照二进制反码求这些16位字的和,当无差错是,其借工应全为1。如下图所示:
这里写图片描述

传输控制协议TCP概述
TCP最重要的特点:

  1. TCP是面向连接的运输层协议
  2. 每一条TCP只能有两个端点
  3. TCP提供可靠交付服务
  4. TCP提供全双工通信
  5. 面向字节流

这里写图片描述
上图指出,TCP和UDP在发送报文时采用的方式完全不同,TCP对应用进程一次把多长的报文发送到TCP缓存是不关心的,TCP根据对方给的窗口之和当前网络的拥塞程度来决定一个报文应包含的字节数,而UDP发送的报文长度是应用进程给出的。如果传到TCP缓存的数据块太长,TCP就可以把它划分短一些在传送,若果太短,TCP也可以等待累积足够多的字节后再构成报文段发送。

每一条TCP连接有两个端点,TCP端点叫做套接字或插口
套接字socket=(IP地址:端口号)
同一名字socket表示多种不同的意思:

  1. 应用编程接口API,称为socket API,简称socket
  2. 在socket API中的一个函数名也叫socket
  3. 调用socket函数的端点称为socket
  4. 调用socket函数返回值称为socket描述,也可简称为socket
  5. 操作系统内核中联网协议的Berkeley实现称为socket实现

可靠传输的工作原理

“停止等待”就是在每发送完一个分组后就通知发送,等待对方确认,在收到确认后再发送下一个分组,流程如下图所示:
这里写图片描述
在B接收到出错报文时丢弃报文,他什么都不用做,A在一定时间内未收到确认,就认为发送的分组丢失了,重传,叫做超时重传,所以每发送一份分组都要设置一个超市计时器。
我们应该注意三点:

  1. A在发送一个分组后必须保留已经发送的分组的副本,只有收到确认后才能清除副本
  2. 分组和确认都必须进行编号
  3. 超时计时器的时间应比数据往返时间更长一点
    确认报文丢失和迟到:传输过程没有出错,但回送的确认报文丢失了或迟到了,这时发送方会重传,接收方收到了重传分组后就丢弃,不向上层传送。然后再想发送方发送确认。因为接收方是由于没有收到确认所以重传数据的。
    停止等待协议的优点是简单,但缺点是信道利用率太低

为了提高传输效率,采用流水线传输
这里写图片描述

连续ARQ协议:发送方维护一个滑动窗口,滑动窗口内的分组可以连续发送给接收方,而不需要等待确认。
连续ARQ协议规定,发送发每收到一个分组确认,就把窗口向前滑动一个分组
接收方一般采用累积确认的方式,对按序到达的最后一个分组发送确认
这里写图片描述
累积确认的优点是容易实现,即使确认丢失也不必重传。缺点是不能向发送方正确反映接收方已经正确接收到的所有分组

TCP报文段首部格式
TCP报文段分为首部和数据两部分,如下图
这里写图片描述

  1. 源端口和目的端口:各占2字节
  2. 序号:占4字节范围是0~2的32次方-1,整个要传送的字节流的起始序号必须在连接建立时设置,每一个字节都按顺序编号
  3. 确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号
  4. 数据偏移:占4位,指出TCP报文段的数据起始处距离TCP报文段起始处的距离
  5. 保留:占6位,目前置为0,为今后使用
  6. 紧急URG:当URG=1时表示紧急指针字段有效,表示报文有紧急数据,应尽快传送
  7. 确认ACK:仅当ACK=1时确认号字段才有效
  8. 推送PSH:当PSH=1时,发送方会立即将报文段发出,不必等缓存填满,接收方会立即接收交付
  9. 复位RST:当RST=1时表示TCP连接中出现严重错误,必须释放连接
  10. 同步SYN:在建立连接时用来同步序号,当SYN=1,ACK=0时表明是一个连接请求报文段,若同意建立连接,则响应报文段中SYN=1,ACK=1
  11. 终止FIN:用来释放一个连接
  12. 窗口:占2字节,发送报文段的一方的接收窗口,告诉对方,从本报文段的确认号算起,允许对方发送的数据量,窗口值是接收方让发送方设置其发送窗口的依据
  13. 检验和:占2字节,检验首部和数据两部分,计算方法与UDP一致,需要加上伪首部
  14. 紧急指针:占2字节,指出本报文中紧急数据的字节数,紧急指针指出紧急数据的末尾在报文段中的位置
  15. 选项:长度可变,最长40字节,
    a) 最大报文段长度MSS选项:是每一个TCP报文段中数据字段的最大长度,
    b) 窗口扩大选项:占3字节,其中有一个字节表示位移值S,扩大窗口值,最大值为14
    c) 时间戳选项:占10字节,主要字段有时间戳值和时间戳回送回答,用来计算RTT,用来方式序号绕回PAWS
    d) 选择确认选项

TCP可靠传输的实现
以字节为单位的滑动窗口

这里写图片描述
上图是发送方A构造发送窗口例子:A收到了B的确认报文段,其中窗口值20,确认号31,则A构造自己的发送窗口

这里写图片描述
上图是发送方A发送数据后窗口变化和接收方接收窗口的变化:B只能都按序收到的数据中的最高序号给出确认,因此B发送的确认报文中的确认号是31,窗口值是20,A的发送窗口向后滑动一个序号位置。

这里写图片描述
上图是发送方A发送过程中窗口值变化的过程:A收到了31到33的确认,窗口向后发动3个序号位置,B的接收窗口也向后滑动3个序号位置

我们应该注意三点:

  1. 虽然A的发送窗口是根据B的接收窗口设置的,但同一时刻A的发送窗口可能和B的接收窗口不一样大
  2. 对于不按序到达的数据,TCP会临时存放,等待缺少的字节收到后再按序交付跟上层应用进程。
  3. TCP要求接收方必须有累积确认功能,也可已在发送数据是捎带确认信息,但是不能过分推迟确认,过分推迟会导致发送方不必要的重传,推迟时间不能超过0.5秒
    这里写图片描述

超时重传时间选择:TCP采用一种自适应算法,记录发送的报文段的往返时间RTT,计算并保留RTT的一个加权平均往返时间RTTs(平滑往返时间)
这里写图片描述
其中0≦α<1,若α很接近于0,表示新的RTTs值和旧的RTTs的值相比变化不大
超时重传时间RTO应略大于RTTs,RTO=RTTs+4xRTTd
RTTd是RTT的偏差加权平均值
这里写图片描述
这里写图片描述
报文段每重传一次,就把超时重传时间RTO增大为2倍,当不再发生报文段重传,才根据以上方法计算超时重传时间

选择确认SACK:选择确认SACK中指明收到数据块的边界,来确定中间未收到的数据段,
SACK最多指明4个字节块的边界信息,每个字节块需要8个字节描述,另需要两个字节,一个指明SACK选项,一个指明这个选项占多少字节,
这里写图片描述

TCP流量控制
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收
接收方发送接收窗口,发送方发送窗口不能超过接收方给出的就收窗口的数值
这里写图片描述

有一个问题,假设B向A发送零窗口的报文段后不久,B的接收缓存又有了一些空间,于是B向A发送rwnd=400的报文段,但是这个报文段丢失了,那么,A会一直等待B发送非零窗口的通知,而B会一直等待A发送数据,形成死局。为了解决这个问题,TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到了零窗口通知,就启动计时器,拖计时器到期就发送一个零窗口探测报文段,对方接收到探测报文后就发送确认报文,确认报文中给出窗口值。

糊涂窗口综合症:TCP接收方缓存已满了,而交互式的应用进程一次只从接收缓存中读取一个字节,然后向发送方发送确认,并设置窗口值为1个字节,发送方又发送一个字节,接收方发回确认,窗口值仍是1。这样网络传输的效率非常低。
解决办法:可以让接收方等待一段时间,有足够空间后再发送确认报文

TCP拥塞控制

拥塞控制就是防止过多的数据注入到网络中
然而,流量控制往往只是点对点通信量的控制,接收端控制发送端
控制拥塞的方法可以分为开环控制和闭环控制
开环控制:在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞,一但系统运行起来,就不在中途进行改正
闭环控制:

  1. 检测网络系统以便检测到拥塞在合适、何处发生
  2. 把拥塞发生的信息传送到可采取行动的地方
  3. 调整网络系统的运行以解决出现的问题

几种拥塞控制的方法:
RFC2581定义了进行拥塞控制的四种算法:慢开始、拥塞避免、快重传和快恢复
发送方维持一个叫做拥塞窗口的状态变量,大小取决于网络的拥塞程度,发送方让自己的发送窗口等于拥塞窗口

慢开始:由小到大逐渐增大拥塞窗口的数值,每经过一次传输轮次,拥塞窗口cwnd就加倍,为了防止cwnd过大,需要设置一个慢开始门限ssthresh,用法如下
这里写图片描述
这里写图片描述

拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每次加1,而不是翻倍,只要发送方判断网络出现拥塞,就将ssthresh设置为出现拥塞是的发送窗口值得一半,但不能小于2。
这里写图片描述

快重传:接收方每收到一个失序的报文段后就立即发送重复确认(为的是使发送方及早摘到有报文段没有到达),而不是等待发送数据时捎带。发送方一连收到三个重复确认后,就立即发送对方尚未收到的报文段。如下图所示:
这里写图片描述

快恢复:

  1. 发送方连续收到三个重复确认时,执行“乘法减少”将ssthresh减半
  2. 与慢开始不同,拥塞窗口直接设置为ssthresh的值
    如下图所示:
    这里写图片描述

注意:发送窗口的上限值=Min[接收方窗口rwnd,拥塞窗口cwnd]。
这里写图片描述

随机早期检测RED
RED算法使路由器维持两个参数,队列长度最小门限THmin和最大门限THmax
RED算法:

  1. 若平均队列长度小于最小门限THmin,新到分组加入队列排队
  2. 若平均队列长度大于最大门限THmax,则新分组丢弃
  3. 若平均队列长度在最小门限和最大门限之间,则按某一概率将新到分组丢弃
    这里写图片描述

RED采用了和计算平均往返时间RTT类似的加权平均的方法计算平均队列长度Lav
这里写图片描述
这里写图片描述

TCP的运输连接管理
运输连接的三个阶段:连接建立、数据传送和连接释放
TCP连接时C/S模式,

TCP三次握手:
这里写图片描述

  1. 首先B创建传输控制块TCB,进入LISTEN(监听)状态
  2. A创建TCB,向B发送请求连接报文段,SYN=1,初始序号seq=x,然后A进入SYN-SENT(同步已发送)状态
  3. B收到请求连接报文段,向A发送确认报文段,SYN=1,ACK=1,ack=x+1,seq=y,B进入SYN-RCVD(同步收到)状态
  4. A收到B的确认后,还要向B给出确认,ACK=1,ack=y+1,seq=x+1,A进入ESTABLISHED(连接已建立)状态
  5. B收到A的确认后也进入ESTABLISHED状态

TCP四次挥手:
这里写图片描述

  1. A发送连接释放报文段,FIN=1,seq=u,u是前面传送的最后一个字节的序号加1,A进入FIN-WAIT-1(终止等待1)状态
  2. B收到连接释放报文段,发送确认,确认号是ack=u+1,ack=v,B进入CLOSE-WAIT(关闭等待)状态,这时TCP处于半关闭状态,这时B到A方向的连接并未关闭,B向A发送数据
  3. A收到B的确认后进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段
  4. B已经没有向A发送的数据后,就发送一个连接释放报文段,FIN=1,ack=u+1,B进入LAST-ACK(最后确认)状态,等待A确认
  5. A收到B的连接释放报文段后,发送确认ack=w+1,seq=u+1,然后进入TIME-WAIT(时间等待)状态,这时TCP还没有释放掉,必须经过时间等待计时器设置的时间2MSL后A才进CLOSED状态,MSL最长报文寿命
  6. B收到A的确认后,进入CLOSED状态
    TCP还设有一个保活计时器,防止与服务器已经建立了连接的客户端突然宕机,服务器白白等待客户端的数据。若两小时没有收到客户数据,服务器发送一个探测报文段,以后每隔75分钟发送一次,若发送10个探测报文断后仍无响应,则关闭连接。

TCP的有限状态机图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_25744595/article/details/82691960