HTTP 的三次握手 与 四次挥手

首先介绍一下位码:

      位码就是tcp标识位,有6种

  •     SYN(synchronous) 建立联机
  •     ACK(acknowledgement) 确认
  •     PSH(push) 传送
  •     FIN(finish) 结束
  •     RST(reset) 重置
  •     URG(urgent) 紧急

TCP三次握手: 

      简单理解: 我要连接你,你同意 ,我在连接你(成功)

详细解释:

   c端  :客户端  ,s端: 服务端

第一次握手:c端向客户端发送SYN数据包(SYN =1,序列号 = x),c端进入 SYN_SENT(已发送状态),等待服务器的确认

第二次握手:s端收到SYN数据包并进行确认(SYN =1,ACK number = 序列号 +1,ACK =1 ,序列号 = y),在发送 ACK+SY到     c  端,s端进入 SYN_RCVD状态  

第三次握手:c端收到 ACK+SYN,如果ACK number = x+1,将ACKnumber 变成 y+1,ACK =1 向s端发送ACK数据包,c端和s                        端都进入ESTABLISHED(已连接)状态。

为什么要三次握手:

     为了方式已经失效的连接请举起报文突然又传到服务端,产生错误。

     解析:报文段已经发送,在摸个网络节点发生滞留,发哦值连接释放,释放后报文达到另一端。

     例如:c端发送SYN报文给 s端,连接被释放后,s端收到了 报文并误认为这事c端的新连接,给c端发送 SYN+ACK,这时无法得到c端的回应,应为连接已经无效了

 

TCP四次挥手:

     简单理解:我要关闭,你知道我要关闭,你先关闭我在关闭

      A 是 客户端  B 是服务端

     FIN_WAIT_1:A 发起主动关闭连接的状态(很难看到,因为发起关闭连接后,另一端回马上同意)

     FIN_WAIT_2:B端同意关闭,但是还有一些数据要给A,A不能马上关闭,半连接状态

     TIME_WAIT:A等2MSL后就可以关闭了(如FIN_WAIT_1时,就收到了FIN和ACK数据包则直接进入这个状态)

     为什么要等2MSL,因为无法保证最后一次ACK数据包是否被对方收到,为了确保可靠性 

     2MSL:报文最大生存时间

     CLOSED:2MSL后进入关闭状态 

第一次挥手:

     A给B发送FIN报文(序列号 = x) ,A进入FIN_WAIT_1状态,表示A没有数据返回给B了。

第二次挥手:

     B收到FIN报文后,给A返回一个ACK(ACK number = x +1 ) A进入     FIN_WAIT_2 状态 B同意A关闭请求

第三次挥手

    B向A发送FIN (序列号 = y),请求关闭连接,B进入LASK_ACK状态

第四次挥手

    A收到B发送的FIN报文后 ,给B返回ACK(ACK = y +1 ),A进入TIME_WAIT状态,B接受到ACK之后关闭连接,A在2MSL后依然没有回复,证明B端已经关闭,A端可以关闭

为什么TCP要四次挥手:

    TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

   TCP是全双工模式,主机1请求关闭连接,不再返送数据,但是可以接受主机2的数据,主机2不再发送数据了。才算关闭,这样减小了丢失数据的风险。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值