先看看TCP报文的结构:
TCP报文结构

TCP数据报结构

下面这几个缩写需要重点了解
Seq:序列号,用来标识数据包;
Ack:确认号,表示确认;
SYN:建立新连接的标识;
FIN:断开连接的标识。

三次握手过程

tcp三次握手
1.当客户端请求建立连接后,TCP协议会设置SYN标志位和Seq序号。向服务器端发送数据包,然后进入了SYN-SEND状态。
2.服务器端收到该数据包后,检测到SYN标志位,同时会设置SYN和ACK标志位,返回数据包给客户端,之后进入SYN-RECV状态。
3.客户端收到确认包后,会检测ACK标志位的值,如果正确,客户端进入ESTABLISED状态,连接建立成功。
4.服务器端收确认包后,检测ACK标志位,如果正确,服务器也进入ESTABLISED状态,至此,双向连接建立成功。
经过上面的三次握手,双向连接建立成功之后,就可以开始发送数据了。为了保证数据的准确性,Seq和Ack需要约定好:
第一次消息发送时Seq为系统生成;
Ack号 = Seq号 + 传递的字节数 + 1
而之后发送的Seq号与接收到的Ack数值相同

为什么握手需要三次?

以上图为例,假如服务端最后没有收到Ack确认包,就无法知道客户端是否建立连接成功,这样服务端将拒收任何来自客户端的消息。

超时重传

假如在一定时间内发送方没有收到目标机器传回的确认包,那么就会启动超时重传机制,重传的次数一般为3次,也可自定义。

标签: TCP, TCP三次握手

添加新评论