tcpdump 工作在协议栈的那一层?
如题,tcpdump应该是从网卡的驱动程序那里获得数据包,那它是在哪一层?物理层还是数据链路层? 回复 1# goingstudy物理层只是 OSI 7层结构中的说法。现实中用的 TCP/IP 协议,最底层就是链路层。
Linux 下抓取报文的位置,是在链路层处理报文之后,交给网络层之前的位置。具体看一下内核代码 net/core/dev.c 中就可以了
当前内核的最新版本中在 __netif_receive_skb_core 中遍历 ptype_all 链表的实现3417 list_for_each_entry_rcu(ptype, &ptype_all, list) {
3418 if (!ptype->dev || ptype->dev == skb->dev) {
3419 if (pt_prev)
3420 ret = deliver_skb(skb, pt_prev, orig_dev);
3421 pt_prev = ptype;
3422 }
3423 } 回复 2# Godbach
正解!
BTW,好久不见GOD兄了
回复 3# 瀚海书香
哈哈,好久不见。惭愧啊,在其位,不谋其政。
:mrgreen:
xuexilexiexie 谢谢,懂了 本帖最后由 xumin330774233 于 2014-01-12 00:21 编辑
tcpdump工作在数据链路层。一般将驱动中的网卡模式设为混杂模式。网卡缓存中的数据一份上交给协议栈的网络层,同样的一份经过内核的过滤器(不经过协议栈)送给tcpdump。 回复 2# Godbach
兄台好,有个问题想请教一下:
既然说TCP/IP协议栈中没有物理层,最底层就是链路层,可是我用wireshark随便抓一个TCP的包,发现在以太网的链路层外面还有一个Frame包头啊,这个Frame是什么东西?
本帖最后由 neodreamerus 于 2014-05-04 23:10 编辑
回复 2# Godbach
调制解调都在物理层做,没有物理层数据不能完成传输。
更准确的说法是TCP/IP协议族不涉及物理层(也不涉及链路层,因为TCP/IP是互联网协议,也即跨越采用不同物理层和链路层技术的网络的协议),
物理层一般是硬件实现,在软件无线电(SDR)里也用软件实现基带处理。链路层很多是软件实现的。
回复 8# 316953425
你的问题也顺便回答了.
页:
[1]
2