tcp连接释放四次握手(TCP释放连接时的四次挥手)

      最后更新:2023-06-09 09:29

      为什么建立连接是三次握手,而关闭连接却是四次挥手

      1.在建立连接时:服务器端处于LISTEN状态时,当收到SYN报文段的建立连接请求后,服务器可以把ACK报文段和SYN报文段(ACK报文段起确认作用,即确认客户端的连接建立请求;SYN报文段起同步作用)放在一起发送,所以在连接建立时四次握手(即第二次握手时,服务器的ACK报文段和SYN报文段分开发送)可以合并为三次握手。2.而在释放连接时需要四次是因为TCP连接的半关闭造成的。由于TCP是全双工的(即数据可在两个方向上同时传递),因此,每个方向都必须要单独进行关闭,这个单方向的关闭就叫半关闭。下面再详细说明下为什么要半关闭:在关闭连接时,当服务器收到客户端的FIN报文通知时,它仅仅表示客户端没有数据发送服务器了;但服务器未必将所有的数据都全部发送给了客户端,所以服务器端未必马上也要关闭连接,也即服务器端可能还需要发送一些数据给客户端之后,再发送FIN报文给客户端来表示现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的,这也是为什么释放连接时需要交换四次报文了。
      因为TCP有个半关闭状态,假设A.B要释放连接,那么A发送一个释放连接报文给B,B收到后发送确认,这个时候A不发数据,但是B如果发数据A还是要接受,这叫半关闭。然后B还要发给A连接释放报文,然后A发确认,所以是4次。
      为什么建立连接是三次握手,而关闭连接却是四次挥手

      TCP为什么需要3次握手与4次挥手

      三次握手(建立连接) 1)客户端发送一个带SYN标志的TCP报文到服务器,这是第1个报文;2)服务端回应客户端,是第2个报文,同时带有ACK标志和SYN标志,以此回应第1步,SYN用于询问客户端是否准备好进行通讯;3)客户再次回应服务端一个ACK报文,是第3个报文。为什么要进行3次握手?当服务端的LISTEN状态下的SOCKET收到SYN报文的请求后,可以把ACK和SYN放在1个报文中来发送,其中ACK的作用是应答,而SYN的作用是同步。四次挥手(连接终止协议)1)TCP客户端发哦是那个一个FIN,用于关闭客户发送到服务器的数据传送;2)服务器收到这个FIN,返回一个ACK,和SYN一样,一个FIN将占用一个序号;3)服务器关闭客户端的连接,发送FIN给客户端;4)客户端返回ACK报文,并将确认序号设置为收到的序号+1。为什么要进行4次挥手? 在TCP连接时,是将SYN和ACK一起发送的,但为什么挥手却没有一起发送呢?因为TCP是全双工模式,接收到FIN时将没有数据再发来,但还是可以继续发送数据。
      安全考虑,需要通信双方确认
      TCP为什么需要3次握手与4次挥手

      TCP和SSL 的三次握手和四次挥手

      第一次握手:客户端向服务端发送 SYN 报文,服务端确认接收了 SYN 报文。 第二次握手:服务端在确认接收了 SYN 报文之后,会返回向客户端发送 SYN 报文和 ACK 确认报文。第三次握手:客户端接收到 SYN 报文了 ACK 报文 之后双方就建立起了连接,可以好好玩耍了。第一次挥手:客户端向服务端发送数据,发送完成之后会发送一个 FIN 报文,告诉服务端数据发送完毕。第二次挥手:服务端接收到 FIN 报文之后,将 ACK 报文返回给客户端,告诉客户端(服务端)已经接收到数据。第三次挥手:服务端处理完数据之后再发送一个 FIN 报文给客户端,告诉客户端(服务端)已经处理完毕。 第四次挥手:客户端接收到服务端发来的 FIN 报文之后就能确认这次的数据传输完成。可以关闭本次数据传输连接了。
      TCP和SSL 的三次握手和四次挥手

      TCP 三次握手和四次挥手指的什么?

      为什么要三次握手 三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常所以三次握手就能确认双发收发功能都正常,缺一不可。 第四次握手:任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
      只知道三次握手,A向B发送信息,B会向A返回一个收到确认的消息,A还会对这个确认消息发送一次再确认,所以一个消息要经过三次的消息交互才算发送完成,这就是三次握手
      TCP 三次握手和四次挥手指的什么?

      下图是A.B双方释放TCP连接时的四次握手过程,请根据示意图分别给出 ①—⑤各空的数值?

      回答这个问题,咋们发散思维下。假如tcp握手是四次,即syn, ack, syn, ack。客户端首先发送syn,告诉服务器,建立一个从客户端到服务器的连接。服务器收到数据后,根据确认机制,需要回复ack(不是syn/ack),表示收到对方的syn包。按道理,这时候客户端就可以往服务器发送数据了,因为这个方向的连接解决起来了。但真实情况,这时候是不允许的,为何呢?卖个关子先。接着讲握手,上面客户端通过syn建立好了客户端到服务器的连接。服务器也想建立到客户端的连接,咋整?简单,服务器也发送syn到客户端,客户端收到回复ack。此时,服务器就可以通过此方向的连接,往客户端发送数据了。到这里,好像四次握手,也可以解决客户端和服务器的互相收发数据的需求。但仔细想想,这样的收发数据,其实是通过两个连接完成的,此时的连接是单工的。而tcp是希望建立一个双工的连接,在一个连接上,解决数据收发的问题。那怎么把这两个单工的连接合并成一个双工的连接呢?tcp给出的方法就是,把中间ack和syn合在一起,组成syn/ack。这样子,在双工的连接没有建立起来时,不给任何一个方向传数据。建立起来后,无论客户端还是服务器,都可以收发数据。这才是符合双工的要求嘛,前面的疑问也就好理解了。总结一句话,tcp握手为啥是三次,是因为tcp的连接是双工的。同样的道理,tcp挥手是四次。假如tcp挥手是三次,fin,fin/ack,ack。现实中是存在的,有时候三次,有时候四次。为何呢?首先fin是用于关闭从本端到对端的连接,表示本端没有数据给对端了。对端收到该fin后,会回复ack,这是tcp确认机制的要求。这时候,本端是不能发送数据给对端,但对端仍然可以发数据给本端。等对端没数据给本端时,也发送给fin给本端,关闭从对端到本端的连接。本端收到对端的fin后,回复ack。到这里,经过四次挥手,双工的tcp连接才完全关闭。还有一种情况,本端要关闭到对端连接,发送fin给到对端时,刚好对端也没数据给本端,对端就回复fin/ack了。而是,四次挥手变成三次了。这也好理解,你没话跟我说(没数据给我),我既可以有话跟你讲(有数据给你),也可以对你无言(无数据给你),选择权在我(回复ack还是fin/ack,我说了算)。综上,握手一定是三次,挥手既可以是三次,也可以是四次,当然一般都是说四次挥手,没必要咬文嚼字,知道就好。
      下图是A.B双方释放TCP连接时的四次握手过程,请根据示意图分别给出 ①—⑤各空的数值?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类