TCP协议 VS UDP协议
TCP协议
TCP(
Transmission Control Protocol传输控制协议)
特点:
- TCP是面向连接的服务,可靠的进程到进程通信的协议(重传机制)
- TCP报文段封装在IP数据包中
- IP首部 + TCP报文段(包含TCP包头,应用层数据)
TCP包头

- 源端口号(16bit),是客户端进程随机生成的,一般是从50000开始的
- 目标端口号(16bit),一般是服务器固定的
序列号(32bit,seq),TCP为每个字节都进行了编号确认号(32bit,ack),通过ack来确认每个字节是否收到,判断是否需要重传- 首部长度(4bit)
- 保留(6bit)
- 六个控制位(开关位,占1Bit)
- URG,置为1时,紧急指针才能使用(紧急位)(了解)
ACK,跟确认号是开关和灯泡的关系,置为1时,确认号才能使用- PSH,为0时,不需要将数据推送到应用层,为1时,将数据推送到应用层(推送位)(了解)
- RST,应用层出现故障时,置为1,强制断开会话(强制断开连接位)
SYN,置为1时请求建立连接(建立连接位,同步位,对方会发送包表示自己也置为1表示连接已经建立)建立连接成功后会置为0- FIN,置为1时断开连接(请求断开连接位,对方会发包表示确认,但是只是一个确认包,单向断开)
- 窗口大小(16Bit),流量控制,拥塞控制
- 校验和(16Bit),校验整个TCP段
- 紧急指针(16Bit)
- 选项
TCP的三次握手

- 客户端发送
SYN报文(Seq=x,SYN=1)- 服务器收到报文后,发送
SYN+ACK报文(Seq=y,ack=x+1,SYN=1,ACK=1)(ack=x+1表示我已经收到你的报文了)- PC1收到报文后,发送
ACK报文(Seq=x+1,ack=y+1,ACK=1)(此时SYN值已经置为0,SYN值只有在三次握手的前两次为1)
TCP的四次挥手

- TCP的四次握手断开连接(两次单向断开)
- PC1发送FIN/ACK(FIN=1,ACK=1)(请求断开连接,应用层已经断开连接了)
- PC2收到报文,发送ACK报文(ACK=1,单向断开)将缓存中的数据发送(有就发送,没有就走第三步)
- PC2发送FIN/ACK报文(FIN=1,ACK=1)(请求断开连接)
- PC1传输层发送ACK报文(ACK=1) 会话正式解除
TCP的重传机制
当PC端每发送一个报文,都会开启一个计时器,如果没有回包(超过了计时器时间),就会重新发送一次
TCP的安全问题
- TCP半连接,SYN Flodd攻击/SYN泛洪攻击,不断发送SYN报文
- 反射式SYN泛洪攻击,黑客伪装的SYN报文中不写自己的源IP,而将源IP替换成互联网上的IP,服务器收到请求后,会发送第二次报文给互联网上的PC,但是互联网的PC并没有要求建立连接,不会作出回应。
防护:
防火墙防护原理:收到SYN报文时,防火墙并不会将报文转发给服务器,而是会“冒充”服务器给请求的人发送第二次报文,如果没有回应,则干掉这次连接。
UDP协议
UDP(User Datagram Protocol)
特点:
- 花费的开销小,传输效率较高
UDP包头
- 源端口号(16bit)
- 目标端口号(16bit)
- UDP长度(16bit),用来指出UDP的总长度,为首部加上数据(四层+五层数据)
- UDP校验和(16bit),用来完成对UDP数据的差错检验,它是UDP协议提供的唯一可靠机制
TCP VS UDP
| TCP | UDP | |
|---|---|---|
| 是否连接 | 面向连接 | 无连接 |
| 是否可靠 | 可靠传输,适用流量控制和拥塞控制 | 不可靠传输 |
| 连接对象个数 | 只能一对一通信 | 支持一对一,一对多,多对一和多对多交互通信 |
| 传输方式 | 面向字节流 | 面向报文 |
| 首部开销 | 首部最小20个字节,最大60个字节 | 首部开销小,仅8字节 |
| 适用场景 | 适用于要求可靠传输的应用,例如文件传输 | 适用于实时应用,例如IP电话,视频会议,直播等 |
小结:
- TCP向上层提供面向连接的可靠服务,UDP提供无连接的不可靠服务
- UDP没有TCP传输可靠,但是可以在实时性要求高的地方应用
- 对数据准确性要求高,速度可以相对慢的,可以选用TCP

浙公网安备 33010602011771号