TCP三次握手,四次挥手详解

TCP是面向连接的协议,运输连接是用来传送TCP报文的.TCP运输连接有三个阶段:连接建立,数据传送,连接释放。

在TCP连接建立过程中要解决以下三个问题:

(1)要使每一方都确认对方的存在。

(2)允许双方协商一些参数。

(3)能够对运输的实体资源进行分配。

三次握手

TCP连接的建立采用客户服务器的方式,主动发起建立的进程的叫客户,被动等待建立连接的是服务器。

                                                                                                                                                                                                主机A运行TCP客户程序,而B运行TCP服务器程序。最初的两端TCP进程都处于CLOSED状态。

           一开始B的TCP服务器进程创建控制块TCB,准备接受客户进程的连接请求。然后服务器进程处于LISTEN(收听)状态,等待客户的连接请求。

A的TCP客户进程也是首先创建传输控制块TCB。打算建立TCP连接时向B发出SYN请求报文段,这时候首部的SYN=1,同时选择一个初始序号seq=x。发送完以后进入了SYN-SENT状态。

B收到连接请求报文后,如果同意建立连接,则向A发送确认,在确认报文中把SYN和ACK位置为1,确认号是ack=x+1,同时也为自己初始序号seq=y,同时B发送出确认后进入SYN-RCVD状态。

A收到B的确认以后还要给B发送确认报文。所以此时确认报文中ACK置于1,确认号ack=y+1,同时自己的序号是seq=x+1,发送完以后TCP连接已经建立,A进入ESTABLISHED状态。

当B收到确认后进入了ESTABLISHED状态。

到此为止TCP已经完成了连接建立。

经典面试题:为什么要进行三次握手,两次不可以吗?

回答:两次不可以,为了防止已失效的连接请求报文突然传送到了B,因而产生错误。就比如:如果A发送了连接请求但是这个连接请求因为“丢失”而未收到确认,这时通过超时重传机制又发了一次连接请求,后续收到了请求建立了连接,等数据传输完以后释放了连接。这时候第一次发送的连接请求到了B,第一次发送的请求可能在某个网络结点被滞留了,以至于A和B连接释放了才到达了B,本来这个连接请求已经失效了,如果只有两次握手当B收到这个失效了连接时他就和A进行了连接,准备接收A的数据,但是事实上A根本没有和他连接的打算。所以必须三次握手确认。

四次挥手

数据传输结束后,通信的双方都可释放连接。现在A和B处于ESTABLISHED状态。现在A向B发送释放连接的报文,并停止发送数据,A把释放连接报文的首部中的FIN置为1,序号为seq=u;发送以后A进入FIN-WAIT-1状态等待B的确认,

B收到释放连接报文后立即发送确认,确认后为ack=u+1,自己报文的序号为v(v就是B前面传送的序号+1),发送完以后B进入了CLOSE-WAIT状态,因为现在A告诉B他不发数据了,想断开连接,但是B还是想给A发数据的,并且A也要接受B的数据,这时候TCP连接就处于半关闭状态。也就是B一>A的连接是没有关闭的,并且可能会持续一段时间。

A收到B的确认以后进入了FIN-WAIT2状态,等待B发送完数据,一直等到B发出释放连接报文为止。

若B已经没有数据给A发送,进程就释放TCP连接,这时B发出的释放连接报文必须FIN=1,假定B的序号为W(因为期间还发送了数据,如果没发数据那就是v+1),确认号还是ack=u+1,发送完以后B进入了LAST-ACK(最后确认状态),等待A的确认。

A收到B的释放连接报文后,必须对此发送确认,在确认报文中把ACK置为1,确认号是ack=w+1,自己的序号为seq=u+1,然后进入了TME-WAIT(时间等待)状态,现在TCP连接还没有释放掉,必须等待时间等待计时器设置的时间2MSL后,A才进入到CLOSED状态。

B收到应答报文后进入关闭状态。

面试问题:为什么A在TIME-WAIT中必须等待2MSL时间?

第一:为了保证A发送的最后一个ACK报文段能够到达B,这个报文可能会丢失,导致处在LAST-ACK状态的B收不到已经发送的FIN+ACK报文的确认(其实就是为了给超时重传时间,如果不需要等待2MSL,发完以后就进入CLSED状态那么就无法保证B顺利的进入到CLSED状态),超时重传以后重新启动2MSL计时器。最后A和B都顺利的进入到CLOSED状态。

第二:为了防止上面三次握手中提到的”已失效连接请求报文“出现,A发完最后一个ACK报文后,经过2MSL后,就可以使连接持续时间内传送的所有报文段从网络消失。这样在新的连接中不会出现旧的连接请求报文。

TCP还有一个保活计时器:设想一个这样的情况,客户主动与服务器建立了TCP连接,但是后来客户端的主机突然出现故障,所有以后服务器就收不到客户发来的数据,但是会一直等着客户发数据。这时候就应该有措施来终止这个没有结局的等待。这时候就要用到保活计时器。服务器每次收到一次客户的数据就重新设置保活计时器,一般是两个小时,若两个小时没有收到客户数据,服务器就发送一个探测报文段,以后每隔75秒发一次,若发了10个报文但是没得到响应那么服务器就认为客户出了故障,关了这个连接。

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP三次握手是建立TCP连接的过程,而四次挥手是关闭TCP连接的过程。 在三次握手中,客户端首先向服务器发送一个请求连接报文段,服务器接收到后回复一个确认报文段,表示可以建立连接。接着,客户端再发送一个确认报文段,表示已经接受了服务器的确认。这样,双方就建立了可靠的连接。 在四次挥手中,当客户端需要关闭连接时,它发送一个关闭连接请求报文段给服务器。服务器接收到后,回复一个确认报文段,表示同意关闭连接。接着,服务器还要发送一个关闭连接请求报文段给客户端。最后,客户端回复一个确认报文段,表示已经接受了服务器的关闭请求。这样,双方都确认了关闭连接连接就被关闭了。 通过这样的三次握手四次挥手过程,TCP协议能够确保数据的可靠传输,并在需要时建立和关闭连接。这种机制有效地保障了网络通信的稳定性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TCP三次握手四次挥手的过程详解.md](https://download.csdn.net/download/RuanJian_GC/87429663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [最通俗易懂的TCP三次握手四次挥手详解](https://blog.csdn.net/m0_49330686/article/details/129400464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值