zoukankan      html  css  js  c++  java
  • TCP三次握手四次挥手

    TCP三次握手
    所谓握手,也就是建立连接,三次过程。
    三次握手旨在连接到服务端的指定端口,进行通信。建立一个TCP连接,需要向客户端和服务端发送三个包。
    其中包含同步序列号和确认号以及TCP窗口大小的信息交换。一般触发握手在socket中都是connect()函数触发的

    第一次握手:
    客户端发送TCP请求, (SYN标记位置1个包,SYN=1,ACK=0 也就是带有SYN标记的TCP包,初始序列号为X,保存在包头的序列号中). 表示客户端需要建立一个TCP连接,这是握手中的第一不,发送请求。

    第二次握手:
    服务端收到带有SYN标记的TCP包,发送确认包(带有ACK和SYN的数据包,SYN=1,ACK=1,序列号为y是服务端的)此时服务端询问客户端是否准备好数据传输,此时服务器进入SYN_RECV状态。。

    第三次握手
    客户端接收到服务端的数据包(ACK+SYN数据包)向服务端发送一个(序列号x+1,ACK=y+1)的数据包,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。


    TCP四次挥手
    TCP连接是双工的,所以每个方向都是单独关闭。当其中一方完成数据传输后可以发送FIN结束。接收到了FIN只是意味着没有这个方向的数据流了
    收到FIN的TCP连接可以发送数据,第一个关闭方执行主动动作,另一个执行被动动作。


    第一次挥手:
    客户端发送FIN请求,说我要关闭TCP连接了,不再传输数据了。 (FIN=1,序列号=n)

    第二次挥手:
    服务端收到这个请求,并且响应此请求,发送一个ACK包,确认ack为收到的序号+1。

    第三次挥手:
    服务端关闭TCP连接,向客户端发送FIN消息。

    第四次挥手:
    客户端接收到消息,发送ACK包确认,并将确认序号seq设置为收到序号+1。

    -----------------------------------------------------------------
    ----------------------------------------------------------------
    如果觉得这篇文章对您有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
    本文版权归作者和博客园共有,欢迎转载哦;如博文中有任何错误,欢迎博客们留言或联系本人,本人尽快修改。
    谢谢大家支持! ! !
    ------------------------------------------------------------------
  • 相关阅读:
    【狼】狼的unity3d脚本学习
    [转]关于Unity中文件读取
    【狼】unity3d 安卓播放视频替代视频纹理
    SpringMVC异常处理
    springboot 热启动
    旅游网dao层
    MyBatisPlus快速入门
    旅游网dao层
    MySQL8 修改密码验证插件
    Zookeeper环境搭建
  • 原文地址:https://www.cnblogs.com/luoyan01/p/9733598.html
Copyright © 2011-2022 走看看