TCP三次握手到底做了哪些事情?

在这里插入图片描述

TCP在三次握手过程中做了什么?

本文只介绍三次握手过程中做了哪些事,至于和握手相关联的问题这里就不展开了。


先来看几张图,我们都知道OSI七层模型、TCP/IP四层模型,它们的对应关系如下:

在这里插入图片描述

以太网帧格式如下:

在这里插入图片描述


看完图之后我们来说说MTU、MSS。

MTU:

最大传输单元(Maximum Transmit Unit),以太网对数据帧长度有个限制,即物理接口(数据链路层)对IP层(网络层)的一个限制,这个限制大小一般是1500Byte。如果IP层有一个数据包要传,若这个数据报长度 <= 1500,则IP层不需要分片,一个数据报即可传出,若这个数据报长度 > 1500,那这个数据报就要分成若片,这样每一片都不大于1500,这些分片的IP Header ID相同。所以MTU是IP层(网络层)的概念。

MSS:

最大报文段长度(Maximum Segment Size),表示TCP层传往另一端的最大块数据长度。表示范围参考上图的以太网帧格式。针对以太网接口来说,MTU = 1500 Byte,则MSS = 1500 - 20(IP Header) - 20(TCP Header) = 1460 Byte。若应用层发送2000Byte数据,则要分两个数据段发送,第一个数据段 = 1460,第二个数据段 = 540。所以MSS是TCP层(传输层)的概念。


说完概念之后,大家看看常见的握手流程:
在这里插入图片描述

至此,看了这么多图以后,总结下三次握手阶段主要是协商确定一些数据,确定的数据如下:

  • Socket:由IP地址和端口号组成。
  • 序列号:用来解决乱序问题等。
  • 窗口大小:用来做流量控制,严格来说是确定双方的窗口放大因子(Window size scaling factor),因为窗口大小在后续的交互中还会变。
  • MSS:最大数据报文长度,防止IP层分片,提升传输效率。

这里针对TCP窗口着重提下两点:

  1. 接收缓存的大小是该连接上所能够通道的最大窗口大小。
  2. 发送缓存 > 接收方响应的窗口 > 已发送字节。

理论说完了,我们再看看握手过程中的实际抓包图

抓包概略图

在这里插入图片描述

【A->B: SYN】

Win:8192,
MSS:1460,
WS:4

A端通知B端我的窗口是8192Byte。

【B->A: SYN + ACK】

Win:29200
MSS:1460
WS:32

B端通知A端我的窗口是29200Byte。

【A->B: ACK】

Win:17520

A端最后确认通知B端我的窗口是17520Byte。

另外有一点,这个窗口在后期的通信交互中是可动态变大变小的。


参考
https://www.jianshu.com/p/c48c61b164e9
https://blog.csdn.net/qq_34827674/article/details/105331617

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值