三次握手
三次握手过程描述
第一次握手: 客户端发送syn标志位和seq num,向服务器申请建立连接,客户端状态由closed变为syn_send
第二次握手: 服务端返回 syn和ack标志位,ack num以及seq num,确认第一次握手的报文段,返回ack num=seq num(第一次握手发送的)+1,同意建立连接,服务器状态由listen变为syn_received
第三次握手: 发送确认报文段,返回ack以及ack num=seq num(第二次握手发送的)+1,客户端状态变为:established(完成连接)
最后: 服务器收到确认报文段,服务器状态由syn_received变为established(完成连接)
三次握手原因
(1) TCP连接的特性决定,一次RT(往返)完成一次TCP的动作。
即客户端一次请求携带的seq num必须得到服务端的ack num才会完成。如果没有返回确认报文段,由于重发机制,定时器经过了一次RTO,客户端就会重发报文。那为什么客户端最后一次发送之后,没有等待服务端发回ack报文段? 这是因为服务端第二次发送的报文段里 包含ack以及请求syc报文,相当于把确认报文和请求报文合并了,所以最后客户端