TCP实战——Wireshark
网络调试工具——Wireshark
如何进行 TCP 抓包和调试
接口列表
Whireshark 可以帮你看到整个网络交通情况,也可以帮你深入了解每个封包。
选择一个网络接口(Network Interface)
Linux 下可以使用ifconfig
指令看到所有的网络接口,Windows 下则使用 ipconfig。
开启捕获功能
选择好网络接口之后,点击start
因为整个网络的数据非常多,大量的应用都在使用网络,你会看到非常多数据条目,每个条目是一次数据的发送或者接收。
- 序号(No.)是 Wireshark 分配的一个从捕获开始的编号。
- 时间(Time)是从捕获开始过去的时间戳,具体可以在视图中设置,比如可以设置成中文的年月日等。这里有很多配置需要你自己摸索一下,我就不详细介绍了。
- 源地址和目标地址(Source 和 Destination)是 IP 协议,注意这里有 IPv6 的地址,也有 IPV4 的地址。
- 协议(Protocol)可能有很多种,比如 TCP/UDP/ICMP 等,ICMP 是 IP 协议之上搭建的一个消息控制协议(Internet Control Message Protocol),比如 Ping 用的就是 ICMP;还有 ARP 协议(Address Resolution Protocol)用来在局域网广播自己的 MAC 地址。
- Info是根据不同协议显示的数据,比如你可以看到在TCP 协议上看到Seq 和 ACK。这里的 Seq 和 ACK 已经简化过了,正常情况下是一个大随机数,Whireshark 帮你共同减去了一个初始值。
Wireless抓包结果分析
下面图片可以清晰的看到一次tcp连接即三次握手,到HTTPS协议传输握手的完整过程:
1、本地客户端192.168.123.62
向目标地址183.232.231.172
(百度ip地址)发起的请求发出[SYN
]
2、百度返回的[SYN-ACK
]
3、然后客户端发送给百度[ACK
]
4、可以看到 HTTPS 协议通过 TLSv1.2
发送了 Client Hello
到服务端。
5、接下来是 Server 返回给客户端 ACK,然后再发送给客户端一个 Server Hello
6、之后百度回传了证书certificate
7、最后开始交换密钥Client Key Exchange...
,直到 HTTPS 握手结束
两个请求同时进行,互不干扰:
选择一个 TCP 协议的捕获,查看报文详细信息:
可以从不同的层面来看这次捕获。从传输层看是 TCP 段;从网络层来看是 IP 封包;从链路层来看是 Frame。
选中一条消息后,下面会出现一个消息视图。还有一个二进制视图。二进制视图里面是数据的二进制形式,消息视图是对二进制形式的解读。
Wireshark 追溯的是最底层网卡传输的 Frame(帧),可以追溯到数据链路层。
- 最上面是 Frame 数据,主要是关注数据的收发时间和大小。
- 接着是数据链路层数据,关注的是设备间的传递。你可以在这里看到源 MAC 地址和目标 MAC 地址。
- 然后是网络层数据,IP 层数据。这里有 IP 地址(源 IP 地址和目标 IP 地址);也有头部的 Checksum(用来纠错的)。这里就不一一介绍了,你可以回到“06 | IPv4 协议:路由和寻址的区别是什么?”复习这块内容。
- 最下面是传输层数据。 也就是 TCP 协议。关注的是源端口,目标端口,Seq、ACK 等。
- 有的传输层上还有一个 TLS 协议,这是因为用 HTTPS 请求了数据。TLS 也是传输层。TLS 是建立在 TCP 之上,复用了 TCP 的逻辑。
鼠标右键一次捕获,可以看到很多选项,都是可以深挖的.
报文颜色
在抓包过程中,黑色报文代表各类报文错误;红色代表出现异常;其他颜色代表正常传输。
文章参考《计算机网络通关 29 讲》—— 林䭽