前言
這里主要是 調研一下 發送網絡數據包的過程中 選擇網絡設備?
比如 向本機發送信息, 走的是 lo?
向局域網其他主機發送信息, 走無線網卡 或者 有線網卡?
?
?
基于 linux 的調試
這里主要是基于 ping 192.168.1.2 的調試?
skb->dev 的初始化是在?
?
skb->_skb_refdst 初始化實在?skb?初始化的時候?
?
rt->dst 來自于?cork->dst, 如下是?cork->dst 初始化的地方?
?
rt 主要是根據上下文信息 去路由表查詢
?
查找?fib?路由轉發表的時候,?路由轉發類型是?LOCAL?類型?
?
如果是?LOCAL 路由,?直接使用設備?net->loopback_dev
?
?
sock?的來由
socket?是來自于 fd 對應的 file 的 private?
上面的過程中的?fd 對應的這個?file->private 是當前是?socket 本身?
?
?socket 來自于 socketfs 中創建的當前?fd?對應的?socket_alloc 對象創建時分配的一個?socket
?
socket_alloc 是在?socket?系統調用的時候分配的一個?socket_alloc?對象 里面包含了一個 socket 對象用于處理當前網絡請求
這里是分配空間,?以及初始化?
?
sock->__sk_common->skc_net 來自于?socket?系統調用傳入的?net, 為?current->ns_proxy->net_ns
?
?
完
?
?
?