美文网首页
【网络基础】三次握手和四次挥手

【网络基础】三次握手和四次挥手

作者: Draven_Lu | 来源:发表于2019-09-25 11:08 被阅读0次

写在前面

参考TCP的三次握手和四次挥手和UDP协议

首先明白TCP和UDP的区别,下面的四段引用

TCP(Transmission Control Protocol) 是传输控制协议,提供的是面向连接、可靠的数据流传输。当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能顺序地从一端传到另一端。

tcp传输数据就像打电话,你必须知道对方的电话号码,电话打通之后才能进行对话,先说的话先到,后说的话后到是有顺序的。对方对方没听清你的说的话时你可以重说一遍。

UDP(User Datagram Protocol)是用户数据报协议,提供的是非面向连接的、不可靠的数据流传输。,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。UDP在传输数据前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,不保证数据按顺序传递,故而传输速度很快

udp传输数据就像寄一封信,发信的人只管发,不管到,但必须在信封上写明对方的地址。发信者和收信者不需要建立连接,全靠邮电局联系,信发到是可能已经过了很久了,也可能根本没发到。先发的信件未必先到,后发的信件也未必后到。

现在应该明白的一点是握手和挥手是对于TCP而言的,因为UDP不需要建立连接

建立连接

一张图搞懂三次握手四次挥手.jpeg
  • 三次握手
    1.Client 发送 SYN

  • 四次挥手

  • 为什么断开连接是四次呢? 答:Server可能还有数据没有发送完
    前置条件:Client发起断开请求
  1. 1-在Client发起FIN时仅仅表示Client没有数据要发给Server了,此时2-Server发送ACK给Client,表示我收到你的关闭请求了,但是Server不能立马关闭,原因是Server可能还有数据没有发送完。
  2. 等到Server发送数据完了之后,3-Server就给Client发送FIN请求,表示Server没有数据要发送给Client了,Server 要和Client 关闭连接了
  3. Client收到Server发送的FIN后,表示收到了服务端的关闭请求,然后Client进入Time-Wait状态,4-发送ACK给Server,在最大报文生存时间之后,Client才会真的关闭连接。

2倍的最大报文生存时间:
4-发送ACK给Server确保服务端收到应答,如果服务端没有收到会重发FIN=1的关闭连接数据。所以就是ACK过去的时间+服务端收到ACK然后回应客户端的时间,其实这两个时间是我们假设的,不然一来一回无休止了。

引用自知夫~
第四个消息:A发出ACK,用于确认收到B的FIN当B接收到此消息,即认为双方达成了同步:双方都知道连接可以释放了,此时B可以安全地释放此TCP连接所占用的内存资源、端口号。所以被动关闭的B无需任何wait time,直接释放资源。但,A并不知道B是否接到自己的ACK,A是这么想的:1)如果B没有收到自己的ACK,会超时重传FiN那么A再次接到重传的FIN,会再次发送ACK2)如果B收到自己的ACK,也不会再发任何消息,包括ACK无论是1还是2,A都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是:去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。这恰恰就是2MSL( Maximum Segment Life)。等待2MSL时间,A就可以放心地释放TCP占用的资源、端口号,此时可以使用该端口号连接任何服务器。为何一定要等2MSL?如果不等,释放的端口可能会重连刚断开的服务器端口,这样依然存活在网络里的老的TCP报文可能与新TCP连接报文冲突,造成数据冲突,为避免此种情况,需要耐心等待网络老的TCP连接的活跃报文全部死翘翘,2MSL时间可以满足这个需求(尽管非常保守)!

总结

TCP才有握手的概念,不管是握手还是挥手都是为了保证数据的完整性,顺序性。细节还是图片说的清楚。

相关文章

网友评论

      本文标题:【网络基础】三次握手和四次挥手

      本文链接:https://www.haomeiwen.com/subject/sqeoectx.html