使用tcpdump观察tcp的三次握手,四次挥手,以及http的keep-alive机制

测试方法:

服务器使用自己写的,架设在阿里云服务器上。

打开两个终端,分别运行

cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcp

cwd@cwd:~$ sudo tcpdump src 116.62.35.197 and tcp

测试一:

使用postman发送有keep-alive标志的get请求一次,观察报文情况。

测试结果:

客户端发向服务器报文:

cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlx08beac178ecb, link-type EN10MB (Ethernet), capture size 262144 bytes
10:40:16.033775 IP cwd.42002 > 116.62.35.197.1316: Flags [S], seq 163528420, win 64240, options [mss 1460,sackOK,TS val 671676829 ecr 0,nop,wscale 7], length 0
10:40:16.064634 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 463238398, win 502, options [nop,nop,TS val 671676860 ecr 666326916], length 0
10:40:16.064791 IP cwd.42002 > 116.62.35.197.1316: Flags [P.], seq 0:205, ack 1, win 502, options [nop,nop,TS val 671676860 ecr 666326916], length 205
10:40:16.102490 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 1379, win 501, options [nop,nop,TS val 671676898 ecr 666326948], length 0
10:40:16.104605 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 2757, win 501, options [nop,nop,TS val 671676900 ecr 666326948], length 0
10:40:16.119269 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 4135, win 501, options [nop,nop,TS val 671676914 ecr 666326948], length 0
10:40:16.119355 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 5513, win 496, options [nop,nop,TS val 671676914 ecr 666326948], length 0
10:40:16.121233 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 6891, win 501, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121297 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 8269, win 496, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121333 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 9647, win 488, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121387 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 11025, win 480, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.121450 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 12403, win 486, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.121491 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 13781, win 478, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.134047 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 15159, win 501, options [nop,nop,TS val 671676929 ecr 666326985], length 0
10:40:16.136276 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 16537, win 501, options [nop,nop,TS val 671676931 ecr 666326987], length 0
10:40:16.151144 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 17915, win 501, options [nop,nop,TS val 671676946 ecr 666327002], length 0
10:40:16.159700 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 19293, win 501, options [nop,nop,TS val 671676955 ecr 666327004], length 0
10:40:16.161791 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 20671, win 501, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.161875 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 22049, win 496, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.161992 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 27561, win 501, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.167504 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 30317, win 501, options [nop,nop,TS val 671676963 ecr 666327016], length 0
10:40:16.192847 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 33073, win 501, options [nop,nop,TS val 671676988 ecr 666327034], length 0
10:40:16.200573 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 35829, win 501, options [nop,nop,TS val 671676996 ecr 666327044], length 0
10:40:16.200678 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671676996 ecr 666327045], length 0
10:40:17.214774 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671678010 ecr 666327045], length 0
10:40:18.246541 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671679042 ecr 666328097], length 0
**************************************************省略很多一样的报文****************************************************************
10:41:14.014789 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671734810 ecr 666383865], length 0
10:41:15.046784 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671735842 ecr 666384897], length 0
10:41:16.078756 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671736874 ecr 666385929], length 0
10:41:16.156591 IP cwd.42002 > 116.62.35.197.1316: Flags [F.], seq 205, ack 38124, win 501, options [nop,nop,TS val 671736952 ecr 666387004], length 0

服务器发向客户端报文:

