【学习笔记-CS144 计算机网络】传输层

Birderr / 2023-08-01 / 原文

概述

主要任务:
  1. 对接端口

  2. 连接管理

  3. 分割和重组上下数据

  4. 差错和纠错功能

  5. 流量控制

传输层协议

TCP

特点

  1. 可靠性高

  2. 端到端,面向连接

  3. 基于字节

  4. 速度慢

向下传递操作步骤:

  1. 接受来自应用层的8位字节的数据流,并根据MTU分段。

  2. 封装上队头标记,打包成数据包

  3. 将数据包传送给IP层(网络层)


    TCP队头标记:(图片不贴)

  4. 端口(16*2):源端口和目的端口

  5. 序列号seq(32)

  6. 确认号ack(32):根据握手过程改变大小

  7. Data Offset数据偏移(4):队头的总长,一个1标识四字节。

    eg:1111,就是15(1111)*4(bit) = 60(bit),整个队头有60字节

  8. 保留位(4):目前还没制定用途

  9. 控制位(1*8):都是0或者1

    1. CWR:用于 IP 首部的 ECN 字段。ECE 为 1 时,则通知对方已将拥塞窗口缩小。

    2. ECE:在收到数据包的 IP 首部中 ECN 为 1 时将 TCP 首部中的 ECE 设置为 1,表示从对方到这边的网络有拥塞。

    3. URG:紧急模式

    4. ACK:确认序列号(ACK)有效。

    5. PSH:推送,接收方应尽快给应用程序传送这个数据。

    6. RST:该位为 1 表示 TCP 连接中出现异常必须强制断开连接。为重建链接做准备。

    7. SYN:初始化一个连接的同步序列号(SEQ)

    8. FIN:该位为 1 表示今后不会有数据发送,希望断开连接。

  10. window(16):表示自己能接受到的流量大小(对方返传数据)

  11. Checksum(16):校验数据包长度和是否正确

  12. Urgent Pointer(16):紧急情况标识

  13. options(32*N):额外用途

  14. 数据包


    流程:建立连接

  15. 客户端发送【seq=a,SYN=1】给服务端

  16. 服务端发送【ack=a+1,seq=b,SYN=1,ACK=1】给客户端

  17. 客户端发送【seq=a+1,ack=b+1,ACK=1】给服务端,成功建立

流程:终止连接

  1. 客户端发送【seq=a,FIN=1,ACK=1】给服务端,

    1. 客户端进入FIN-WAIT1

  2. 服务端发送【seq=b,ack=a+1,ACK=1】给客户端,

    1. 服务端进入CLOSE-WAIT

    2. 客户端在接收到后进入FIN-WAIT2

  3. 服务端再发送【seq=b,ack=a+1,FIN=1,ACK=1】给客户端

    1. 服务端进入LAST-ACK

    2. 客户端在接收到后进入TIME-WAIT

  4. 客户端发送【seq=a+1,ack=b+1,ACK=1】给服务端

    1. 服务端接收到后CLOSE

    2. 服务端如果没有收到(ACK丢失),会再次发来FIN。

      处于TIME-WAIT的客户端要再发一个ACK。


拥塞控制

原理:通过出现超时来判断网络出现拥塞

  1. 慢开始:一开始发送内容量较少,之后按指数增长增加,直到达到慢开始门限,使用拥塞避免算法

  2. 拥塞避免:每经过一个时间单位,就把发送内容量按线性增长增加

  3. 出现超时:使用慢开始

  4. 快重传:出现多个ACK,表示数据丢失。此时发送缺失报文

  5. 快恢复:将门限调整为此时大小的一半,并执行拥塞避免算法


UDP

特点

  1. 可靠性低

  2. 一次性

  3. 无拥塞控制

  4. 不返回错误信息

  5. 不合并控制报文大小

  6. 速度快

向下传递操作步骤:

  1. 接受来自应用层的数据流,直接封装

  2. 传递给IP层

UDP队头标记:(图片不贴)

  1. 端口(16):源端口和目的端口

  2. UDP总长度(16)

  3. UDP检验和(16)

流程:

交给IP层处理