TCP协议的三次握手,与四次挥手

TCP协议:面向连接
三次握手
三次握手图像标识如下:在这里插入图片描述
连接建立过程:
1)server(服务端)先创建套接字,再绑定地址信息,并且开始监听,看是否有新的连接到来 此时这个套接字的状态为—LISTEN
2) client(客户端) 创建套接字,绑定地址信息,然后向服务端发起请求
3)连接建立的过程(三次握手):
client端向server端发送SYN(6位保留位中)建立连接请求信号(第一次握手)
此时服务端收到信号,然后创建一个新的套接字,用该套接字发送ACK+SYN 表示确认 并请求建立连接,发送到client端,之后该套接字进入SYN_RCVD(已收到)状态(第二次握手),注意的是最先的监听套接字,状态不要变;
当client端收到server端的信号的时候进入ESTABLISHED就绪状态并向服务端回复ACK(第三次握手)
三次握手后就可相互通信了

TCP四次挥手:
在这里插入图片描述
当数据传输完后:如果客户端要断开连接则会发送一个FIN(断开连接)包 ,之后进入FIN_WALT_1的状态;(第一次挥手)
当rerver收到之后会像客户端发送一个ACK(正确命令应答)(第二次挥手),之后resever进入一个CLOSE_WAIT(服务器准备关闭连接),再处理完之前的数据之后再向服务端发送FIN(第三次挥手),之后进入LAST_ACK状态(确认客户端收是否收到FIN)
在cilent端收到ACK后进入FIN_WAIT2状态。在等到客服端发来的FIN后进入TIME_WAIT状态并向服务端发送ACK(第四次挥手),服务器在收到该ACK后会关闭该套接字然后释放所有资源,而客户端需要等待2MS后释放资源(两个报文的最大生存周期)。

cilent端的状态变化:
[CLOSED -> SYN_SENT] 客户端调用connect, 发送同步报文段;
[SYN_SENT -> ESTABLISHED] connect调用成功, 则进入ESTABLISHED状态, 开始读写数据; [ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时, 向服务器发送结束报文段, 同时进入 FIN_WAIT_1;
[FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认, 则进入FIN_WAIT_2, 开始等待服 务器的结束报文段;
[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出LAST_ACK;
[TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life, 报文大生存时间)的时间, 才会 进入CLOSED状态.

sereve端状态变化:
[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态, 等待客户端连接;
[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段), 就将该连接放入内核等待队列中, 并向客户端 发送SYN确认报文.
[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文, 就进入ESTABLISHED状态, 可以进行 读写数据了.
[ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close), 服务器会收到结束报文段, 服务器 返回确认报文段并进入CLOSE_WAIT;
[CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前的数据); 当 服务器真正调用close关闭连接时, 会向客户端发送FIN, 此时服务器进入LAST_ACK状态, 等待后一个 ACK到来(这个ACK是客户端确认收到了FIN)
[LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK, 彻底关闭连接.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值