1.运输层概述

运输层的任务:为运行在不同主机上的应用进程提供直接的通信服务

运输层主要使用的两种协议:

  1. 面向连接的TCP
  2. 无连接的UDP

2.端口号、复用与分用的概念

TCP/IP体系的运输层使用端口号区分应用层的不同应用进程:

  • 端口号:占16比特,取值范围为0655350-65535
    • 熟知端口号:0~1023,被应用在TCP/IP体系的一些重要应用协议,如:
      • FTP:21/20
      • HTTP:80
      • DNS:53
    • 登记端口号:1024~49151,为没有熟知端口号的应用程序使用
    • 短暂端口号:49152~65535,留给客户进程选择暂时使用。通信结束后,可供其他进程使用
  • 端口号只具有本地意义,不同计算机中的相同端口号没有联系

发送方的复用和接收方的分用
image.png

TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
image.png

UDP协议:

  1. RIP:520
  2. DNS:53
  3. TFTP:69
  4. SNMP:161
  5. DHCP:67/68
    TCP协议:
  6. SMTP:25
  7. FTP:21/20
  8. BGP:179
  9. HTTP:80
  10. HTTPS:443
    在网络层中,无论UDP还是TCP都用IP协议封装,UDP的协议字段为17,TCP的为6

3.UDP和TCP的对比

image.png

行为 UDP TCP
连接方式 无连接 面向连接
通信 支持一对一,一对多,多对一和多对多交互通信image.png
一对一通信image.png
对报文的处理 对应用层交付的报文直接打包image.png
以字节流传输image.png
传输类型 尽最大努力交付,不可靠传输image.png
可靠传输,使用流量控制和拥塞控制image.png

首部 首部开销小,仅8字节image.png
首部最小20字节,最大60字节image.png

4.TCP的流量控制

流量控制:使发送方的发送速率不要过快,让接收方来得及接收

滑动窗口机制作为流量控制的体现

  1. TCP接收方通过接收窗口来限制发送窗口的大小
    通过画图来体会发送窗口的变化
    image.png
  2. 接收到接收方的零窗口通知,启动持续计时器,超时后,发送零窗口探测报文
    image.png

5.TCP的拥塞控制

概念:

  1. 拥塞:对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能变差
  2. 出现拥塞而不控制,吞吐量将随输入负载的增大而下降

拥塞控制算法:
前置条件:数据单向传送;接收方缓存空间足够大;以最大报文段的个数为单位
前置概念:
1. 发送方维护一个状态变量 拥塞窗口cwnd,
维护原则:网络出现拥塞,则cwnd减少,反之增大
网络拥塞的依据:出现超时重传
2.发送窗口 swnd=cwnd
3.慢开始门限ssthresh,判断算法切换的依据

  1. 慢开始
    在cwnd < ssthresh时,cwnd呈现2的指数增长趋势
  2. 拥塞避免算法
    1. 在cwnd > ssthresh时,cwnd呈现线性增长
    2. 判断网络拥塞出现后,将ssthresh值更新为出现拥塞时cwnd的一半,且cwnd从1开始,重新执行慢开始算法
  3. 快重传算法
    基于网络并非拥塞但因为超时重传而误判拥塞出现的情况而研究出来的算法
    原理:当发送方发送的报文段丢失后,会继续发送报文段,而接收方接收到失序到达的报文段,会重新发送对已丢失报文段的前一报文段的确认报文,提醒发送方接收方想要丢失的那一个报文段,当连续三次接收到相同的确认报文,发送方会重新发送丢失的报文段,而不必等到超时重传
    image.png
  4. 快恢复算法
    基于快重传算法的前提下,连续收到三个连续重复的确认后,ssthresh值和cwnd值更新为当前窗口的一半,执行拥塞避免算法
    image.png
    image.png

6.TCP超时重传时间的选择

超时重传时间RTO应略大于往返时间RTT

  1. RTO 小于 RTT :引起不必要的超时重传
  2. RTO 远大于 RTT :网络信道资源空闲,降低传输效率

