
1 连接过程
- 第一步:服务器端创建传输控制块(TCB),准备接受客服端的连接请求
- 第二步:服务器端进程进入**listen(收听)**状态,等待客服端的连接请求
- 第三步:客服端创建传输控制块(TCB)
- 第四步:客服端发送请求连接的数据包(数据包SYN控制位位1,seq为x,x为选择的初始序列号。SYN=1的数据包不携带任何数据,但是需要消耗一个序列号),客服端进程进入**syn-sent(同步已发送)**状态。
- 第五步:服务器端接收到请求数据包后,如何同意就发送一个统一数据包(确认数据包SYN=1,ACK=1,seq=y,ack=x+1。y为服务器端选择的序列号。次数据包不可携带数据,同样消耗掉一个序列号),服务器端进程进入**sys-rcvd(同步收到)**状态。
- 第六步:客服端收到服务器端的数据包后向服务器端发送确定数据包(ACK=1,ack=y+1,seq=x+1,ACK数据包可以携带数据,如果不携带数据则不消耗序列号),客服端进程进入established(已经连接状态)。
- 第七步:服务器端收到客服端的确认后进程进入established(已经连接状态)。
服务器端给客服端发送的报文可以拆成2个报文,先发一个确认报文(ACK=1,ack=x+1),然后再发一个同步报文(SYN=1,seq=y)。这样就变成了四次握手,但是效果和三次是一样的。
2 参数说明
tcp头部
- (1)确认ACK,ACK=1时确认字段才有效,ACK=0时确认字段无效。
- (2)同步SYN,SYN=1并且SYN=0,代表这是一个连接请求的报文段;SYN=1并且ACK=1,代表是同意连接的报文段。
- (3)序号seq,代表本报文段数据部分第一个字节的序号。
- (4)确认号ack,代表期望收到对方下一个报文的第一个数据字节的序号。
3 抓包分析
本机ip:106.91.27.118
目标ip:119.23.75.53
三次握手
第一次握手
第二次握手
第三次握手