三次握手与四次挥手

 

  • Seq:用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号
  • ACK:为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段
  • SYN:同步序号,为1表示连接请求,用于建立连接和使序列号同步
  • FIN:用于释放连接,为1表示发送方没有数据发送了,关闭本方数据流

三次握手:

1. 第一次握手:客户端给服务器发送一个SYN报文
客户端的发送能力正常
客户端:SYN_Sent                                           服务端:LISTEN
2. 第二次握手:服务端收到SYN报文,回复SYN + ACK报文
服务端接收、发送能力正常、客户端发送正常
客户端:SYN_Sent                                           服务端:SYN_RCVD
3. 第三次握手:客户端收到SYN + ACK报文之后,回应ACK报文
客户端的接收、发送能力正常,服务器的发送、接收能力正常
客户端:establised                                             服务端:establised

半连接队列:服务器处于SYN_RCVD状态,双方还未完全建立连接,服务器会把这种状态下的请求放到半连接队列。完成三次握手的连接所在的队列为全连接队列,如果队列满了可能会发生丢包现象。

四次挥手:

1. 第一次挥手:客户端发送一个FIN报文,报文中包括一个序号
客户端:FIN_WAIT1[等待远程TCP中断请求]                服务端:ESTABLISHED
2. 第二次挥手:服务端收到FIN后,发送ACK报文,序号+1[表明已经收到报文了] 
客户端:FIN_WAIT1[等待远程TCP中断请求]                服务端:CLOSE_WAIT
3. 第三次挥手:发送FIN报文,指定一个序号
客户端:FIN_WAIT2[从远程TCP等待连接中断请求]     服务端:LAST_ACK[等待中断请求的确认]
4. 第四次挥手:发送ACK报文,序号+1
确保服务器收到ACK报文,如果没有收到,服务器会再发送FIN报文给客户端,客户端收到ACK之后就知道之前的ACK发送失败了,并再次发送ACK报文。
客户端:等待2MSL(TIME_WAIT)-->CLOSED                服务端:CLOSED[没有任何连接]     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值