传输层小结

6/20/2022 可恶的408

家教似乎要出新动画的!

十几年了,希望是真的😭😭😭😭😭

传输层的功能

提供端到端的传输,利用套接字,实现复用分用

UDP

再IP的基础上添加了复用分用以及差错检测。

  1. 无需建立连接
  2. 无连接状态
  3. 分组首部开销小,8B
  4. 没有拥塞控制。

首部格式

  • 16b 源端口,不用时可以全为0
  • 16b 目的端口
  • 16b UDP长度 首部+数据 单位B
  • 16b 校验和 ,伪首部(一些特殊的信息,源和目的IP和0001000100001111)与所有字节的反码相加的反码

UDP报文长度单位位4B

TCP

特点

  1. 面向连接,逻辑链接
  2. 只有两个端点
  3. 可靠,无差错、不丢失、不重复、有序
  4. 全双工
  5. 面向字节流,确认是对报文里的序号确认的

首部格式

  • 16b 源端口
  • 16b 目的端口
  • 32b 序号 当前发送的字节流的第一个字节的序号
  • 32b 确认号 希望接受对方的下一个字节流的第一个序号
  • 4b 数据偏移 首部长度的便宜 首部单位4B 15*4=60 首部最大60B
  • 6b 保留
  • 1b URG 紧急
  • 1b ACK 确认位 1 确认号有效 建立连接后都置为1
  • 1b PSH 推送位 尽快上交,别再缓存呆
  • 1b RST 复位位 释放连接重连
  • 1b SYN 同步位 连接请求或连接接收报文
  • 1b FIN 终止位 释放连接
  • 16b 窗口 流量控制的窗口,允许对方发送的数据量
  • 16b 校验和 同UDP 首部信息 17改位6 0000011000001111
  • 16b 紧急指针 URF为1有效 紧急数据有多大
  • 选项 自定义 首部长度单位4B

连接与释放

三次握手和四次挥手

挺简单的,注意一些特殊的位就好了,和序号的使用就好了

  • 三次握手
  1. SYN=1 ,seq=x
  2. SYN=1 ,ACK=1 ,seq=y, ack=x+1 不可带数据
  3. ACK=1 ,seq=x+1 ,ack=y+1 可以带数据,不带不消耗seq
  • 四次挥手
  1. FIN=1 ,seq=u FIN-WAIT-1
  2. ACK=1 ,seq=v ,ack=u+1 FINT-WAIT-2
  3. FIN=1 ,ACK=1 ,seq=w ,ack=u+1 TIME-WAIT
  4. ACK=1 ,seq=u+1 ,ack=w+1

可靠传输

  1. 序号 对整个字节流的每个字节都编上序号,无结构但有序
  2. 确认 希望收到对方下一个报文的第一个字节的序号,默认采用累计确认,之确认到第一个丢失的字节
  3. 重传 超时重传&冗余ACK重传

流量控制

接收方根据接收缓存的大小,动态调整发送发的发送窗口。这个称为接收窗口rwnd。

与数据链路层不一样,传输层是端到端的,数据链路层是相邻结点的,并且窗口大小不能动态调整。

拥塞控制

拥塞控制让网络承受现有的网络负荷,全局性过程设计全部的主机,路由器等等。

拥塞窗口cwnd(congestion)

  1. 慢开始 先令cwnd=1,即MSS最大报文段长度,每接收到一个报文段的确认则+1,会变成指数增长。又有个阈值ssthresh,超过后使用拥塞避免。
  2. 拥塞避免 cwnd 发完一个窗口后+MSS

拥塞处理,慢开始启动,超过ssthresh使用拥塞避免,出现拥塞,未按时收到,则从1重新开始,ssthresh设为原先的一半,但大于2。

  1. 快重传 连续收到三个重复的ACK报文后直接重传。
  2. 快恢复 跳过cwnd从1重新开始,从快重传后,从cwnd/2开始。