TCP 的三次握手,四次挥手和重要的细节—干货满满,建议细读( 三 )

窗口大小是一个 16 位无符号数 , 也就是说窗口被限制在了 65535 字节 , 也就限制了 TCP 的吞吐量性能 , 这对一些高速以及高延迟的网络不太友好(可以想想为什么) 。 所幸 TCP 额外提供了窗口缩放(Window Scale)选项 , 允许对这个值进行缩放 。

下面是 8 个标志位的含义 , 有的协议比较旧 , 可能没有前两个标志位:

标志位虽然很多 , 但是如果放到具体场景里来看的话 , 就很容易理解他们的作用了 。

TCP 三次握手

三次握手就是为了在客户端和服务器间建立连接 , 这个过程并不复杂 , 但里面有很多细节需要注意 。

这张图就是握手的过程 , 可以看到客户端与服务器之间一共传递了三次消息 , 这三次握手其实就是两台机器之间互相确认状态 , 我们来一点一点看 。

第一次握手

首先是客户端发起连接 , 第一个数据包将 SYN 置位(也就是 SYN = 1) , 表明这个数据包是 SYN 报文段(也被称为段 1) 。 这一次发送的目的是告诉服务器 , 自己的初始序列号是 client_isn  , 还有一个隐含的信息在图里没有表现出来 , 那就是告知服务端自己想连接的端口号 。 除了这些 , 客户端还会发送一些选项 , 不过这跟三次握手没多大关系 , 暂且按下不表 。

推荐阅读