精华内容
下载资源
问答
  • TCP四次挥手

    2018-06-19 20:50:30
    1、什么是TCP四次挥手? TCP链接在关闭时,会进行四次通信,此时客户端或者服务端都可以主动发起,这就是所谓的四次挥手,在这四次通信后,TCP链接就会正在断开,否则仅仅只是半链接而已。 2、TCP四次挥手流程...

    1、什么是TCP四次挥手?
      TCP链接在关闭时,会进行四次通信,此时客户端或者服务端都可以主动发起,这就是所谓的四次挥手,在这四次通信后,TCP链接就会正在断开,否则仅仅只是半链接而已。
    2、TCP四次挥手流程详解
      TCP四次挥手,具体要分四个步骤来分析,具体如下:
       1、A端向先向其TCP发出释放链接的请求报文,此时FIN=1,seq=x,且开始停止发送数据给B端,主动开始关闭A端的TCP链接,进行FIN-WAIT-1阶段;
      2、B端收到了A端的关闭请求后,发出确认报文。此时ACK1,ack=x+1,seq=y,且B也开始进入Close-WAIT阶段,此时TCP已经进入半关闭状态,A->B的链接已经被释放。
      3、A端接收到了B端的确认报文后进入FIN-WAIT-2状态,等待B再次发出链接释放请求报文。B再次发送释放链接的报文。此时FIN=1,ACK=1,seq=z,ack=x+1,B进入LAST-ACK状态,等待A的确认。
       4、A再次收到B的链接释放报文后,再次对该请求报文发出确认报文,此时ACK=1,ack=z+1,seq=x+1。A也进入了最终的时间等待TIME_WAIT阶段。这里的等待时间是2MSL,之后A就会进入Closed阶段。

    3、为什么要进行2MSL的等待
      这里为什么要进行2MSL的等待,主要还是因为要假设网络是不可靠的,有可能最后一个ACK会丢失。这里的TIME-WAIT时间段主要是用来让对端进行消息重传的。这里的2MSL也是有讲究的。叫做2个最大报文段生存时,。刚好用来配合重传。
    4、四次挥手的图解
    TCP四次握手

    展开全文
  • tcp四次挥手

    千次阅读 2020-08-25 22:29:47
    4次挥手: 第一次挥手: Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 第二次挥手: ...Server收到FIN后,发送一个ACK给Client,确认序号...第四次挥手: Client收到FIN后,C

    4次挥手:

    第一次挥手:

    Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

    第二次挥手:

    Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

    第三次挥手:

    Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

    第四次挥手:

    Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

     

    客户端和服务端同时发出第一次挥手:

     

     

     

    展开全文
  • TCP 四次挥手

    2019-07-25 16:18:52
    TCP的三次握手和四次挥手通常同时被谈起,上篇文章我们说到了TCP的三次握手,那么四次挥手又是什么呢? 今天我们就聊聊什么是四次挥手。在说什么是四次挥手之前,我们还是要提出几个问题。 1.为什么要挥手那么...

    TCP的三次握手和四次挥手通常同时被谈起,上篇文章我们说到了TCP的三次握手,那么四次挥手又是什么呢?

     

    今天我们就聊聊什么是四次挥手。在说什么是四次挥手之前,我们还是要提出几个问题。

     

    1.为什么要挥手那么多次?一次挥手不行吗?

    2.为什么握手需要三次,挥手却需要四次?

     

    相信大家对“邓哥”这种生物的习性应该已经熟悉了,主要的四大习性就是:“抽烟、喝酒、烫头、浪~”。我们今天依然用邓哥的例子来让大家记住四次挥手~我们今天就用邓哥和某位邓嫂互相喂饭的例子来让大家了解四次挥手的真正过程~

     

    在讲故事之前我们依然以一句话来说明四次挥手的根本目的四次挥手核心就在于四个时间节点,分别是:发完了,知道发完了,收完了,知道收完了。

     

    有一天邓哥和某位邓嫂在一家餐厅吃饭,两个人点了一份咖喱土豆,只见邓哥一勺一勺的喂邓嫂。

     

    邓哥喂邓嫂吃饭的过程,就相当于是两台机器之间互相通信的过程。每喂一勺饭,都相当于是一次数据传递。

    第一次挥手:

    当邓哥喂完最后一勺的时候,邓哥对邓嫂说:“喂完了~木有了~

     

    这时候相当于A向B传输数据,数据传递完了,但是数据传递完了之后,不能直接断开,因为B并不知道数据传递完了,所以A(邓哥)告诉B(邓嫂)数据传递完了(喂完了)。这就是第一次挥手:A告诉B数据发送完了。

     

    第二次挥手:

    邓哥说喂完了的时候,邓嫂因为嘴里还有很多饭没有咽下,所以没法和邓哥说话~所以只能点点头表示知道了~

     

    这时候,因为B(邓嫂)还没有接受完数据(没有咽下),所以虽然知道A(邓哥)把数据传完了(喂完了),所以只能先回复A(邓哥)知道你传完了(喂完了)。这就是第二次挥手:B知道A发完了

     

    第三次挥手:

    邓哥眼睁睁的看着邓嫂一口一口的吃完了所有的饭~眼里流下了饥饿的泪花。待邓嫂咽下了最后一口饭的时候,开心的笑着说:“吃完了~好饱呀~

     

    这时,虽然A(邓哥)已经发送完了数据,但是还不确定B(邓嫂)接收完数据,所以A还要等着,因为一旦B没有接收成功,A还要继续发送。所以A要等着B反馈已经接收完了,才能真正断开连接。所以这时候当B接收完数据的时候,B要告诉A接收完了。这就是第三次挥手:B告诉A接收完了。

     

    第四次挥手:

    邓哥虽然还饿着~但是依然含着泪点头~说道:“嗯,咱们走吧~

     

    这时A(邓哥)知道了B(邓嫂)接收完数据了,就可以放心的断开连接了。这就是第四次挥手:A知道B接收完了。

     

    我们用一张图表示四次挥手:

     

     

    A(邓哥)

    B(邓嫂)

    第一次挥手 发完了

    第二次挥手 知道发完了

    第四次挥手 知道收完了

    第三次挥手 收完了

     

    那么为什么握手只需要三次而挥手却需要四次呢?

     

    因为当A告诉B发完了的时候,B还有可能没接收完消息,所以只能先回复一部分,告诉A已经收到发完了的消息了。当完全接收完毕之后,才会告诉A已经接收完了。

     

     

     

     

    展开全文
  • TCP四次挥手TCP作为可靠的连接协议,不仅体现在连接的建立上,也体现在其释放连接上,但是世界上是不存在百分之百可靠的通信机制的,我们来看下TCP释放连接,也就是四次挥手是如何尽可能保证TCP的可靠性的。...

    7c2cca3b6dc7a8d90073c9b8896dd162.png

    TCP四次挥手

    TCP作为可靠的连接协议,不仅体现在连接的建立上,也体现在其释放连接上,但是世界上是不存在百分之百可靠的通信机制的,我们来看下TCP释放连接,也就是四次挥手是如何尽可能保证TCP的可靠性的。

    使用Wireshark抓包,如图:

    bb0a1b54f8160428b2ce28d0cf2c94b9.png

    1.四次挥手的过程

    6b9de8c0453d693f5b2e7fba87475ae5.png
    1. 当客户端已经发送完数据后,调用close方法向服务端发送FIN包,请求关闭连接,此时客户端进入FIN_WAIT1状态,代表客户端已经不再发送数据,但是还能接收服务端数据,这个状态也叫半关闭状态。
    因为TCP是全双工协议,客户端和服务端能互相发送数据,都有可能先传输完数据请求关闭连接,所以先请求关闭的一方称为主动关闭方,而另一方称为被动关闭方
    1. 服务端收到客户端的FIN包后进入CLOSE_WAIT状态,并返回一个ACK给客户端,客户端端收到后,进入FIN_WAIT2状态。
    2. 当服务端没有数据向客户端发送时,向客户端发送FIN包,然后服务端进入LAST_ACK状态,客户端收到FIN包,会进入TIME_WAIT状态,这是一个比较特殊的状态,后面会单独讲解。
    3. 服务端收到ACK后进入CLOSE状态,客户端在TIME_WAIT等待2MSL后会进入CLOSE状态。
    MSL是Maximum Segment Lifetime英文的缩写,即报文的最大生存时间,超过这个时间的报文将会被丢弃。

    在TCP中还存在一种特殊的情况,就是同时关闭。就是客户端和服务端同时发送FIN包,但是这种情况并不常见,知道这么个概念就行了,这里就不过多阐述了。

    2.TCP四次挥手改为三次可以吗

    因为TCP连接是全双工的,数据在两个方向上能够同时传递,因此每个方向的数据传输都必须单独关闭。当一端收到FIN并响应给对端的时候,这一方向的数据流便停止了,也就是半关闭状态。但是由于TCP有延迟确认的功能或者服务端收到FIN包后没有数据发送了,就能同时发送FIN+ACK包,所以其实三次挥手是可以的。

    a8117e1412375d3afb722ee689cf4710.png

    但是延迟确认可能会带来一个问题,就是如果被动关闭方没有及时ACK,主动关闭方的FIN包,主动关闭方可能认为FIN包丢失了,导致不必要的重传发生。所以四次挥手是相对最合理的关闭连接的方式。

    关注作者微信公众号:

    fa863946ee9b5cd1e6875449c4cc37ba.png
    展开全文
  • Tcp四次挥手

    2018-12-16 18:11:46
    四次挥手四次挥手用于关闭此次建立连接请求,确认调用了close 四次挥手之后才能释放资源
  • 简述:TCP四次挥手(断开连接):所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行...
  • 趣谈TCP四次挥手

    千次阅读 2020-06-02 19:25:10
    TCP四次挥手断开连接1.先趣谈TCP四次挥手2.断开TCP连接:TCP四次挥手②为什么需要断开TCP连接?①为什么需要四次挥手断开TCP连接?分析四次挥手:断开连接 1.先趣谈TCP四次挥手 老样子,在开始正式的讲解TCP四次挥手...
  • TCP三次握手和TCP四次挥手 文章目录前言一、TCP三次握手:二、TCP四次挥手:总结 前言 以前经常听见TCP三次握手和TCP四次挥手,但是自己都没有具体的了解过它们的过程。这次终于了解一些了,所以就记录一下把。 一...
  • TCP四次挥手原理

    千次阅读 2019-11-02 17:54:11
    TCP协议\TCP四次挥手
  • TCP四次挥手过程

    2020-10-03 10:18:17
    TCP四次挥手过程 (1)第一次挥手 客户端向服务器端发送TCP报文请求释放连接,然后停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。其中: 标记位为FUN 序号为seq=u (2)第...
  • WireShark抓取TCP四次挥手报文实战

    万次阅读 2020-07-03 10:48:42
    TCP四次挥手 四次挥手的流程 挥手的过程可以由任何一方发起,这里以服务器端发起为例说明: 第一次挥手:服务器端发出FIN,用来断开服务器端到客户端的数据传送,进入FIN-WAIT-1状态 第二次挥手:客户端收到服务器...
  • 关于TCP四次挥手

    2019-07-15 20:56:02
    今天看公众号编程珠玑推了TCP四次挥手的相关内容,想着打开复习一遍,在复习的过程中发现了一些新的问题,在此记录。 首先回顾TCP四次挥手的几个步骤: 客户端向服务器端发送释放报文FIN = 1,处于FIN_WAIT1状态; ...
  • tcp四次挥手,为什么是四次?

    万次阅读 多人点赞 2019-07-04 21:29:34
    四次挥手的原因;为什么要有TIME_WAIT状态?2MSL的的意义;四次挥手中如果有一次挥手失败怎么处理?
  • TCP四次挥手理解

    2020-01-17 18:33:02
    我们来先看一下TCP 四次挥手的过程和状态变迁,如下图所示: **四次挥手的过程:** - 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。 -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,299
精华内容 4,919
关键字:

tcp四次挥手