一.建立连接
下图展示了正常情形下通过三次握手建立连接的过程。显然B机器是服务端角色,A机器是客户端角色,前者需要在后者发起连接建立请求时先打开某个端口等待数据传输,否则无法正常建立连接。三次握手指的是建立连接的三个步骤:
- A机器发出一个数据包并将SYN置1,表示希望建立连接。这个包中***假设是x。
- B机器收到A机器发过来的数据包后,通过SYN得知这是一个建立连接的请求,于是发送一个响应包并将SYN和ACK标记都置1。假设这个包中的序号是y,而确认序号必须是x+1,表示收到了A发过来的SYN。在TCP中,SYN被当做数据部分的一个字节。
- A收到B的响应后需进行确认,确认包中将ACK置1,并将确认序号设置为y+1,表示收到B的SYN。
这里为什么需要3次握手?它有两个主要目的:信息对等和防止超时。先从信息对等的角度来看,如下表所示,双方只有确定4类信息,才能建立连接。在第2次握手后,从B机器视角看还有两个红色NO信息无法确认。在第3次握手后,B机器才能确认自己的发报能力和对方的收报能力是正常的。