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

    TCP三次握手(Three-way Handshake)
     
      三次握手指的是建立一个TCP连接时,需要客户端和服务器总共发送3个包。其目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。在socket编程中,客户端执行connect()时,将触发三次握手。下图是三次握手过程:
     
    TCP三次握手过程
     
    第一次握手:
      客户端发送一个SYN包(SYN标志位置1,SYN序号X)到服务器,并进入SYN_SEND状态。
     
    第二次握手:
      服务器收到SYN包,发送ACK+SYN包(SYN标志位置1,ACK标志位置1,ACK序号为X+1,SYN序号Y)到客户端,此时服务器 进入SYN_RECV状态。
     
     
    第三次握手:
      客户端再次发送ACK+SYN包(SYN标志位置0,ACK标志位置1,ACK序号Y+1)。此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
     
      通过三次握手,客户端和服务器端建立起可靠的双工的连接。至于为什么需要进行三次握手才能建立起可靠的双工的连接,我们可以这样理解:
      第一次握手和第二次握手(也可以认为是第一次握手的SYN,第二次的ACK)是为了保证服务器端能够接受到客户端的信息并能够做出正确的应答;第二次握手和第三次握手(也可以认为是第二次握手的SYN,第三次的ACK)是为了保证客户端能够接受到服务器端的信息并能够正确的应答。
     
      附上TCP四次挥手结束连接图:
     
    何为朽木,何为良骥?千里之马焉能以百尺之遥而妄自定论。
  • 相关阅读:
    react.js+axios跨域
    O2O项目之一 环境搭配
    跟scss相关的两个包
    [nodemon] app crashed
    解决node.js链接数据库时出现的报错 --- client does not support authentication
    在Xshell 运行angular 项目时,找不到node-sass模块,安装node-sass模块时,又出现权限问题
    ajax请求数据时,get和post的区别
    web前端如何性能优化提高加载速度
    js数组去重
    前端跨域
  • 原文地址:https://www.cnblogs.com/PursueFreedom/p/TCP.html
Copyright © 2011-2022 走看看