TCP连接的三次握手和连接关闭的四次挥手

TCP连接的三次握手和连接关闭的四次挥手

    一、文章大纲图

    二、建立TCP连接三次握手过程

  1. 第一次握手,由客户端发送syn报文给服务器端。
  2. 第二次握手,服务器端返回ack(确认)+syn报文给客户端。
  3. 第三次握手,客户端发送ack(确认)报文确认。

    三、TCP连接关闭四次挥手过程

  1. 第一次挥手,由客户端发送FIN报文(Finish)给服务器端。
  2. 第二次挥手,由服务器端发送ack确认,表示收到报文。
  3. 第三次挥手,由服务器端发送未传送完的Data报文后,将FIN报文给客户端。
  4. 第四次挥手,由客户端发送ack报文,表示收到报文。
  5. 在等待最长报文存在时间后,客户端才会变为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面向字节流;

扫描二维码关注公众号,回复: 1659110 查看本文章

    5、UDP面向报文。

    6、TCP连接只能是点到点的;

    7、UDP支持一对一、一对多、多对一和多对多的交互通信。

猜你喜欢

转载自blog.csdn.net/that_is_cool/article/details/80226170