跳至内容

传输层

传输层负责端到端的连接建立、数据分段与流量控制。这篇讲 TCP 与 UDP 的区别、TCP 的三次握手与四次挥手、TCP/UDP 的封装字段,以及常用端口号。

TCP 与 UDP 对比

传输层有两个核心协议:

特性TCPUDP
连接面向连接无连接
可靠性可靠传输不可靠传输
资源占用
速度延迟相对较高传输速度快
典型场景文件传输、网页语音、视频、查询应答

TCP 可靠的原因:有排序、有确认、有重传、有流控。

TCP

封装字段

TCP 头部的关键字段:

字段作用
Source Port源端口
Destination Port目标端口
Sequence Number序列号(排序)
Acknowledge Number确认号(确认)
SYN同步,建立连接
ACK确认
PSH传送(push)
FIN结束连接
RST重置连接
URG紧急
Window窗口大小(流控)
Checksum首部校验

三次握手

TCP 建立连接需要三次握手,通知对方进行数据收发:

  1. 第一次握手:客户端发送 SYN 包(seq=j)到服务器,进入 SYN_SENT 状态,等待确认。
  2. 第二次握手:服务器收到 SYN,回复 SYN+ACK 包(ack=j+1,自己的 seq=k),进入 SYN_RECV 状态。
  3. 第三次握手:客户端收到 SYN+ACK 后,发送确认包 ACK(ack=k+1)。发送完毕后,双方进入 ESTABLISHED 状态,连接建立成功。

四次挥手

TCP 断开连接需要四次挥手:

  1. 主机 A 数据发送完毕,向 B 发送带 FIN 标记的报文段。
  2. 主机 B 收到 FIN 后,先回复一个 ACK(确认序号),并通知自己的应用程序对方要求关闭连接。(先发 ACK 是为了防止这段时间内对方重传 FIN。)
  3. 主机 B 的应用程序准备好后,向 A 发送一个 FIN 报文段,表示彻底关闭。
  4. 主机 A 收到 FIN 后,向 B 发送 ACK,连接彻底释放。
握手用三次而挥手用四次,是因为关闭连接时,被动方收到 FIN 后往往还有数据要发送,所以把 ACK 和 FIN 分两次发出。

常用 TCP 端口号

端口服务端口服务
20 + 21FTP80HTTP
22SSH110POP3
23Telnet443HTTPS
25SMTP53DNS(也用 TCP)

UDP

封装字段

UDP 头部仅占 8 字节,只有:源端口、目标端口、长度、校验和。

特点:

  • 传输数据时没有确认机制,报文到达确认、排序、流量控制等需由应用程序自行实现。
  • 不提供重传机制,占用资源小、处理效率高。
  • 面向无连接,因此可以实现广播发送
  • 属于不可靠传输,可能丢包,实际应用需程序员编程验证。

时延敏感的流量(语音、视频)通常使用 UDP。使用 UDP 的服务还包括 NTP(网络时间协议)、DNS(DNS 也使用 TCP)、NFS、SNMP 等。

常用 UDP 端口号

端口服务
53DNS
69TFTP
161SNMP
安全提示:欺骗 UDP 包比欺骗 TCP 包更容易,因为 UDP 没有建立初始连接(握手),与 UDP 相关的服务面临更大的安全风险。
最后更新于