1. TCP报文段的首部格式
说明:
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接
2. tcp连接时的三次握手和断开时的4次挥手整体过程
2.1 tcp三次握手具体过程
1)首先由Client发出请求连接即 SYN=1,声明自己的序号是 seq=x(我可以给你发数据吗?)
2)然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1(可以)
3)最后Client 再进行一次确认,设置 seq=x+1, ack=y+1(好的)
注:seq 序列号范围:2^32 -1 到最大值,再从0开始
seq 序列号作用:server端依据这个序列号来组数据
2.2 使用tcpdump抓包查看tcp三次握手过程
参数说明:
-c 指定包个数
-n IP、端口用数字方式显示
port 指定端口
1)192.168.1.24机器建立ssh连接
ssh root@192.168.1.124
说明:ssh也属于tcp连接,等待抓取数据包过程中,另一台服务器ssh登录该服务器,无需输密码,即可完成3次握手
2)192.168.1.123机器
抓包 tcpdump port 22 -c 3 -n
注:Flags [S] 中的 S 表示为SYN包为1
client主机返回ACK,包序号为ack=1 ,这是相对序号,如果需要看绝对序号,可以在tcpdump命令中加-S
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142123.htm