tcp连接的三次握手
- TCP标记
- 大小:占6位,每位各有不同意义
- URG:Urgent 紧急位,URG = 1,表示紧急数据
- ACK:Acknowledgement 确认位,ACK = 1,确认号才生效
- PSH:Push 推送位,PSH = 1,尽快的把数据交付给应用层
- RST:Reset 重置位,RST = 1,重新建立连接
- SYN:Synchronization 同步位,SYN = 1 表示连接请求报文
- FIN:Finish 终止位,FIN = 1 表示释放连接
- 大小:占6位,每位各有不同意义
连接的建立
- 三次握手
- 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中
- 标志位为 SYN,表示请求建立连接;
- 序号为 seq = x(x 一般取随机数);
- 随后客户端进入 SYN-SENT 阶段(同步已发送)。
- 服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,其中:
- 标志位为 SYN 和 ACK,表示确认客户端的报文 seq 序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
- 序号为 seq = y;
- 确认号为 ack = x + 1,表示收到客户端的序号 seq 并将其值加 1 作为自己确认号 ack 的值,随后服务器端进入 SYNC-RCVD 阶段(同步已接收)。
- 客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。其中:
- 标志位为 ACK,表示确认收到服务器端同意连接的信号;
- 序号为 seq = x + 1,表示收到服务器端的确认号 ack,并将其值作为自己的序号值;
- 确认号为 ack= y + 1,表示收到服务器端序号 seq,并将其值加 1 作为自己的确认号 ack 的值。
- 随后客户端进入 ESTABLISHED(建立连接)。
- 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中
为什么发送方要发出第三个确认报文呢
-
三次握手主要是避免已经失效的连接请求报文传送到对方,引起错误