This action will force synchronization from 陌溪/LearningNotes, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
为什么需要握手:握手的作用就是为了同步一些信息,比如最大滑动窗口
TCP:是一个可靠的连接,也就是客户端和服务器双方必须感知对方的存在,也就是需要经历一个建立连接的过程
用三次握手建立TCP连接,连接有三个阶段
连接的管理就是使连接的建立和释放都能正常地进行,连接阶段过程中要解决以下三个问题
TCP建立连接的过程:被称为握手
① 握手过程其实是发送的TCP报文,在这里面有两个字段,SYN 和 seq
② 当服务器接受到我们的握手请求时,会回复一个确认报文
③ 当客户端收到确认报文的时候,客户端需要对这个确认报文进行回复
经过了这三次握手,两者就进入了连接状态
然后建立TCP连接
中国机长版三次握手
四次连接有点多余,第三次的时候,我们已经互相进行了连接确认
但是因为我们无法保证百分百的可靠性
客户端知道服务器有接收 和 发送的能力,服务器不知道客户端有没有接收数据的能力,因为通过第一次握手,已经知道了客户端能够发送数据,但是能不能接收数据,还是不清楚,因此这个TCP连接是不可靠的。
为什么不能两次握手就建立连接
因为超时重传机制的存在
但客户端发送第一次握手的时候,可能会经历网络拥塞,然后客户端会以为这个连接已经丢失,然后会重新发送一个请求连接的信息到服务器,这次发送的消息很快被服务器接受,然后服务器建立连接就开始建立连接。但是当第一次发送的请求经过一段时间的阻塞后,成功到达服务器,然后服务器又连接连接,而此时客户端是不会理会这次请求的建立,所以服务器一直在等待客户端数据的发送。
所谓的四次挥手,就是关闭TCP连接的过程,指的是断开一个TPC连接,需要客户端和服务端总共发送4个包,以确定双方连接的断开。
主要目的:保证TCP连接的全双工连接
由于TCP连接是全双工的,因此每个方向都必须单独关闭,这个原则是当以防完成它的数据发送任务后,就能发送一个FIN包来终止这个方向的连接。
收到一个FIN包只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后,仍然能发送数据,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
这是因为虽然双方都同意了关闭连接,而且握手的4个报文也都协调和发送完毕,按道理可以直接回到CLOSE状态
但是因为我们需要假设网络是不可靠的,你无法保证你最后发送的ACK报文是会一定被对方收到,因此处于LAST_ACK状态下的socket可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的报文。
当客户端与服务器在规定的时间内没有得到应答
会发送报文进行探测,假设没有应答,那么就会关闭连接
下面是四次挥手的过程
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。