前言
TCP、UDP是OSI模型中运输层中的协议。我们经常使用 ping 命令来测试两台主机之间 TCP/IP 通信是否正常,其实 ping 命令的原理就是 向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的
区别
TCP | UDP |
---|---|
Transmission Control Protocol 传输控制协议 | User Data Protocol 用户数据报协议 |
面向连接的协议,提供可靠的通信传输 | 面向无连接的协议,不提供差错恢复、数据重传,安全性差 |
面向字节流(把上面应用层交下来的数据看成一连串无结构的字节流) | 面向报文(发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留报文的边界) |
首部开销20字节 | 首部开销8字节 |
全双工,每一条连接只能是点到点 | 支持一对一、一对多、多对一和多对多的交互通信 |
有拥塞控制,可以进行丢包的重发、对次序乱掉的分包进行顺序控制 | 没有拥塞控制,会导致丢包、包的到达顺序错乱,但网络出现拥塞不会使 源主机 的发送速率降低(对实时应用很有用:IP电话,视频会议等) |
应用场景 对当前网络通讯质量有要求,需要准确且安全地传输 1.浏览器使用的:HTTP 2.QQ文件传输 |
应用场景 对当前网络通讯质量要求不高,又要求网络通讯速度尽量快 1.QQ语音 2.QQ视频 3.TFTP |
TCP的包头结构
- 源端口 16位
- 目标端口 16位
- 序列号 32位
- 回应序号 32位
- TCP头长度 4位
- reserved 6位
- 控制代码 6位
- 窗口大小 16位
- 偏移量 16位
- 校验和 16位
- 选项 32位(可选)
UDP的包头结构
- 源端口 16位
- 目的端口 16位
- 长度 16位
- 校验和 16位