精华内容
下载资源
问答
  • TCP为什么要四次挥手(3分钟你看不懂找我) TCP断开的时候是四次挥手。本文只是一个比较入门的,如需要深入还需要搜下其他的博客。 这里分为 “主动方” 和 “被动方” 主动方是先主动想要结束的一方。因为TCP是双向的...

    TCP为什么要四次挥手(3分钟你看不懂找我)

    TCP断开的时候是四次挥手。本文只是一个比较入门的,如需要深入还需要搜下其他的博客。

    这里分为 “主动方” 和 “被动方” 主动方是先主动想要结束的一方。因为TCP是双向的通信,所以如果用 “服务端” 和 “客户端” 似乎不太准,这里改用这个描述

    • 主动方发给被动方FIN信号
    • 被动方回复ACK给主动方

    必须回复,否则主动方会持续发送FIN信号,ACK的意思就是知道了,你闭嘴。也许这时候被动方还有数据传输给主动方,所以回复ACK后不是立即就断开了,等被动方觉得可以结束了,再发送FIN给主动方,这就是第三步

    • 被动方回复FIN给主动方
    • 主动方收到并回复ACK给被动方

    至此,连接才能断开。所以为什么是4步骤。

    展开全文
  • TCP为什么要三次握手,为什么要四次挥手? 三次握手,要保证发送端与接受端都做好连接的准备 四次挥手,要保证断开连接时数据完整的发送完毕 TCP是全双工的 为什么连接的时候是三次握手,关闭的时候却是四次握手? ...

    TCP为什么要三次握手,为什么要四次挥手?

    三次握手,要保证发送端与接受端都做好连接的准备

    四次挥手,要保证断开连接时数据完整的发送完毕

    TCP是全双工的

    为什么连接的时候是三次握手,关闭的时候却是四次握手?

    但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

    虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

    TCP 的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?

    采用三次握手是:为了防止失效的连接请求报文段突然又传送到主机 B ,因而产生错误。

    失效的连接请求报文段是指:主机 A 发出的连接请求没有收到主机 B 的确认,于是经过一段时间后,主机 A 又重新向主机 B 发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机 A 第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机 B ,主机 B 以为是主机 A 又发起的新连接,于是主机 B 同意连接,并向主机 A 发回确认,但是此时主机 A 根本不会理会,主机 B 就一直在等待主机 A 发送数据,导致主机 B 的资源浪费

    展开全文
  • TCP为什么需要三次握手四次挥手 三次握手 TCP是通过程序实现的,可靠的,面向连接的协议。而程序是严谨的,每一次建立连接都会进行“三次握手”这样的步骤。 建立连接的目的是为了可靠的数据传输。所以需要保证...

    TCP为什么需要三次握手四次挥手

    三次握手

    TCP是通过程序实现的,可靠的,面向连接的协议。而程序是严谨的,每一次建立连接都会进行“三次握手”这样的步骤。

    建立连接的目的是为了可靠的数据传输。所以需要保证客户端和服务端都能正常的发送或接收数据。

    如果有一方无法正常发送、接收数据,那么整个数据传输既不可靠也不能成功。

    所以为什么会需要三次,而不是两次?

    三次握手流程:

    1.刚开始客户端和服务端都是关闭状态,服务端会一直处在监听状态,监听是否有建立连接的请求。

    2.客户端需要建立连接时,会发送确认连接报文,此报文是同步报文SYN=1,同时生产一个随机序列号seq=x,这是第一次握手

    第一次握手,客户端发送同步报文到服务端,客户端知道自己有发送数据能力,不知道服务端是否有发送、接受数据能力。
    

    3.当服务端接收到连接请求报文时,会发送一个同步报文确认报文,此报文SYN=1,并且ACK=1(大写ACK表示报文为确认报文),同时服务端也会生成一个随机序列号seq=y,并且将ack设置为x+1(x是客户端发送的同步报文序列号),确认报文回传给客户端,这是第二次握手

    第二次握手,服务端收到同步报文,并回复确认同步报文,此时,服务端知道自己有接收、发送数据能力,并且客服端有发送数据能力,但不知道客户端是否有接收数据能力。
    

    4.当客户端收到服务端的ACK报文后,会回复一个ACK确认报文,用于确认确认报文已收到,此报文 ACK = 1,seq = x + 1, ack = y + 1(y是确认报文序列号),这是第三次握手

    第三次握手,当客户端收到确认同步报文后,知道服务端具备发送、接收能力,也知道自己具备,但是服务端只知道客户端具备发送能力,还不知道也有接收能力,所以需要发送确认报文,告诉服务端自己具备接收能力。
    

    当三次握手流程结束后,客户端服务端都知道自己和对方具备发送、接收数据能力,建立连接完成,就可以进行数据传输了。

    所以两次握手是无法满足以上条件的, 因为服务端并不知道客户端是具备接收数据的能力,需要第三次握手,客户端告知服务端自己有接收能力。
    在这里插入图片描述

    四次挥手

    三次握手是为了建立可靠的数据传输通道,四次挥手是为了保证等数据传输完再关闭连接,保证双方都达到关闭连接的条件才能断开。

    四次挥手流程:

    1. 客户端发起 FIN=1 断开连接的报文,携带随机生成的 seq=u,发送给服务端,并且自己处于 FIN-WAIT状态,这是第一次挥手

      第一次挥手客户端发起关闭连接的请求给服务端;
      
    2. 服务端接收到 FIN 报文后,回复一个确认报文,其中 ACK = 1,随机生成一个 seq=v,以及 ack=u+1(u为客户端发送报文的序列号),这是第二次挥手

      第二次挥手:服务端收到关闭请求的时候可能这个时候数据还没发送完,所以服务端会先回复一个确认报文,表示自己知道客户端想要关闭连接了,但需要等待数据传输完;
      
    3. 当服务端数据发送完了过后,再发送一个 FIN 报文给客户端,通知客户端,服务端准备关闭连接了,此报文 FIN=1,ACK=1,ack=u+1(u为客户端发送报文的序列号),seq=w这是第三次挥手

      第三次挥手,当数据传输玩,服务端会主动发送FIN报文,告知客户端,标识数据已发送万传给你,服务端准备关闭连接了。
      
    4. 当客户端收到 FIN 确认报文时再发送一个FIN 的确认报文,其中 ACK = 1,seq = u + 1,ack = w + 1(w为服务端发送报文的序列号),并进入 TIME-WAIT 状态,当等待 2MSL ( 报文最大生存时间 *2)后关闭连接,这是第四次挥手

      第四次挥手,当客户端收到服务端的FIN报文后,会回复ACK报文,告知服务端自己知道了,在等待一会就关闭连接。
      

    在这里插入图片描述

    疑问:

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

    尾音我说的时候没有数据传输,服务端的SYN和ACK报文可以一起发送,但是挥手时有数据传输,ACK和FIN报文不能同时发送,需要分为两步,所以多了一步流程。

    2.为什么客户端在第四次挥手后还会等待2MSL?

    等待2MSL是因为保证服务端接收到了ACK报文,因为网络是复杂的,ACk报文可能会丢失,如果服务端没接收到ACK报文的话,会重新发送FIN报文,只有当客户端等待了2MSL都没有收到重新发送的FIN报文时,才表示服务端是正常接收到了ACK报文,这个时候客户端就能关闭了。

    总结

    TCP协议是面向连接的可靠的传输层协议,它的拥塞控制,失败重传等机制在互联网数据传输中是不可或缺的。当下互联网行业中,基于TCP实现的程序数不胜数。虽然程序员很少有机会主动编写TCP相关代码,但理解其实现原理,还是有所帮助的。

    展开全文
  • 什么TCPTCP:传输控制协议 是面向连接的协议。在收发数据前,双方都建立可靠...四次挥手简述 第一次挥手 客户端发送一个FIN报文,用来关闭客户端到服务器的传输数据,此时客户端处于FIN_WAIT_1状态 第二次挥手 服

    什么是TCP?
    TCP:传输控制协议 是面向连接的协议。在收发数据前,双方都要建立可靠的连接。一个TCP连接必须经过三次“对话”才能建立起来。

    三次握手的简述
    第一次握手成功 让服务器端知道客户端具有发送能力。
    第二次握手成功 让客户端知道服务器具有接收和发送能力。但此时服务器端不知道客户端是否接收到了自己的信息
    第三次握手成功 服务器端知道客户端接收到信息,建立连接

    四次挥手简述
    第一次挥手 客户端发送一个FIN报文,用来关闭客户端到服务器的传输数据,此时客户端处于FIN_WAIT_1状态

    第二次挥手 服务器端收到FIN报文,会发送ACK报文,并且第二次挥手 当服务器端收到FIN之后,会发送ACK报文,并且把客户端的序列号增加1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务器端处于CLOSE-WAIT状态

    第三次挥手 如果服务器端同意关闭连接,则会向客户端发送一个FIN报文,并且指定一个序列号,此时服务器端处于LAST-ACK的状态

    第四次挥手 当客户端收到ACK之后,处于FIN-WAIT-2状态。待收到FIN报文时发送一个ACK报文作为应答,并且把服务器端的序列号值+1作为自己ACK报文的序列号值,此时客户端处于TIME-WAIT状态。等待一段时间后会进入CLOSE状态,当服务端收到ACK报文之后,也会变成CLOSE状态,此时连接正式关闭。

    为什么建立连接通信了三次,而断开连接却用了四次?
    因为当服务器端接受到FIN报文后,发送的ACK报文只是用来应答,并不表示服务器端也希望立即关闭连接。
    当只有服务器端把所有的报文都发送完,才会发送FIN报文,告诉客户端可以断开连接了。

    展开全文
  • TCP通过四次挥手来释放连接 四次挥手的过程如下: 第一次挥手: 客户端向服务器发送一个 FIN 数据包(FIN = 1,seq = u)主动断开连接,报文中会指定一个序列号。 告诉服务器:我跟你断开连接了,不会再给你发...
  • TCP为什么四次挥手不是三次 因为断开需要两边都断!!! 由于 TCP 的半关闭(half-close)特性,TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。 任何一方都可以在数据传送结束后发出连接...
  • 一、四次挥手的详述  1、假设Client端发起中断连接请求,也就是发送FIN报文。 2、Server端接到FIN报文后,意思是说"我Client端没有数据发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,...
  • 学习大佬博客——两张动图-彻底明白TCP的三次握手与四次挥手,做笔记: 1. 四次挥手过程 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号seq=u(等于前面已经传送过来的数据...
  • 文章目录相关问题...这就造成了四次挥手 为什么不能是3次 等于说服务端将ACK报文和FIN报文的发送合并为一次挥手,这个时候长时间的延迟可能会导致客户端误以为FIN报文没有到达客户端,从而引起客户端不断的重发
  • 一、TCP三次握手、四次挥手 我们先回顾TCP三次握手、四次挥手的过程。 1、三次握手: Client:请求连接; Server:同意并请求连接; Client:同意。 2、四次挥手: Client:请求关闭; Server:同意; 【Server:...
  • 计算机网络体系结构在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时多思考。这些概念对后面的学习很有帮助。网络协议是什么?在计算机网络做到...
  • TCP连接状态图1是TCP三次握手、数据传输、四次挥手三个阶段的状态转移图,状态说明如下:LISTEN:侦听来自客户端的TCP端口的连接请求SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查...
  • 这就造成了四次挥手。 如果是三次挥手会有什么问题? 等于说服务端将ACK和FIN的发送合并一次挥手,这个时候长时间的延迟可能会导致客户端误以为FIN没有到达客户端,从而让客户端不断的重发FIN。 不断的进行数据包...
  • 在《基于Wirshark的TCP三次握手介绍》中提到,TCP在建立连接之前,经历三次握手,而在关闭TCP连接时,通信双方经历四次挥手,如图1所示。 图1 关闭TCP时的四次挥手 1 第一次挥手 客户端和服务端进行TCP...
  • 文章目录三次握手过程数据传输过程四次挥手过程总结ackseq 三次握手过程 数据传输过程 四次挥手过程 总结 ack 1.在握手和挥手阶段,ack确认号是对方seq+1 2.在传输数据阶段,ack确认号是对方seq+数据长度 seq ...
  • 网络——》TCP三次握手、四次挥手一、三次握手二、四次挥手四、常见问题1、三次握手原因1)假设只有二次握手2、四次挥手原因1)假设只有二次挥手2)假设只有三次挥手3、为什么TIME_WAIT状态需要经过2MSL(最大报文段...
  • TCP原理和三次握手和四次挥手过程TCP三次握手和四次挥手过程TCP什么?有什么作用?三次握手连接建立详细过程四次挥手连接终止参考 TCP三次握手和四次挥手过程 TCP什么?有什么作用? TCP 传输控制协议(TCP,...
  • TCP没有半开方法的传输方法,但是有半关传输方法,如果新建连接也支持半开传输,那么也得四次握手而不是三次。 半关指的是一方发了fin表明我不发了,但是另外一方不发fin,这时候不发fin的一方还可以继续发数据。搜...
  • 一、什么四次挥手四次挥手TCP 连接的释放,这里假设客户端主动释放连接。在挥手之前主动释放连接的客户端结束 ESTABLISHED 阶段,随后开始四次挥手。 首先客户端向服务端发送一段TCP报文表明想释放TCP连接...
  • 文章目录TCP三次握手,四次挥手TCP三次握手TCP四次挥手TCP三次握手的原因(为什么不是2次或者4次)TCP握手比挥手多一次的原因 TCP三次握手,四次挥手 TCP的报文段结构: 对于TCP的三次握手,需要用到的信号量以及...
  • TCP四次挥手详解

    千次阅读 多人点赞 2021-11-13 17:12:07
    TCP四次挥手过程和状态变迁 在断开连接之前客户端和服务器都处于ESTABLISHED状态,双方都可以主动断开连接,以客户端主动断开连接优。 第一次挥手:客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置...
  • 面试官:说说TCP四次挥手的过程 酋长从宫中回来不久,国王就颁布了新的TCP协议法案,这次修正版的TCP协议运行的很好,举国上下一片喜悦 从小白到菜鸟的转变 经过上次的聊天后,司马和上官成为了好朋友,今天,...
  • TCP是一种精致的,可靠的字节流协议。...第一握手:Client将标志位SYN置1,选择序号seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 第二握手:Server收到数据包后由标...
  • 一、OSI七层模型 物理层:物理层; 数字链路层: 提供介质访问和链路管理; 网络层:IP选址及路由选择;... FIN: 简写F,完成标志位,表示我已经没有数据发送了,即将关闭连接; PSH:简写..
  • Q4:四次挥手是怎样的呢?握手变成挥手了? Q1:tcp和udp有什么区别? A1:tcp比udp可靠,它提供的是面向连接、可靠的数据流传输,且有超时重发的功能,而udp则相反。面向连接,通俗的说,就是会确保把数据从一个...
  • 理论上来说,tcp四次挥手过程是这样的 但是在今天真机抓包的时候发现了实际四次握手的第二次和第三次貌似是合并在一起了,并没有分成两次来发送(seq和ack的值是没问题的) 如图:整个通信过程的最后3个包为四次...
  • TCP四次挥手

    2021-01-18 17:44:01
    TCP四次挥手过程和状态变迁 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。 服务端收到该报文后,就向客户端发送 ACK 应答报文,...
  • 简述TCP四次挥手

    2021-03-14 14:24:50
    四次挥手流程: 由于TCP连接是双向传输的对等的模式即双工 wiki百科定义: 全双工(full-duplex)的系统允许二台设备间同时进行双向资料传输。全双工的系统可以用复线铁路类比。两个方向的车辆因使用不同的轨道,因此...
  • TCP 连接中的三次握手与四次挥手三次握手请求携带参数三次握手四次挥手 三次握手 请求携带参数 SYN: 标志位,表示发起同步 seq: 随机生成的序列号,用来进行同步确认校验,这里的值随手写的,用来表明意思 ACK:...
  • TCP协议三次握手和四次挥手形象比喻三次握手四次挥手 形象比喻 三次握手:将小明当作客户端,小红当作服务器端,两人写信告白: **第一次握手:**小明告诉小红:我喜欢你。 **第二次握手:**小红告诉小明:我知道了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,815
精华内容 23,126
关键字:

tcp为什么要四次挥手