标志位虽然很多,但是如果放到具体场景里来看的话,就很容易理解他们的作用了。
TCP 三次握手
三次握手就是为了在客户端和服务器间建立连接,这个过程并不复杂,但里面有很多细节需要注意。
这张图就是握手的过程,可以看到客户端与服务器之间一共传递了三次消息,这三次握手其实就是两台机器之间互相确认状态,我们来一点一点看。
第一次握手
首先是客户端发起连接,第一个数据包将 SYN 置位(也就是 SYN = 1),表明这个数据包是 SYN 报文段(也被称为段 1)。这一次发送的目的是告诉服务器,自己的初始序列号是 client_isn
,还有一个隐含的信息在图里没有表现出来,那就是告知服务端自己想连接的端口号。除了这些,客户端还会发送一些选项,不过这跟三次握手没多大关系,暂且按下不表。
段 1 里最需要注意的就是这个client_isn
,也就是初始序列号。「RFC07931」指出:
When new connections are created, an initial sequence number