TCP连接的创建过程和释放过程(三次握手,四次挥手)

tcp的3次握手4次挥手

创建TCP连接过程:(3次握手)
在这里插入图片描述
一开始客户端和服务器都处于“CLOSED”关闭状态
(1)首先服务器创建TCB(传输控制块),被动打开连接,进入LISTEN(监听状态)
(2)客户端向服务器发送请求连接报文。将首部中的同步位SYN置为1。SYN报文不能携带数据,且消耗序列号。在首部中,假设序列号seq位x。发送完请求连接报文,客户端进入SYN-SEND(同步已发送状态)。
(3)服务器在收到客户端发送的请求连接报文后,发送回一个确认报文给客户端,确认已经收到客户端的请求连接报文。确认报文为:同步位SYN为1,确认位ACK为1,同时假设序列号seq为y, 且确认号为请求连接报文的序列号加1即 x+1。 服务器进入SYN-RCVD(同步收到状态)。
(4)客户端收到服务器的确认报文后,又一次发送一个确认报文给服务器,告知服务器 已经确认收到了服务器的确认。确认报文为:ACK=1,seq=x+1,ack=y+1。之后客户端进入ESTABLISHED(连接建立状态)
(5)服务器收到客户端的确认报文后,也进入ESTABLISHED(连接建立状态),这时双方可以进行数据传输。

TCP连接释放过程:(4次挥手)
在这里插入图片描述
(1)客户端发送完数据后,要释放连接,会发送一个释放连接的报文给服务器。首部的FIN(finish已完成)位置为1,假设序列号为u。此时服务器进入FIN-WAIT-1(终止等待1状态)
(2)服务器收到释放连接的报文,对这个释放进行确认。ACK=1,seq=,v,ack为u+1。并通知上层应用程序,A到B的连接已关闭。此时进入CLOSE-WAIT状态。但是连接还没有释放,因为A到B没有数据传输,但是B到A还有数据要发送。
(3)客户端收到确认报文进入FIN-WAIT-2(终止等待2状态)
(4)当服务器数据发送完,也发送一个请求释放连接报文给客户端。报文为:FIN=1,ACK=1,seq=w,ack=u+1。发送完报文进入LASK-ACK(最后确认状态)
(5)客户端收到服务器的释放连接请求,也对该请求进行确认。确认报文为:ACK=1,seq=u+1,ack=w+1。并进入TIME-WAIT状态。等待2MSL的时间,MSL叫做最长报文段寿命(Maximum Segment Lifetime)。防止确认报文丢失,能够有时间重传确认报文。否则服务器将一直等待客户端的确认不释放连接,浪费网络资源。同时,2MSL的时间能够让与A发出去的连接都失效掉,为新创建连接中不包含旧连接提供保障。
(6)服务器收到确认报文后即释放连接。进入CLOSED状态。
(7)客户端等待2MSL时间后也进入CLODSED状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值