goingstudy 发表于 2013-05-12 18:00

tcpdump 工作在协议栈的那一层?

如题,tcpdump应该是从网卡的驱动程序那里获得数据包,那它是在哪一层?物理层还是数据链路层?

Godbach 发表于 2013-05-12 19:16

回复 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      }

瀚海书香 发表于 2013-05-13 08:06

回复 2# Godbach
正解!

BTW,好久不见GOD兄了

   

Godbach 发表于 2013-05-13 09:27

回复 3# 瀚海书香

哈哈,好久不见。惭愧啊,在其位,不谋其政。
:mrgreen:
   

Arthur_ 发表于 2013-05-13 10:09

xuexilexiexie

goingstudy 发表于 2013-05-13 15:01

谢谢,懂了

xumin330774233 发表于 2014-01-12 00:13

本帖最后由 xumin330774233 于 2014-01-12 00:21 编辑

tcpdump工作在数据链路层。一般将驱动中的网卡模式设为混杂模式。网卡缓存中的数据一份上交给协议栈的网络层,同样的一份经过内核的过滤器(不经过协议栈)送给tcpdump。

316953425 发表于 2014-01-17 10:35

回复 2# Godbach
兄台好,有个问题想请教一下:
既然说TCP/IP协议栈中没有物理层,最底层就是链路层,可是我用wireshark随便抓一个TCP的包,发现在以太网的链路层外面还有一个Frame包头啊,这个Frame是什么东西?


   

neodreamerus 发表于 2014-05-04 23:09

本帖最后由 neodreamerus 于 2014-05-04 23:10 编辑

回复 2# Godbach


调制解调都在物理层做,没有物理层数据不能完成传输。

更准确的说法是TCP/IP协议族不涉及物理层(也不涉及链路层,因为TCP/IP是互联网协议,也即跨越采用不同物理层和链路层技术的网络的协议),
物理层一般是硬件实现,在软件无线电(SDR)里也用软件实现基带处理。链路层很多是软件实现的。
   

neodreamerus 发表于 2014-05-04 23:12

回复 8# 316953425


    你的问题也顺便回答了.
页: [1] 2
查看完整版本: tcpdump 工作在协议栈的那一层?