TCP连接的三次握手和连接关闭的四次挥手
TCP连接的三次握手和连接关闭的四次挥手
一、文章大纲图
二、建立TCP连接三次握手过程
- 第一次握手,由客户端发送syn报文给服务器端。
- 第二次握手,服务器端返回ack(确认)+syn报文给客户端。
- 第三次握手,客户端发送ack(确认)报文确认。
三、TCP连接关闭四次挥手过程
- 第一次挥手,由客户端发送FIN报文(Finish)给服务器端。
- 第二次挥手,由服务器端发送ack确认,表示收到报文。
- 第三次挥手,由服务器端发送未传送完的Data报文后,将FIN报文给客户端。
- 第四次挥手,由客户端发送ack报文,表示收到报文。
- 在等待最长报文存在时间后,客户端才会变为CLOSED状态。
四、关于TCP连接的部分问题
1、为啥需要三次握手才能连接,两次不行么?
设想一种情况,当客户端发出syn报文后,syn报文由于各种各样的原因延迟到达服务器端,这便是一个失效的报文,这时,服务器端以为客户端请求连接,便发送确认报文,由于两次握手,两者便建立连接。但是此时的客户端并没有发起连接请求,便不会理会服务器端发出的确认报文,也不传送任何数据,于是服务器端的资源就会白白浪费。
2、为啥要四次挥手才能断开连接?
在收到客户端发出的FIN报文之后,服务器端有可能无法马上的关闭连接,但是会先发送一个ACK报文表示确认收到了FIN报文,只有当所有的数据传输完了,才会发送FIN报文,所以FIN报文和ACK报文无法一起发送给客户端。
3、为什么在报文全部发送完毕还需要等待一段时间才能让客户端进入CLOSED状态?
因为防止发出的ACK报文,服务器端未能收到,最后超时重发了FIN和ACK报文,这段时间以内,客户端便可以接收到重发的报文,并重新发出ACK报文,再重置计时器。
五、TCP和UDP的区别
1、TCP提供的是面向连接的、可靠的数据流传输;
2、UDP提供的是非面向连接的、不可靠的数据流传输。
3、TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失,不重复,按序到达;UDP尽最大努力交付,即不保证可靠交付。
4、TCP面向字节流;
5、UDP面向报文。
6、TCP连接只能是点到点的;
7、UDP支持一对一、一对多、多对一和多对多的交互通信。