TCP和UDP的区别
TCP包格式示意图:
+----------------+----------------+-------------+-----------------+
| 源端口号(2B) | 目标端口号(2B) | 序列号(4B) | 确认号(4B) |
+----------------+----------------+-------------+-----------------+
| 首部长度(4bit) | 保留(3bit) | 标志位(9bit) |
+----------------+----------------+-------------+-----------------+
| 窗口大小(2B) | 校验和(2B) | 紧急指针(2B) |
+----------------+----------------+-------------+-----------------+
| 选项(可选) |
+----------------+----------------+---------------+---------------+
UDP包格式示意图:
+----------------+----------------+---------------+---------------+
| 源端口号(2B) | 目标端口号(2B) | 总长度(2B) | 校验和(2B) |
+----------------+----------------+---------------+---------------+
| 数据(可选) |
+----------------+----------------+---------------+---------------+
其中,“标志位”和“选项”字段在TCP和UDP之间是不同的。TCP的“标志位”字段包括SYN、ACK、FIN等标志,而UDP没有这一字段。而TCP协议中的“选项”字段较为复杂,可以包括最大数据长度、时间戳等信息,而UDP中并没有这一字段
UDP协议是无连接的,因此UDP包的格式比TCP包简单得多。一个UDP包由4个部分组成,分别是:
-
源端口号:2个字节,表示发送端口号。
-
目标端口号:2个字节,表示接收端口号。
-
长度:2个字节,表示整个UDP包的长度(包括首部和数据)。
-
校验和:2个字节,用于检测UDP包在传输过程中是否出错。
TCP协议是面向连接的协议,因此头部比较复杂,一个TCP包由以下几部分组成:
-
源端口号:2个字节,表示发送端口号。
-
目标端口号:2个字节,表示接收端口号。
-
序列号:4个字节,表示这个TCP包所包含的数据在整个数据流中的顺序,用于保证数据的可靠性。
-
确认号:4个字节,表示期望接收到下一个TCP包的序列号。
-
长度:4个字节,表示整个TCP包的长度(包括首部和数据)。
-
标志位:6个标志位,分别用于表示TCP包是何种类型的控制消息,例如SYN、ACK、FIN等。
-
窗口大小:2个字节,表示本地缓存的可用大小,用于流量控制。
-
校验和:2个字节,用于检测TCP包在传输过程中是否出错。
-
紧急指针:2个字节,针对协议本身流控制。
一个UDP包的头部长度固定为8字节。UDP的特点是快速、轻量级,在网络传输快速和数据可靠性要求不高的情况下使用较多
一个TCP包的头部长度通常为20字节,但长度也可能因选项字段的存在而有所变化。TCP协议因为能够保证数据的可靠性,所以适用于一些对数据传输质量和数据安全性要求比较高的应用场景