" 以太网是一种计算机局域网技术。IEEE 组织的 IEEE 802.3 标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI 和 ARCNET。" -- Wiki 百科
从 Xerox 公布的 Ethernet I 发展到现在,有过 6 种以太帧格式:
其中主流应用的是 Ethernet II、802.3/802.2 LLC、802.3/802.2 SNAP 这三种,最常用的是 RFC894 定义,也就是 Ethernet II 的帧格式。
类型
字段替换为帧长度
,并且因为新增加了 DASP, SSAP,Control 这三个各占 1 字节的字段,报文的长度也调整为:43~1497,它们三个字段作为 LLC 的头Ethernet 帧,从最上层(应用层)发送的数据单元( PDU ),每经过一层,都会把上层整个的 PDU 作为下层 PDU 的 data 域,然后加上 自己的协议头;接受端,同下而上的层层拆掉每层的头部。了解了这些,我们尝试抓包具体分析每个字段
$ tcpdump -i eth1 port 9527 -s 0 -w ./target9527.cap
用 wireshark
打开抓到的二进制报文,如图所示:
Frame 1,表示第 1 帧,源 ip 和目的 ip 分别是:172.24.31.67 和 10.96.77.128 ,都是内网 ip。
从 Frame 4 至 Frame 7 是建立连接后,发送具体请求的数据包。首先,发送了 HTTP 协议的 GET 请求,收到请求后回复了 ACK。具体看下:
PSH
,PSH
是告诉接收端,立即交由应用层处理而不必等到Recv socket buffer
写满PSH
标记的包,要求立即处理tcp 连接是双工的,所以任何建立连接的双方都可以发起关闭连接的请求。自己之前面试也总喜欢问这些问题,看看候选人到底理解的是否透彻, 可是大多数都不怎么清楚。言归正传,剩下的 Frame 8 至 Frame 11 是回复详情的 ACK 和 端开连接的 tcp 包。
PSH
标志位的请求和 Frame 7 的 HTTP 请求四次挥手全部结束。有同学可以会比较疑惑,不是应该是 4 次请求吗,这里只有三次。解释下这个问题:因为服务端在响应 HTTP 请求时,因为知道自己已经发送完全部数据,所以在响应包里加上了四次挥手中的第一次 FIN=1 的请求。
1
fvckDaybyte2 2019-11-02 11:34:43 +08:00
为什么用 tcpdump 抓而不是 wireshak 命令,这两个命令功能上有区别吗?
|
2
julyclyde 2019-11-04 17:58:19 +08:00
错误比较多啊
TTL 不在传输层而是三层 TCP 的叫 segment 而不是 datagram |
3
such OP @julyclyde 首先,我没有说 ttl 在非三层。而且全篇文章,也没有提到 tcp 的 segment,不知您是怎么得到的错误结论?
|
4
such OP @fvckDaybyte2 server 端不在本机,没法直接用 wireshak 抓
|
6
julyclyde 2019-11-07 10:16:08 +08:00
@fvckDaybyte2 wireshark 依赖于 Xwindow,而 lz 不会做远程 X 显示
|
7
fvckDaybyte2 2019-11-07 10:34:34 +08:00 via iPhone
@julyclyde wireshark 命令行版本也会依赖 xwindow ?并没有界面啊……
|
9
such OP @fvckDaybyte2 没所谓的,我没用过 wireshark 的命令行工具,但是从 tshark,tcpdump,这些应该差别都不太大,底层应该都是依赖 Unix 的 libpcap 库
|
10
julyclyde 2019-11-10 13:26:47 +08:00
@fvckDaybyte2 wireshark 的命令行版不依赖 x 的,只很少有人用吧。用那个 tshark 还不如 tcpdump 呢,至少参考资料一抓一大把。用 wireshark 主要就是为了它的交互式展现能力
|