首页 > 编程知识 正文

tcp三次握手和四次挥手,TCP四次挥手

时间:2023-05-06 20:44:29 阅读:174340 作者:3992

TCP的3次握手和4次挥手1、TCP是什么2、TCP的连接建立(3次握手) 3、TCP的连接释放) 4次挥手)。

一.什么是TCP

运输层主要使用以下两种协议:

传输控制协议传输控制协议TCP (用户数据报协议UDP ) ——提供面向连接的可靠数据传输服务

二、TCP连接建立(三次握手) TCP连接的建立采用客户端-服务器方式。 主动开始建立连接的APP过程称为客户端,被动等待建立连接的APP过程称为服务器。

TCP建立连接的过程称为握手,握手需要在客户端和服务器之间交换三个TCP消息。 (“三次握手”这个表达不太准确,更准确地说应该是“三报握手”。)

通过三消息握手建立TCP连接的过程:

最初两端的TCP都处于CLOSED状态,这里假设主机a主动打开连接,b被动打开连接,所以a为客户端,b为服务器端。

b的TCP服务器进程最初为创建传输控制块TCB,然后在LISTEN (监听)状态下为等待客户的连接请求。 向的TCP客户端进程创建传输控制块TCB、B 发送连接请求报文、SYN=1、ACK=0,同时选择初始号码x (不能带入数据,但消耗一个号码) 如果TCP客户端进程http://接收到连接请求消息,并同意建立连接,则选择A 进入SYN-SENT(同步已发送)状态、SYN=1、ACK=1、确认号码x 1 TCP服务进程发送确认报文a在收到来自b的连接确认消息后,向B 进入SYN-RCVD(同步收到)状态、ACK=1、确认号码为y 1、号码为x 1 (可以携带数据,但是没有数据A 发出确认b在得到a的确认后,进入ESTABLISHED状态。

为什么a最后再发送一次确认?

主要是为了防止失效的连接请求报文段突然转发到b,b错误打开连接。

例如,a提出了一个连接请求(将其称为第1个连接请求) ),但在某个网络节点上长时间停留,a等待超时再发送时间后,再次提出连接请求(第2个连接请求) ),a与b建立连接,发送数据之后,第1个连接请求到达b,a误以为又提出了新的连接请求,向a发送了确认。进入ESTABLISHED(已建立连接)状态但是,现在a没有提出建立连接的请求,所以不会无视b的确认,也不会向b发送数据。 但是,b认为已经建立了新的连接,正在等待a发来数据。 这样做会浪费b的很多资源。如果不需要发送第三个报文就能建立连接,那么这时新的连接就建立了。

三、TCP的连接解除(4挥手)在数据传输结束后,通信双方都能够解除连接

a释放连接消息,FIN=1,序列号u (这等于把最后一个被先前转移的数据的字节的序列号加1 )消息段不具有数据,但是要消耗一个序列号。 进入固定等待1 (等待结束1 )状态。 b接收并确认后,ACK=1,确认号码为u 1,号码为v。 进入“等待关机”状态。但是如果采用发送第三个报文的办法,A不会向B的确认发出确认,B由于收不到确认,就知道A并没有要求建立连接a在收到b的确认后,进入等待结束2状态,等待来自b的释放连接报文段。 b不需要连接时,发送连接释放信息,设为FIN=1、ACK=1、确认号码u 1、号码w。 最后确认状态。 a收到并确认后,ACK=1,确认号码为w 1,号码为u 1。 进入TIME-WAIT (等待时间)状态(2 MSL )最大消息生存时间),然后释放连接。 b在得到a的确认后解除连接。

你为什么要挥手四次?

客户端发送FIN连接并释放消息后,服务器接收该消息并进入“等待关闭”状态。此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据,传输完成后,服务器发送FIN连接释放消息。

为什么a必须在时间等待状态下等待2MSL的时间呢?

为了使a发送的最后一个ACK消息段能够到达b。 如果b没有收到来自a的确认消息,则重发断开连接请求消息,a要等待一段时间是为了应对这种状况。

要等待一段时间,是因为在主连接持续时间内出现的所有消息都将从网络中消失,并防止下一个新连接出现旧的连接请求消息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。