超时重传时间RTO=RTTS+4RTTDRTO=RTT_S+4*RTT_D
加权平均往返时间RTTS=(1α)RTTSi1+αRTT样本,i2,0α<1加权平均往返时间RTT_S=(1-\alpha)*RTT_{Si-1}+\alpha*新RTT样本,i\geq2,0\leq\alpha<1
i=1,RTTS1=RTT1i=1,RTT_{S1}=RTT_1
α建议标准值是1/8,即α=0.125\alpha建议标准值是1/8,即\alpha=0.125
RTT偏差的加权平均RTTD=(1β)RTTSi1+βRTTSi1RTT样本,i2,0β<1RTT偏差的加权平均RTT_D=(1-\beta)*RTT_{Si-1}+\beta*|RTT_{Si-1}-新RTT样本|,i\geq2,0\leq\beta<1
i=1,RTTD1=RTT1/2i=1,RTT_{D1}=RTT_1/2
β建议标准值是1/8,β=0.25\beta建议标准值是1/8,即\beta=0.25

Karn算法:计算加权平均往返时间RTTSRTT_S时,只要报文段重传,就不采用其往返时间样本
但Karn算法在时延变长的情况下会导致反复重传,故修正为超时重传发生后RTO=2RTO新RTO=2*旧RTO

7.TCP可靠传输的实现

  1. TCP基于以字节为单位的滑动窗口实现可靠传输
    1. 发送方在未收到接受方的确认时,可将发送窗口内还未发送的数据全部发送出去
    2. 接收方只接收序号在发送窗口内的数据
      image.png
  2. 同一时刻,发送方的发送窗口和接收方的接收窗口不一定一样大
    1. 网络传送窗口值存在时间滞后
    2. 发送方可能根据网络的拥塞情况调整窗口大小
  3. 对于不按序到达的数据,TCP一般临时存放在缓存中,等接收到缺少的前序数据再交付上层
  4. TCP要求接收方有累积确认和捎带确认机制,减小传输开销。
    1. 接收方不可以过分推迟确认,导致不必要的超时重传
    2. TCP标准规定,确认推迟时间不应超过0.5s。
  5. TCP的通信是全双工通信,需要弄清窗口属于哪一方的发送或接收窗口

8.TCP的运输连接管理

TCP的运输连接的三个阶段:建立TCP连接,数据传送,释放TCP连接

8.1 TCP 的连接建立

TCP的连接建立要解决的问题:

  1. 使TCP 双发知晓对方存在
  2. 协商参数(最大窗口值,是否使用窗口扩大选项等)
  3. 对运输实体资源(如缓存大小,连接表中的项目)进行分配
    “三报文握手”建立连接
    image.png

8.2 TCP的连接释放

“四报文挥手”释放连接
image.png

9.TCP报文段的首部格式

image.png

  1. 源端口、目的端口:占16比特,写入源/目的端口号,用来标识发送/接收该TCP报文段的应用进程
  2. 序号:占32比特,取值范围:023210-2^{32}-1,序号增加到最后一个后,又从0开始。用于指出本TCP报文段数据载荷的第一个字节的序号
  3. 确认号:占32比特,取值范围:023210-2^{32}-1,序号增加到最后一个后,又从0开始。用于指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号以及对之前收到所有数据的确认
  4. 确认标志位ACK:取值为1时,确认号生效;取值为0时,确认号无效。
  5. 数据偏移:占4比特,以4字节为单位。用于指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远
  6. 保留:占6比特,保留为今后使用,目前应置为0
  7. 窗口:占16比特,以字节为单位,指出发送本报文段的一方的接收窗口
  8. 校验和:占16比特,检查TCP报文段首部和数据载荷
  9. 同步标志位SYN:在TCP建立连接时用来同步序号。在建立连接时应置为1
  10. 终止标志位FIN:用来释放TCP连接。在释放连接时应置为1
  11. 复位标志位RST:用来复位TCP连接。RST=1时,表明连接异常 or 拒绝非法报文段/拒绝打开一个TCP连接
  12. 推送标志位PSH:PSH=1的报文段会尽快上交应用进程
  13. 紧急标志位URG:URG=1,紧急指针字段生效
  14. 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度
  15. 选项
    image.png
  16. 填充:确保报文段首部能被4整除