cwd@cwd:~$ sudo tcpdump src 116.62.35.197 and tcp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlx08beac178ecb, link-type EN10MB (Ethernet), capture size 262144 bytes
10:40:16.064606 IP 116.62.35.197.1316 > cwd.42002: Flags [S.], seq 463238397, ack 163528421, win 65160, options [mss 1390,sackOK,TS val 666326916 ecr 671676829,nop,wscale 7], length 0
10:40:16.098902 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666326947 ecr 671676860], length 0
10:40:16.102441 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 1:1379, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.104577 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 1379:2757, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.119222 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 2757:4135, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.119332 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 4135:5513, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121199 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 5513:6891, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121284 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 6891:8269, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121314 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 8269:9647, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121348 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 9647:11025, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121410 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 11025:12403, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121421 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 12403:13781, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.134001 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 13781:15159, ack 206, win 508, options [nop,nop,TS val 666326985 ecr 671676898], length 1378
10:40:16.136244 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 15159:16537, ack 206, win 508, options [nop,nop,TS val 666326987 ecr 671676900], length 1378
10:40:16.151100 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 16537:17915, ack 206, win 508, options [nop,nop,TS val 666327002 ecr 671676914], length 1378
10:40:16.159649 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 17915:19293, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161757 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 19293:20671, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161861 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 20671:22049, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161892 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 22049:23427, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161913 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 23427:24805, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.161919 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 24805:26183, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.161923 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 26183:27561, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.167181 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 27561:28939, ack 206, win 508, options [nop,nop,TS val 666327016 ecr 671676929], length 1378
10:40:16.167471 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 28939:30317, ack 206, win 508, options [nop,nop,TS val 666327019 ecr 671676931], length 1378
10:40:16.185391 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 30317:31695, ack 206, win 508, options [nop,nop,TS val 666327034 ecr 671676946], length 1378
10:40:16.192822 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 31695:33073, ack 206, win 508, options [nop,nop,TS val 666327042 ecr 671676955], length 1378
10:40:16.193108 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 33073:34451, ack 206, win 508, options [nop,nop,TS val 666327044 ecr 671676957], length 1378
10:40:16.200554 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 34451:35829, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 1378
10:40:16.200593 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 35829:37207, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 1378
10:40:16.200604 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 37207:38123, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 916
10:40:17.245177 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666328097 ecr 671676996], length 0
10:40:18.277847 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666329129 ecr 671676996], length 0
10:40:19.312514 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666330164 ecr 671676996], length 0
**************************************************省略很多一样的报文****************************************************************
10:41:14.045376 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666384897 ecr 671676996], length 0
10:41:15.078391 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666385929 ecr 671676996], length 0
10:41:16.109577 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666386961 ecr 671676996], length 0
10:41:16.155710 IP 116.62.35.197.1316 > cwd.42002: Flags [F.], seq 38123, ack 206, win 508, options [nop,nop,TS val 666387004 ecr 671676996], length 0
10:41:16.187787 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 207, win 508, options [nop,nop,TS val 666387038 ecr 671736952], length 0

三次握手

#客户端发向服务器
10:40:16.033775 IP cwd.42002 > 116.62.35.197.1316: Flags [S], seq 163528420, win 64240, options [mss 1460,sackOK,TS val 671676829 ecr 0,nop,wscale 7], length 0
10:40:16.064634 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 463238398, win 502, options [nop,nop,TS val 671676860 ecr 666326916], length 0
#服务器发向客户端
10:40:16.064606 IP 116.62.35.197.1316 > cwd.42002: Flags [S.], seq 463238397, ack 163528421, win 65160, options [mss 1390,sackOK,TS val 666326916 ecr 671676829,nop,wscale 7], length 0
10:40:16.098902 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666326947 ecr 671676860], length 0
  1. Client 将标志位 SYN 置为 1(Flags[S]表示SYN置位), 随机产生一个值 seq=J=163528420, 并将该数据包发送给 Server, Client进入 SYN_SENT 状态, 等待 Server 确认。
  2. Server 收到数据包后由标志位 SYN=1 知道 Client 请求建立连接, Server 将标志位 SYN和 ACK 都置为 1, ack=J+1=163528421, 随机产生一个值 seq=K=463238397, 并将该数据包发送给 Client 以确认连接请求, Server 进入 SYN_RCVD 状态。
  3. Client 收到确认后, 检查 ack 是否为 J+1, ACK 是否为 1, 如果正确则将标志位 ACK 置为1, ack=K+1=463238398, 并将该数据包发送给 Server, Server 检查 ack 是否为 K+1, ACK 是否为 1, 如果正确则连接建立成功, Client 和 Server 进入 ESTABLISHED 状态, 完成三次握手, 随后 Client 与Server 之间可以开始传输数据了。
  4. 观察之后的就是服务端发送数据过来了。

传输数据

每一次客户端收到服务器哦给他发的数据,会回一个ack,ack号就是受到的seq的头。

