拿图举例:图上是简单的一个抓包请求(请求我服务器的一个网页):
第一次握手:建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
//x 属于序列号,当主机开启一个TCP会话时,他的初始序列号是随机的,可能是0和4,294,967,295之间的任意值;
// 我的第一次请求客户端开启TCp会话生成的序列号是1887825286
第二次握手:
当服务端收到来自客户端请求连接的报文后,如果同意链接则会向客户端发送一个应答,
即SYN+ACK的包.这个包里面的ack的值等于客户端传过来的序列号+1:即ack=x+1;
同时自己也会初始化一个序列号为发送到客户端
//所以这里的ack = 客户端传来的序列号 (1887825286 )+1 = 1887825287
//我这里服务端生成的序列号是 1163132607
第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
此时向服务端发送一个ACK报文:sql是还是1887825287 ;ACK为第二次握手 服务端初始化的序列号+1: 为1163132608
三次握手结束后服务器返回返回包信息