精华内容
下载资源
问答
  • tcp是全双工的,三次握手和四次挥手表面上的差异,就是在建立连接过程中,被动方的SYN和ACK是一起回复的,而在释放连接过程中FIN和ACK没有一起回复,我就在这里产生了疑惑。   简单地说:接收方在收到发起方的FIN...


    tcp是全双工的,三次握手和四次挥手表面上的差异,就是在建立连接过程中,被动方的SYN和ACK是一起回复的,而在释放连接过程中FIN和ACK没有一起回复,我就在这里产生了疑惑。
    在这里插入图片描述
      简单地说:接收方在收到发起方的FIN请求后不能立刻终止连接,它需要确认自己是否还有需要回复的内容,待到回复完毕后,才能够将连接终止,而为了不让发起方重复发送请求,ACK是需要立刻回复的。

    展开全文
  • 徐无忌深入浅出网络笔记:为什么TCP协议释放需要四次挥手? 完成:第一遍 1.为什么TCP协议释放需要四次挥手? 举个栗子:把客户端比作男孩,服务器比作女孩。通过他们的分手来说明“四次挥手”过程。 "第一次挥手":...

    徐无忌深入浅出网络笔记:为什么TCP协议释放需要四次挥手?

    完成:第一遍

    1.为什么TCP协议释放需要四次挥手?

    举个栗子:把客户端比作男孩,服务器比作女孩。通过他们的分手来说明“四次挥手”过程。

    "第一次挥手":男孩写分手信告诉女孩想要分手。
    挥手之前主动释放连接的客户端结束ESTABLISHED阶段。随后开始“四次挥手”:
    1)首先客户端想要释放连接,向服务器端发送一段TCP报文,其中:
    标记位为FIN=1,表示“请求释放连接“;
    序号为Seq=X;
    随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。
    注意:这里不发送的是正常连接时传输的数据(非确认报文),而不是一切数据,所以客户端仍然能发送ACK确认报文。

    “第二次挥手”:女孩回信:分手就分手,给我点时间,我要把你的东西整理好,全部还给你!
    男孩收到女孩信后,等待女孩把自己的东西收拾好。
    2)服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:
    标记位为ACK=1,表示“接收到客户端发送的释放连接的请求”;
    序号为Seq=Y;
    确认号为Ack=X+1,表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值;
    随后服务器端开始准备释放服务器端到客户端方向上的连接。
    客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段
    前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了

    “第三次挥手”:过了几天,女孩把男孩送的东西都整理好了,于是再次写信给男孩:你的东西我整理好了,快拿走,从此不联系!
    (3)服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文,其中:
    标记位为FIN=1,ACK=1,表示“已经准备好释放连接了”。注意:这里的ACK并不是确认收到服务器端报文的确认报文。
    序号为Seq=Z;
    确认号为Ack=X+1;表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值。
    随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。

    “第四次挥手”:男孩收到女孩第二封信后,知道女孩收拾好东西,正式分手,
    于是再次写信告女孩:我去拿回来!
    这里双方都有各自的坚持。
    女孩自发出第二封信开始,限定一天内收不到男孩回信,就会再发一封信催促男孩来取东西!
    男孩自发出第二封信开始,限定两天内没有再次收到女孩的信就认为,女孩收到了自己的第二封信;若两天内再次收到女孩的来信,就认为自己的第二封信女孩没收到,需要再写一封信,再等两天……

    (4)客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文,其中:
    标记位为ACK=1,表示“接收到服务器准备好释放连接的信号”。
    序号为Seq=W;表示是在收到了服务器端报文的基础上,将其确认号Ack值作为本段报文序号的值。
    确认号为Ack=Z+1;表示是在收到了服务器端报文的基础上,将其序号Seq值作为本段报文确认号的值。
    随后客户端开始在TIME-WAIT阶段等待2MSL

    倘若双方信都能正常收到,最少只用四封信就能彻底分手!这就是“四次挥手”。

    2.为什么“握手”是三次,“挥手”却要四次?

    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

    所以是“三次握手”,“四次挥手”。

    3.为什么客户端在TIME-WAIT阶段要等2MSL?

    为的是确认服务器端是否收到客户端发出的ACK确认报文

    当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文。所以客户端在发送完ACK确认报文之后,会设置一个时长为2MSL的计时器。MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。

    服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文;

    如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时;
    否则客户端在2MSL内没有再次收到来自服务器端的FIN报文,说明服务器端正常接收了ACK确认报文,客户端可以进入CLOSED阶段,完成“四次挥手”。

    所以,客户端要经历时长为2SML的TIME-WAIT阶段;这也是为什么客户端比服务器端晚进入CLOSED阶段的原因

    展开全文
  • 为什么建立TCP连接需要握手? 原因:为了应对网络中存在的延迟的重复数组的问题 (已失效的连接请求报文段) 例子: client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致...

    为什么建立TCP连接需要三次握手?

    原因:为了应对网络中存在的延迟的重复数组的问题 (已失效的连接请求报文段)

    例子:

    client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。采用 “三次握手” 的办法可以防止上述现象发生。例如刚才那种情况,client 不会向 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接。”  TCP 需要 seq 序列号来做可靠重传或接收,而避免连接复用时无法分辨出 seq 是延迟或者是旧链接的 seq,因此需要三次握手来约定确定双方的 ISN(初始 seq 序列号)。

     

     

    为什么断开TCP连接需要进行四次握手 ?

    因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手。

     

    TIME_WAIT状态的意义

    在TCP连接中,当被动关闭连接的一方(图中client)发送的FIN报文到达时,被动关闭连接的一方会发送ACK确认报文,并且进入TIME_WAIT状态,并且等待2MSL时间段(MSL:maximum segment life)。这么做有下述两个原因:

    1. 被动关闭连接的一方(图中的server)在一段时间内没有收到对方的ACK确认数据包,会重新发送FIN数据包,因而主动关闭连接的一方需要停留在等待状态以处理对方重新发送的FIN数据包。否则他会回应一个RST数据包给被动关闭连接的一方,使得对方莫名其妙。

    2. 在TIME_WAIT状态下,不允许应用程序在当前ip和端口上和之前通信的client(这个client的ip和端口号不变)建立一个新的连接。这样就能避免新的连接收到之前的ip和端口一致的连接残存在网络中的数据包。这也是TIME_WAIT状态的等待时间被设置为2MSL的原因,以确保网络上当前连接两个方向上尚未接收的TCP报文已经全部消失。

    3.  

    展开全文
  • 1. 为什么要三握手 为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。 1.1 具体例子: “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,...

    1. 为什么要三次握手

    为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

    1.1 具体例子:

    “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

    2. 为什么要四次分手

    TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

    3. 为什么上图中的A在TIME-WAIT状态必须等待2MSL时间呢?

    • 第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。
    • 第二,A在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段。

    4. 一次完整的HTTP请求过程

    当我们在web浏览器的地址栏中输入:www.baidu.com,然后回车,到底发生了什么 过程概览

    • 1.对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
    • 2.根据这个IP,找到对应的服务器,发起TCP的三次握手
    • 3.建立TCP连接后发起HTTP请求
    • 4.服务器响应HTTP请求,浏览器得到html代码
    • 5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
    • 6.浏览器对页面进行渲染呈现给用户

    4.1 总结:

    域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

     

    展开全文
  • 点击蓝字关注我哦以下是本期干货视频视频后还附有文字版本哦▼《BAT都在问-为什么TCP建立和释放连接需要三次握手和四次挥手》▼ps:请在WiFi环境下打开,如果有钱任性请随意面试中,经常被面试官问道,为什么TCP建立...
  • 点击蓝字关注我哦以下是本期干货视频视频后还附有文字版本哦▼《BAT都在问-为什么TCP建立和释放连接需要三次握手和四次挥手》▼ps:请在WiFi环境下打开,如果有钱任性请随意面试中,经常被面试官问道,为什么TCP建立...
  • 三次握手原因: 三次握手是为了防止,客户端的请求报文在网络滞留,客户端超时重传了请求报文,服务端建立连接,传输...为什么TCP协议终止链接要四次? 1、当客户端确认发送完数据且知道服务器已经接收完了,想要关闭
  • TCP建立连接时,为什么要进行三挥手?  每一次TCP连接需要三个阶段:连接建立、数据传送和连接释放。三握手就发生在连接建立阶段。 在谢希仁著《计算机网络》第版中讲三握手的目的是为了防止已失效的...
  • 一方A发送完数据后,发送一个FIN请求断开与对方B的连接,B收到FIN表示不会再从A收到数据了,但是这个TCP连接中还是可以发送数据的,直到B发送完数据,也发送FIN,最终释放连接。 一、四次挥手: 第一次挥手:C-...
  • (1)首先,采用三次握手来建立TCP连接四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。 (2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议...
  • TCP连接的释放(四次挥手) 数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。 1:客户端进程发出连接释放报文,并且停止发送数....
  • 握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致...
  • 目录理清TCP socket编程和三次握手四次挥手的关系理清TCP重要报头文字理清三次握手的过程为什么建立连接需要三次握手呢理清四次挥手为什么断开连接需要四次挥手呢 理清TCP socket编程和三次握手四次挥手的关系 ...
  • 为什么TCP建立与释放连接要进行三次握手和四次挥手? 接下来, 我们将逐步对这个问题进行剖析. 理解清楚TCP socket编程与三次握手和四次挥手的关系. 对于服务器端来说, 我们首先创建一个socket, 接下来调用bind绑定...
  • TCP的三次握手四次挥手,估计大家都听过。但是真的能把每一步说明白的人比较少。我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞什么飞机...
  • TCP为什么是三次握手和四次挥手

    万次阅读 多人点赞 2018-08-10 11:17:13
    为什么建立连接是三次握手断开连接四次挥手? 三次握手的流程和四次挥手的流程是什么? 三次握手与四次回收分别对应TCP连接与断开过程 tcp报文格式 标志位含义 ACK:确认序号有效。 SYN:发起一个新连接。 ...
  • 1.为什么需要四次挥手? 三次不能吗? (假设从客户端开始发起第一次挥手, 即第三次挥手由服务端发送). 如果只有三次挥手, 那么当服务端发起第三次挥手之后就关闭了, 客户端收到这一次报文也就可以关闭了. 这是理想...
  • 为什么就建立连接还要三握手呢?这主要是为了防止已失效的连接请求报文又突然传递服务器。 所谓“防止已失效的连接请求报文又突然传递服务器。”是这样一种情况: A客户端发出连接请求,因为连接请求报文丢失...
  • 一、四次挥手 二、等待计时器(TIME-WAIT) ...为什么需要等待2MSL? ◆ 最后一个报文没有确认 ◆ 确保发送方的ACK可以到达接收方 ◆ 2MSL时间内没有收到,则接收方会重发 ◆ 确保当前连接的所有报文都已经过期 ...
  • 三次握手的流程和四次挥手的流程是什么? 标志位含义 ACK:确认序号有效。确认控制字段 SYN:发起一个新连接。 FIN:释放一个连接。 文章目录三次握手的过程四次挥手的过程老师版三次握手四次挥手 三次握手的过程 ...
  • 文章目录TCP四次挥手过程第一次挥手第二次挥手第三次挥手第四次挥手等待计时器为什么需要等待计时器?为什么是2MSL? 文章内容概览 上一篇文章中分享了TCP的三次握手,本文是相反的过程,是对TCP连接释放 TCP四次...
  • 为了理解TCP的三次握手和四次挥手需要了解TCP协议 TCP协议的头如下: 源端口和目的端口各占16位也就是两个字节,这也就说明了为什么端口号在程序中是unsignedshort类型的值。标志位flags有六个:URG:紧急指针...
  • 三次握手: 四次挥手: 问题点: 1.为什么“握手”是三次,“挥手”却要四次?...TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP...TCP释放连接时之所以需要“四...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

为什么tcp释放连接需要四次