目录
一、前言
两台主机间通信,通常是指两台主机间的进程进行通信。在TCP/IP模型中,运输层的目的就是为应用进程之间提供端到端的逻辑通信,运输层通过端口号区分不同的应用进程,并提供一些运输层协议。其中,运输层最常见的两种协议便是TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。
TCP 和UDP是传输层的两个重要协议,我们平常浏览网页,手机聊天,观看视频都是通过这两种协议进行传输的。本文将从头部格式、连接管理、 可靠性等角度分析两者区别。
二、TCP与UDP区别
2.1 头部格式
2.1.1 TCP头部格式
源端口号(16位) | 目标端口号(16位) | |||||||
序列号(32位) | ||||||||
确认应答号(32位) | ||||||||
首部长度 (4位) |
保留 (6位) |
U R G |
A C K |
P S H |
R S T |
S Y N |
F I N |
窗口大小(16位) |
校验和(16位) | 紧急指针(16位) | |||||||
选项(长度可变) | ||||||||
数据 |
由上图可以看出,TCP头部字段最少为20字节,其中核心字段如下所示。
序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
控制位:
• ACK:该位为 1 时,「确认应答」的字段变为有效。
• RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
• SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
• FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
2.1.2 UDP头部格式
由于UDP 不提供复杂的控制机制,UDP 协议也非常简单