在看tcpdump的手册的时候,突然想起tcp的三次握手,四次挥手;心血来潮,就用tcpdump抓取redis的连接过程。
操作如下:「redis的服务器是host_redis,端口为6379」
1、在redis的服务器,抓取6379及tcp的网络协议包
1[root@test01v /]# tcpdump port 6379 and tcp -X -s 0
2、在客户端使用telnet连接redis
1$ telnet host_redis 6379
2
3 Trying host_redis...
4
5 Connected to host_redis
6
7 Escape character is '^]'.
8
9 ^]
10
11 telnet> quit
tcpdump参数介绍
1port
2
3 指定端口号
4
5tcp
6
7 指定协议为tcp
8
9-X
10
11 以16进制和ASCII码形式显示每个报文
12
13-s
14
15 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节
tcpdump输出介绍
注:「本机服务器为host_local」
102:45:1.622225 IP host_local.55638 > host_redis.6379: Flags [S], seq 1105795559, win 29200, options [mss 1460,sackOK,TS val 43986276 ecr 0,nop,wscale 7], length 0
输出信息
102:45:1.622225是时间
2
3host_local.55638 > 是发送端主机和端口,符号‘ >’ 表明数据的传输方向
4
5host_redis.6379接收端的主机名和端口
6
7Flags [S]TCP包中的标志信息
8
9 [S] 表示这是一个SYN请求
10
11 [S.] 表示这是一个SYN+ACK确认包:
12
13 [.] 表示这是一个ACT确认包, (client)SYN->(server)SYN->(client)ACT 就是3次握手过程
14
15 [P] 表示这个是一个数据推送,可以是从服务器端向客户端推送,也可以从客户端向服务器端推
16
17 [F] 表示这是一个FIN包,是关闭连接操作,client/server都有可能发起
18
19 [R] 表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理。可以理解为是强制切断连接
20
21seq 1105795559 序列号
22
23win 29200 指滑动窗口的大小
24
25option
26
27length 0 指数据包的大小为0
tcp三次握手,四次挥手图示:

三次握手流程
client向server发送SYN
注:「seq=x=2440373000」
123:32:26.882139 IP host_local.55638 > host_redis.6379: Flags [SEW], seq 2440373000, win 65535, options [mss 1366,nop,wscale 5,nop,nop,TS val 776806643 ecr 0,sackOK,eol], length 0
server向client发送一个SYN,ACK包
注:「ack=x+1=2440373001;seq=y=3103132894」
123:32:26.882181 IP host_redis.6379 > host_local.55638: Flags [S.E], seq 3103132894, ack 2440373001, win 14480, options [mss 1460,sackOK,TS val 3145177219 ecr 776806643,nop,wscale 7], length 0
client向server响应一个ACK
123:32:26.922149 IP host_local.55638 > host_redis.6379: Flags [.], ack 1, win 4104, options [nop,nop,TS val 776806681 ecr 3145177219], length 0
四次挥手
client向server发送FIN结束命令
123:32:31.490726 IP host_local.55638 > host_redis.6379: Flags [F.], seq 1, ack 1, win 4104, options [nop,nop,TS val 776811227 ecr 3145177219], length 0
server向client发送响应信息,
注:表示收到client的结束信号,即将关闭连接
123:32:31.490893 IP host_redis.6379 > host_local.55638: Flags [.], ack 2, win 114, options [nop,nop,TS val 3145181828 ecr 776811227], length 0
server关闭连接,并发送FIN给client
123:32:31.490929 IP host_redis.6379 > host_local.55638: Flags [F.], seq 1, ack 2, win 114, options [nop,nop,TS val 3145181828 ecr 776811227], length 0
client发送ACK给server进行确认
123:32:31.533767 IP host_local.55638 > host_redis.6379: Flags [.], ack 2, win 4104, options [nop,nop,TS val 776811267 ecr 3145181828], length 0