zoukankan      html  css  js  c++  java
  • java网络编程三次握手四次挥手

    第一次握手:client设置syn=1,随机产生一个序列号seq=x,将数据包发送到server。client进入syn_send状态,
    等待server确认。
    第二次握手:server查看client发来的数据包syn=1,得知是client发来的连接请求。server设置syn=1 ACK=1
    ack = x+1 seq = y,并将数据包发送到客户端。server进入syn_rcvd状态。
    第三次握手:client得到server的确认,查看ACK=1 ack=x+1。然后,再给server一个确认,设置ACK=1 ack=y+1.
    server接收client包,查看ACK是否为1,ack是否为y+1,如果正确建立连接。同时进入established.

    第一次挥手:A 设置 FIN=1 seq = x,将数据包发送到B,A进入FIN_WAIT_1状 态。等待B的确认。
    第二次挥手:B 查看FIN,知道A是要释放连接。B设置ACK=1 ack = x+1 ,将确认返回A。B
    进入CLOSE_WAIT。A接收该确认,进入FIN_WAIT_2状态。等待B的连接释放。
    第三次挥手:B 设置 FIN=1 seq = y,将数据包发送到A,B进入LAST_ACK状态。等待A的确认。
    第四次挥手:A 查看FIN,知道B是要释放连接。A设置ACK=1 ack = y+1 ,将确认返回B。A
    进入TIME_WAIT。B接收该确认,进入CLOSED状态。

    三次握手的原因:防止已经失效的报文发送到服务器端。
    握手要3次,挥手要4次原因:连接时,服务器一直处于LISTEN状态,server接收到syn报文后,会将syn和ack同时返回。
    释放连接时,只是一端不在发送报文,但还是可以接收的。另一端可以直接close。也可以等待发送完毕之后,再发送FIN
    报文,所以是将,FIN和ACK发开发送。

  • 相关阅读:
    Android开发-httpclient兼容性问题
    Android开发-新建线程崩溃
    git 通过nginx 无法clone
    再谈git的http服务-权限控制gitweb版(未成功)
    再谈git的http服务-权限控制hooks版
    git push报错:error: RPC failed; result=22, HTTP code = 413
    再谈git的http服务
    Android开发-自动更新
    Android开发-Android Studio使用问题解决
    mac-文本编辑器
  • 原文地址:https://www.cnblogs.com/JLZT1223/p/7360036.html
Copyright © 2011-2022 走看看