動機

有趣的topic

path of pkt: 從下到上

總路線簡化版

  • PHY
    • dma 到 kernel ring buffer (1st copy)
    • Nic發signal
  • data link
    • Kernel handler到上半部處理
      • 註冊 device與下半部handler
    • 下半部
      • 取skb
        • 從ring buffer到qdisc
      • 決定往哪一個地方送 (bridge,ip)
  • ip
    • Ip 會照這圖先到preroute hook
    • route (from static, routing protocol, 自動生出來的)
      • 自己要收, output (local in與local out的hook)
      • Forward (forward的hook)
    • 往下之前看要不要切片
    • 把mac填好 (arp或是neighbour)
  • tcp
    • 往上找有沒有開的socket
      • 往prequeue 塞
      • 等read,有就開始往userspace copy (2nd copy)
    • 沒有就drop
  • app
    • Read做recvform的syscall再根據socket類型往下找對應的recvform

skb

netfilter與總路線

localhost怎麼處理?

localhost是到lo interface,也就是假網卡,data直接灌給自己

有趣的是,只要是本機ip與localhost到本機ip與localhost,不論routing怎麼設,都是過4與3層到lo!!

Ref

Queueing in the Linux Network Stack linux network stack Netfilter-TaiwanWorkshop Linux Network Stack Walkthrough (2.4.20) 环回接口(loopback interface)的新认识