• TCP/IP的连接与断开


    自己理解的TCP/IP的连接与断开(也就是之前都提到的三次握手、四次挥手
     
    客户端与服务端都有发送并接收消息的能力
     
    先说人话
    Client ---> Server 客户端告诉服务端:我有能力发送数据
    Client <--- Server 服务端告诉客户端:我不光有能力发送数据,还有能力接收到你的数据
    Client ---> Server 客户端告诉服务端:我刚才给你发送数据你是知道的,现在我也告诉你,我也有能力接收到你的数据
    连接成功
     
    再说鸟语
    第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志被置为1。另外,客户机会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗掉一个序号)
    第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1,并且服务器随机产生起始序号seq=y(确认报文不携 带数据,但也要消耗掉一个序号)。确认报文段同样不包含应用层数据。
    第三步:当客户机收到确认报文后,还要向服务器给出确认,并且也要给连接分配缓存和变量。这个报文段的ACK标志被置为1,序号字段为x+1,确认号字段ack=y+1。该报文段可以携带数据,如果不携带数据则不消耗序号。在成功进行了以上三步之后,TCP连接就建立了,接下来就可以传送应用层数据了。
     
    先说人话
    Client ---> Server 客户端告诉服务端:我要停止发送数据了啊,我这边没数据了。
    Client <--- Server 服务端告诉服务端:我知道了,但是你发送的数据你还能接收到哈。
    Client <--- Server 服务端告诉服务端:我这边也没数据了,我也停止给你发送数据了啊。
    Client ---> Server 客户端告诉服务端:OK,我知道了,我不接受你发的数据了啊,挂了。
    连接断开
     
    再说鸟语
    第一步:客户机打算关闭连接,就向其TCP发送一个连接释放报文段,并停止再发送数据,主动关闭TCP连接,该报文段的FIN标志位被置1,seq=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗掉一个序号)。TCP是全双工的,即可以想象成是一条TCP连接上有两条数据通路。当发送FIN报文时,发送FIN的一端就不能再发送数据,也就是关闭了其中一条数据通路,但对方还可以发送数据。
    第二步:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
    第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。
    第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。此时TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到连接关闭状态
     
  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/12965590.html
Copyright © 2020-2023  润新知