#客户端发向服务器
10:40:16.064791 IP cwd.42002 > 116.62.35.197.1316: Flags [P.], seq 0:205, ack 1, win 502, options [nop,nop,TS val 671676860 ecr 666326916], length 205
10:40:16.102490 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 1379, win 501, options [nop,nop,TS val 671676898 ecr 666326948], length 0
10:40:16.104605 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 2757, win 501, options [nop,nop,TS val 671676900 ecr 666326948], length 0
10:40:16.119269 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 4135, win 501, options [nop,nop,TS val 671676914 ecr 666326948], length 0
10:40:16.119355 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 5513, win 496, options [nop,nop,TS val 671676914 ecr 666326948], length 0
10:40:16.121233 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 6891, win 501, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121297 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 8269, win 496, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121333 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 9647, win 488, options [nop,nop,TS val 671676916 ecr 666326948], length 0
10:40:16.121387 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 11025, win 480, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.121450 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 12403, win 486, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.121491 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 13781, win 478, options [nop,nop,TS val 671676917 ecr 666326948], length 0
10:40:16.134047 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 15159, win 501, options [nop,nop,TS val 671676929 ecr 666326985], length 0
10:40:16.136276 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 16537, win 501, options [nop,nop,TS val 671676931 ecr 666326987], length 0
10:40:16.151144 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 17915, win 501, options [nop,nop,TS val 671676946 ecr 666327002], length 0
10:40:16.159700 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 19293, win 501, options [nop,nop,TS val 671676955 ecr 666327004], length 0
10:40:16.161791 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 20671, win 501, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.161875 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 22049, win 496, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.161992 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 27561, win 501, options [nop,nop,TS val 671676957 ecr 666327004], length 0
10:40:16.167504 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 30317, win 501, options [nop,nop,TS val 671676963 ecr 666327016], length 0
10:40:16.192847 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 33073, win 501, options [nop,nop,TS val 671676988 ecr 666327034], length 0
10:40:16.200573 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 35829, win 501, options [nop,nop,TS val 671676996 ecr 666327044], length 0
#服务器发向客户端
10:40:16.098902 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666326947 ecr 671676860], length 0
10:40:16.102441 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 1:1379, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.104577 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 1379:2757, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.119222 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 2757:4135, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.119332 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 4135:5513, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121199 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 5513:6891, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121284 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 6891:8269, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121314 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 8269:9647, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121348 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 9647:11025, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121410 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 11025:12403, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.121421 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 12403:13781, ack 206, win 508, options [nop,nop,TS val 666326948 ecr 671676860], length 1378
10:40:16.134001 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 13781:15159, ack 206, win 508, options [nop,nop,TS val 666326985 ecr 671676898], length 1378
10:40:16.136244 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 15159:16537, ack 206, win 508, options [nop,nop,TS val 666326987 ecr 671676900], length 1378
10:40:16.151100 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 16537:17915, ack 206, win 508, options [nop,nop,TS val 666327002 ecr 671676914], length 1378
10:40:16.159649 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 17915:19293, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161757 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 19293:20671, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161861 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 20671:22049, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161892 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 22049:23427, ack 206, win 508, options [nop,nop,TS val 666327004 ecr 671676916], length 1378
10:40:16.161913 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 23427:24805, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.161919 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 24805:26183, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.161923 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 26183:27561, ack 206, win 508, options [nop,nop,TS val 666327005 ecr 671676917], length 1378
10:40:16.167181 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 27561:28939, ack 206, win 508, options [nop,nop,TS val 666327016 ecr 671676929], length 1378
10:40:16.167471 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 28939:30317, ack 206, win 508, options [nop,nop,TS val 666327019 ecr 671676931], length 1378
10:40:16.185391 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 30317:31695, ack 206, win 508, options [nop,nop,TS val 666327034 ecr 671676946], length 1378
10:40:16.192822 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 31695:33073, ack 206, win 508, options [nop,nop,TS val 666327042 ecr 671676955], length 1378
10:40:16.193108 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 33073:34451, ack 206, win 508, options [nop,nop,TS val 666327044 ecr 671676957], length 1378
10:40:16.200554 IP 116.62.35.197.1316 > cwd.42002: Flags [.], seq 34451:35829, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 1378
10:40:16.200593 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 35829:37207, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 1378
10:40:16.200604 IP 116.62.35.197.1316 > cwd.42002: Flags [P.], seq 37207:38123, ack 206, win 508, options [nop,nop,TS val 666327045 ecr 671676957], length 916

keep-alive

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加上Connection Keep-Alive字段。在一个内容传输完毕后并不关闭连接,等待一定时间后仍没有数据传输才关闭。这个时间一般为60s。

在这个时间里,仍要确定这个连接是保持着的,如果哪一方断开了就直接关闭连接。此时客户端会一直发送最后一个ack的,长度为0的空报文,服务器也回应一个空报文。持续一分钟。这里的一分钟是由http的keep-alive机制定下来的,但是这一分钟里,一秒发一个的机制测试连接是否还存在,是tcp的keepalive机制。

