zoukankan      html  css  js  c++  java
  • 如何记忆三次握手

    简介

    相信大家都知道TCP的三次握手, 是的, 面试必问问题之一. 但是基本很难对TCP的三次握手产生有效的记忆.

    参考链接

    https://blog.csdn.net/a19881029/article/details/38091243 使用wireshark进行端口信号的捕捉. 继而对TCP三次握手进行有效的理解

    英文释义

    SYN: synchronize ['sɪŋkrə.naɪz] 同步的意思, SYN=1 引申为请求建立连接.
    seq number: Sequence Number 序列号, 缩写为(seq) 第一次一般使用随机生成的序列号. 这样对方就猜不到你手里的牌面了
    ack number: acknowledgment number: 确认号, 类似于seq, 但是是对方发出来的信号

    image

    其实知道了因为释义, 应该变的不难.

    小规律

    SYN 对应着 ACK
    seq number 对应着 ack number

    Q&A

    Q:为什么三次握手最后一次没有发送SYN=1的信号??
    A:因为SYN是请求建立连接信号. 相当于双选, 你选择公司 公司选择你, 最多发送两个. 总不能你对公司说, 我想去你公司工作, 公司说, 我想录取你, 然后你没有说好而是又说了一遍, 公司能不能要我.

    Q: 为什么要三次握手?
    主要为了防止已失效的连接请求报文段突然又传送到了服务端, 因而产生错误. 如A发出了连接请求, 但因连接请求报文丢失而未收到确认, 于是A再重传了一次连接请求. 后来收到了确认, 建立了连接. 数据传输完毕后, 就释放了连接, A共发出了两个连接请求报文段, 其中第一个丢失, 第二个到了B, 但是第一个丢失的报文段只是在某些网络节点产时间滞留了, 延误到连接释放以后的某个时间才到达B, 此时B误认为A又发出了一次新的连接请求, 于是就向A发出确认请求报文段, 同意建立连接, 不采用三次握手, 只要B发出确认, 就建立新的链接了, 此时A不理睬B的确认且不发送数据, 则B一直等待A发送数据, 浪费了资源.

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    这几个 IntelliJ IDEA 高级调试技巧,用了都说爽!
    SpringBoot:application.properties基本的参数配置
    SpringBoot:搭建第一个Web程序
    PO,VO,DAO,BO,POJO 之间的区别你懂吗?
    这篇文章太懂程序员了,扎心了
    委托和事件
    Log4net 封装用法
    js 在一个DIV前、中、后、插入新DIV
    关于装修
    JS查询class的名称
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14764778.html
Copyright © 2011-2022 走看看