简介
相信大家都知道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发送数据, 浪费了资源.