区别:http的keep-clive是为了节省资源设计的,其中hold住socket连接是需要tcp的keepalive技术作为支持的。

#客户端发向服务器

10:40:16.200678 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671676996 ecr 666327045], length 0
10:40:17.214774 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671678010 ecr 666327045], length 0
10:40:18.246541 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671679042 ecr 666328097], length 0
**************************************************省略很多一样的报文****************************************************************
10:41:14.014789 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671734810 ecr 666383865], length 0
10:41:15.046784 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671735842 ecr 666384897], length 0
10:41:16.078756 IP cwd.42002 > 116.62.35.197.1316: Flags [.], ack 38123, win 501, options [nop,nop,TS val 671736874 ecr 666385929], length 0
#服务器发向客户端
10:40:17.245177 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666328097 ecr 671676996], length 0
10:40:18.277847 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666329129 ecr 671676996], length 0
10:40:19.312514 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666330164 ecr 671676996], length 0
**************************************************省略很多一样的报文****************************************************************
10:41:14.045376 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666384897 ecr 671676996], length 0
10:41:15.078391 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666385929 ecr 671676996], length 0
10:41:16.109577 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 206, win 508, options [nop,nop,TS val 666386961 ecr 671676996], length 0

四次挥手

#客户端发向服务器
10:41:16.156591 IP cwd.42002 > 116.62.35.197.1316: Flags [F.], seq 205, ack 38124, win 501, options [nop,nop,TS val 671736952 ecr 666387004], length 0
#服务器发向客户端
10:41:16.155710 IP 116.62.35.197.1316 > cwd.42002: Flags [F.], seq 38123, ack 206, win 508, options [nop,nop,TS val 666387004 ecr 671676996], length 0
10:41:16.187787 IP 116.62.35.197.1316 > cwd.42002: Flags [.], ack 207, win 508, options [nop,nop,TS val 666387038 ecr 671736952], length 0

在这里插入图片描述

客户端: (被动关闭)

  1. 客户端收到服务器发来的带有FIN的报文。其中seq=38123。进入CLOSE_WAIT状态。
  2. 客户端回复一个ack=38124,同时已经没有数据要传输,此报文也置位FIN。进入LAST_ACK状态。此时等待服务器最后发来ACK即可。
  3. 收到服务器发来的ack。 关闭。

服务器: (主动关闭)

  1. 发起关闭,向客户端发送带有FIN标志的报文,其中随机生成一个seq=38123。该报文中的ack与之前的数据传输有关,为206。
  2. 收到客户端发来的报文,和对了ack=38123+1,且上面有FIN。
  3. 发送ACK报文,直接进入TIME_WAIT状态。

测试二:

使用postman发送有connect 标志为closed的get请求一次,观察报文情况。

测试结果:

