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

    三次握手

    TCP是通过三次握手来连接的。

    第一次握手

    当客户端向服务器发送连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为m,等待服务器确认,这时客户端的状态为SYN_SENT

    第二次握手

    当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为m+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这个我们设SYN为n。这时服务器的状态为SYN_RECV
    一句话,服务器端发送SYNACK两个包。

    第三次握手

    客户端收到服务器发送的SYNACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我现在给您发个确认过去,然后我们即能合体了”,这里的ACK为n+1,发送完毕后,客户端和服务器端的状态为ESTABLISH,即TCP连接成功。

    三次握手中,客户端和服务器端都发送两个包ACKSYN,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

    三次握手示意图

    kqesy.png

    四次挥手

    当客户端和服务器端要断开连接时,需要四次握手,这里称为四次挥手。
    断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。

    第一次挥手

    A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是finish的意思。

    第二次挥手

    B端收到A端发送的FIN后,B端可能还有数据没有传输完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发送的断开请求我收到了,但我现在还有数据未传完,请稍等”。

    第三次挥手

    当B端的数据发送完成,即B端可以断开连接了,此时B端向A端发送FIN序号,意思是可以断开连接了。

    第四次挥手

    A端收到B端发送的FIN后,会向B端发送确认ACK,然后经历两个MSL时长后断开连接。

    MSL是Maximum Segment Lifetime,即最大报文生存时间,2个MSL为报文段发送和接收的最长时间

    四次挥手示意图

    kqUAX.md.png

  • 相关阅读:
    NodeJs 实现 WebSocket 即时通讯(版本二)
    (JavaScript) 时间转为几天前、几小时前、几分钟前
    (IDEA) 从数据库快速生成Spring Data JPA实体类
    (IDEA) 设置编码统一为UTF-8
    ElasticSearch 中文分词插件ik 的使用
    Logstash 安装及简单实用(同步MySql数据到Elasticsearch)(Windows)
    Docker在Linux上 基本使用
    vue设置页面标题
    HTML5实战与剖析之字符集属性(charset和defaultCharset)
    asp.net传多个值到其它页面的方法
  • 原文地址:https://www.cnblogs.com/sandysun/p/8866630.html
Copyright © 2011-2022 走看看