主动发起建立连接的叫做客户,被动等待建立连接的应用进程叫做服务器。服务器首先要运行一段程序,
做好等待建立的准备,这时客户就可以来连接了。客户向服务器发送第一个报文段,这个报文段只有首部,没有没有数据部分。
SYN标志位要设为1ACK置为0,,表明这是用于建立连接的报文段,
客户还要选择一个初始序号x 虽然没有数据,但是仍然要选择序号。 服务器收到这个报文段后,
若同意建立连接,就发送第二个报文段,仍然只有首部,没有数据部分。SYN置为1 && ACK置为1,
表示这也是一个用于建立连接的报文段,确认号是x+1,表示希望再接收序号为x+1 及以后的报文段;
服务器发送时,当然也要选择一个序号:y。
客户再发送第三个报文段,仍然只有首部,没有数据部分,这时SYN置为0,ACK为1,
表示对第二个报文段的确认,确认号为y+1,表示希望再接收序号为y+1的报文段。
虽然没有数据,但是序号要置为x+1。 此时连接已然建立,可以收发数据了。
需要注意的是初始序号的选择:应该随机的选择,不是0或者固定值,或有规律可循,原因有二:
1)连接建立后极短时间内拆除,并且立即用同一端口号又建立了另一个连接,
在这种特殊的情况下,两次连接的初始序号如果相同,接收方可能会收到重复序号的报文段。
2)黑客的某些攻击需要知道TCP的初始序号,初始序号如果有规律; 黑客:小可爱,嘿嘿嘿~。