#客户端发向服务器
14:34:06.496360 IP cwd.43476 > 116.62.35.197.1316: Flags [S], seq 2373531687, win 64240, options [mss 1460,sackOK,TS val 684346357 ecr 0,nop,wscale 7], length 0
14:34:06.531072 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 1190842776, win 502, options [nop,nop,TS val 684346392 ecr 680357374], length 0
14:34:06.532722 IP cwd.43476 > 116.62.35.197.1316: Flags [P.], seq 0:201, ack 1, win 502, options [nop,nop,TS val 684346394 ecr 680357374], length 201
14:34:06.585013 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 1379, win 501, options [nop,nop,TS val 684346446 ecr 680357411], length 0
14:34:06.602166 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 2757, win 501, options [nop,nop,TS val 684346463 ecr 680357411], length 0
14:34:06.602283 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 4135, win 496, options [nop,nop,TS val 684346463 ecr 680357411], length 0
14:34:06.602564 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 5513, win 488, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.602844 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 6891, win 480, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.602912 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 8269, win 473, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.602983 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 9647, win 465, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.603063 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 11025, win 457, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.603147 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 12403, win 449, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.603226 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 13781, win 442, options [nop,nop,TS val 684346464 ecr 680357411], length 0
14:34:06.618638 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 15159, win 501, options [nop,nop,TS val 684346480 ecr 680357463], length 0
14:34:06.620760 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 16537, win 501, options [nop,nop,TS val 684346482 ecr 680357463], length 0
14:34:06.634519 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 17915, win 501, options [nop,nop,TS val 684346496 ecr 680357480], length 0
14:34:06.634576 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 19293, win 496, options [nop,nop,TS val 684346496 ecr 680357480], length 0
14:34:06.639228 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 20671, win 501, options [nop,nop,TS val 684346500 ecr 680357480], length 0
14:34:06.639285 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 22049, win 496, options [nop,nop,TS val 684346500 ecr 680357480], length 0
14:34:06.651209 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 24805, win 501, options [nop,nop,TS val 684346512 ecr 680357480], length 0
14:34:06.651493 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 33073, win 496, options [nop,nop,TS val 684346513 ecr 680357480], length 0
14:34:06.651875 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 35829, win 501, options [nop,nop,TS val 684346513 ecr 680357480], length 0
14:34:06.653020 IP cwd.43476 > 116.62.35.197.1316: Flags [.], ack 38087, win 501, options [nop,nop,TS val 684346514 ecr 680357481], length 0
14:34:06.664077 IP cwd.43476 > 116.62.35.197.1316: Flags [F.], seq 201, ack 38087, win 501, options [nop,nop,TS val 684346525 ecr 680357481], length 0
#服务器发向客户端
14:34:06.530960 IP 116.62.35.197.1316 > cwd.43476: Flags [S.], seq 1190842775, ack 2373531688, win 65160, options [mss 1390,sackOK,TS val 680357374 ecr 684346357,nop,wscale 7], length 0
14:34:06.570964 IP 116.62.35.197.1316 > cwd.43476: Flags [.], ack 202, win 508, options [nop,nop,TS val 680357410 ecr 684346394], length 0
14:34:06.584959 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 1:1379, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602115 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 1379:2757, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602260 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 2757:4135, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602517 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 4135:5513, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602794 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 5513:6891, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602867 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 6891:8269, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602961 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 8269:9647, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.602995 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 9647:11025, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.603123 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 11025:12403, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.603204 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 12403:13781, ack 202, win 508, options [nop,nop,TS val 680357411 ecr 684346394], length 1378
14:34:06.618588 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 13781:15159, ack 202, win 508, options [nop,nop,TS val 680357463 ecr 684346446], length 1378
14:34:06.620710 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 15159:16537, ack 202, win 508, options [nop,nop,TS val 680357463 ecr 684346446], length 1378
14:34:06.634485 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 16537:17915, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346463], length 1378
14:34:06.634553 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 17915:19293, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346463], length 1378
14:34:06.639206 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 19293:20671, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346463], length 1378
14:34:06.639240 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 20671:22049, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346463], length 1378
14:34:06.639297 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 22049:23427, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651170 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 23427:24805, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651226 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 24805:26183, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651282 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 26183:27561, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651305 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 27561:28939, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651327 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 28939:30317, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651425 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 30317:31695, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651448 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 31695:33073, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651471 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 33073:34451, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.651482 IP 116.62.35.197.1316 > cwd.43476: Flags [P.], seq 34451:35829, ack 202, win 508, options [nop,nop,TS val 680357480 ecr 684346464], length 1378
14:34:06.652313 IP 116.62.35.197.1316 > cwd.43476: Flags [.], seq 35829:37207, ack 202, win 508, options [nop,nop,TS val 680357481 ecr 684346464], length 1378
14:34:06.652998 IP 116.62.35.197.1316 > cwd.43476: Flags [FP.], seq 37207:38086, ack 202, win 508, options [nop,nop,TS val 680357481 ecr 684346464], length 879
14:34:06.697029 IP 116.62.35.197.1316 > cwd.43476: Flags [.], ack 203, win 508, options [nop,nop,TS val 680357545 ecr 684346525], length 0

其中三次握手和数据传输基本一致。

四次挥手

#客户端发向服务器
14:34:06.664077 IP cwd.43476 > 116.62.35.197.1316: Flags [F.], seq 201, ack 38087, win 501, options [nop,nop,TS val 684346525 ecr 680357481], length 0
#服务器发向客户端
14:34:06.652998 IP 116.62.35.197.1316 > cwd.43476: Flags [FP.], seq 37207:38086, ack 202, win 508, options [nop,nop,TS val 680357481 ecr 684346464], length 879
14:34:06.697029 IP 116.62.35.197.1316 > cwd.43476: Flags [.], ack 203, win 508, options [nop,nop,TS val 680357545 ecr 684346525], length 0

需注意最后的标识[FP],表示在发送数据的同时,FIN标志位置位。在多次测试中,客户端发送ack和FIN可以是一个报文,可以以是两个报文连续发送。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值