動機
有趣的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)
- 取skb
- Kernel handler到上半部處理
- ip
- Ip 會照這圖先到preroute hook
- route (from static, routing protocol, 自動生出來的)
- 自己要收, output (local in與local out的hook)
- Forward (forward的hook)
- 往下之前看要不要切片
- 把mac填好 (arp或是neighbour)
- Ip 會照這圖先到preroute hook
- tcp
- 往上找有沒有開的socket
- 往prequeue 塞
- 等read,有就開始往userspace copy (2nd copy)
- 沒有就drop
- 往上找有沒有開的socket
- 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)的新认识