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

发布时间 2023-07-31 20:24:24作者: Birderr

概述

主要任务:
  1. 对接端口

  2. 连接管理

  3. 分割和重组上下数据

  4. 差错和纠错功能

  5. 流量控制

传输层协议

TCP

特点

  1. 可靠性高

  2. 端到端,面向连接

  3. 基于字节

  4. 速度慢

向下传递操作步骤:

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

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

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


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

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

  2. 序列号seq(32)

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

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

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

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

  6. 控制位(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 表示今后不会有数据发送,希望断开连接。

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

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

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

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

  11. 数据包


    流程:建立连接

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

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

  3. 客户端发送【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。


UDP

特点

  1. 可靠性低

  2. 一次性

  3. 无拥塞控制

  4. 不返回错误信息

  5. 不合并控制报文大小

  6. 速度快

向下传递操作步骤:

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

  2. 传递给IP层

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

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

  2. UDP总长度(16)

  3. UDP检验和(16)

流程:

  1. 交给IP层处理