TCP三次握手和四次挥手
| 三次握手 | |
|---|---|
| 客户端 | 服务端 |
| SYN | |
| SYN ACK | |
| ACK |
| 四次挥手 | |
|---|---|
| 客户端 | 服务端 |
| FIN | |
| ACK | |
| FIN | |
| ACK |
为什么三次握手,四次挥手?
三次握手
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误——谢希仁著《计算机网络》 客户端发送的连接请求报文段在某个网络节点长时间滞留。服务端收到失效的连接请求报文段,向客户端发出确认报文段,同意连接。如果只有两次握手,服务端发出确认,就建立了连接,而客户端不会发送需要的数据,会浪费服务端的资源。
四次挥手
TCP是全双工通信(双向传输数据)。
- 第一次挥手:主动方发送断开连接的请求给被动方,主动方不会发送数据报文但可以接收数据报文
- 第二次挥手:被动方可能还有数据报文,为避免主动方继续发送FIN报文发送ACK报文
- 第三次挥手:被动方发送FIN报文,后进入LAST_ACK阶段(超时等待)。
- 第四次挥手:主动方发送ACK报文,被动方释放连接。
LAST_ACK阶段(超时等待):如果迟迟收不到这个 ACK,内核就会重发 FIN 报文,如果重传的次数超过 tcp_orphan_retries 内核参数设置的次数,就会放弃重传,然后进入close状态。
TCP和UDP的区别
- TCP是面向连接的,UDP是无连接的(发送前不需要先建立连接)
- TCP提供可靠的服务,TCP传输的数据按序到达,不丢失,不重复,无差错。因为TCP可靠,面向连接适合大数据量的交换。UCP尽最大努力交付,不保证可靠交付。
- TCP是一对一的,UDP可以一对多。
- TCP面向字节流,UDP面向报文,并且网络出现拥塞不会降低发送速率,适合实时的应用。
- TCP首部有20字节,UDP首部只有8字节
- TCP是可靠连接
- TCP数据传输的单位是报文段(segment),UDP数据传输的单位是用户数据报