網絡卡多 再看 arp佇列也會快取skb

2022-04-13 20:33:33 字數 4832 閱讀 3362

[結論]

當協議失效的時候,skb會掛載arp的neigt的乙個鍊錶上,然後直接返回了,相當於資料報發下了,當arp收到資料報去修復neigh的目的位址的時候,會把之前所有的neihe中等待的skb全部都往下刷到網絡卡佇列中去;

當協議沒生效的時候,skb會直接刷到網絡卡的佇列中去;

網絡卡多ip

為什麼一張網絡卡要多個ip,測試?

當我把自己的機器的位址設定成192.168.199.1時,發現主機上不了網了,那這個時候我的手機應該也上不了網才對!但是我的手機竟然上得了,這個時候是怎麼完成的呢?這在網路端是做了什麼優化嗎這是?

我把自己的電腦假裝成閘道器,這應該就能抓到所有的包才對吧,但是並沒有!手機上網依然順溜,

wifi協議是上來的時候,我是怎麼發現閘道器的位址

【電腦上來是怎麼聯網的?】

閘道器位址如果不配置的話,那麼就是預設的這個網段然後最後加1,預設的閘道器位址,如果一上來連ip位址都沒有,怎麼確定自己的ip位址呢?這就是dhcp協議嗎?

arp協議貌似是個附屬的協議,是乙個在區域網中執行的協議,arp協議應該是作用在ip層的協議

arp是位址解析協議,這個位址是解析mac位址

arp協議是在**觸發,在組包組到哪個程度的時候會出發呀?tcp->ip->在ip層話會查詢ip位址,然後填充mac位址,在ip層的時候會查詢路由,然後發出arp[我們個,我們能抓到所有的網路包嗎?]  

最關鍵的函式是arp_send,這

[root@buildroot ~]# dmesg | grep -a 50 arp

[ 8.351259] arp_send------------

[ 8.351842] ffff88007fc03678

[ 8.352272] ffffffff8171154f ffff88007c981af0 0000000000000000

[ 8.354623] ffff88007c1c0200 ffff88007fc036f8 ffffffff81711edf ffff88007c981af0

[ 8.355168] 0000000000000000 0000000000000000 ffffffff8117c4ce ffffffff816744b4

[ 8.355168] call trace:

[ 8.355168] [ 8.355168] arp_send_dst.part.2+0x4f/0x80

[ 8.355168] arp_solicit+0xff/0x280

[ 8.355168] ? kmem_cache_alloc+0x17e/0x1c0

[ 8.355168] ? skb_clone+0x54/0xa0

[ 8.355168] ? __skb_clone+0x2e/0x130

[ 8.355168] neigh_probe+0x42/0x60 所以這裡是個同步的過程

[ 8.355168] __neigh_event_send+0x19a/0x230

[ 8.355168] neigh_resolve_output+0x122/0x1b0 ------> 就是在這裡把arp包給傳送出去了v

dst_neigh_output

[ 8.355168] ip_finish_output2+0x1a7/0x300

[ 8.355168] ip_finish_output+0x12f/0x1e0

[ 8.355168] ip_output+0xae/0xc0

[ 8.355168] ? ip_fragment.constprop.5+0x80/0x80

[ 8.355168] ip_local_out+0x35/0x40

[ 8.355168] ip_build_and_send_pkt+0x148/0x1c0

[ 8.355168] tcp_v4_send_synack+0x5a/0xa0

[ 8.355168] ? inet_csk_reqsk_queue_hash_add+0x78/0xa0

[ 8.355168] tcp_conn_request+0x8b0/0x9a0

[ 8.355168] ? tcp_packet+0xac5/0x11c0

[ 8.355168] tcp_v4_conn_request+0x53/0x60

[ 8.355168] tcp_rcv_state_process+0x194/0xd60

[ 8.355168] ? security_sock_rcv_skb+0x3b/0x50

[ 8.355168] tcp_v4_do_rcv+0x64/0x210

[ 8.355168] tcp_v4_rcv+0xc15/0xcd0

[ 8.355168] ip_local_deliver_finish+0x6f/0x1a0

[ 8.355168] ip_local_deliver+0xc5/0xd0

[ 8.355168] ? inet_del_offload+0x40/0x40

[ 8.355168] ip_rcv_finish+0x19b/0x350

[ 8.355168] ip_rcv+0x2ce/0x370

[ 8.355168] ? ip_local_deliver_finish+0x1a0/0x1a0

[ 8.355168] __netif_receive_skb_core+0x34a/0xa20

[ 8.355168] ? tcp4_gro_receive+0x118/0x1c0

[ 8.355168] ? inet_gro_receive+0x1f7/0x250

[ 8.355168] __netif_receive_skb+0x1d/0x60

[ 8.355168] netif_receive_skb_internal+0x2d/0x90

[ 8.355168] napi_gro_receive+0xd2/0x120

[ 8.355168] e1000_clean_rx_irq+0x191/0x510

[ 8.355168] e1000_clean+0x250/0x890

[ 8.355168] net_rx_action+0x1fa/0x340

[ 8.355168] __do_softirq+0x89/0x294

[ 8.355168] irq_exit+0xb0/0xc0

[ 8.355168] do_irq+0x54/0xd0

[ 8.355168] common_interrupt+0x7f/0x7f

在arp表項失效的當下,這個時候如果發來乙個資料報,資料報此時是沒有目的位址的,那麼這個時候是把資料報給丟掉呢?還是等arp表都回來了再傳送,也就是說是個同步的操作.

第一次會返回,但是緊接著第二次就會回來,列印出來棧看一下資料是從**來的,是收到了arp的資料,是收到了, 收到了乙個arp資料報, 然後這個資料報會導致

910 [   10.269541]   neigh_resolve_output+0x7f/0x260

911 [ 10.269541] neigh_update+0x5d3/0x700 neigh_update直接呼叫了neigh_resolve_output

912 [ 10.269541] arp_process+0x1ef/0x6c0

913 [ 10.269541] ? inet_del_offload+0x40/0x40

914 [ 10.269541] ? ip_rcv_finish+0x19b/0x350

915 [ 10.269541] arp_rcv+0x150/0x180

916 [ 10.269541] ? ip_local_deliver_finish+0x1a0/0x1a0

917 [ 10.269541] __netif_receive_skb_core+0x34a/0xa20

918 [ 10.269541] ? tcp4_gro_receive+0x118/0x1c0

919 [ 10.269541] ? inet_gro_receive+0x1f7/0x250

920 [ 10.269541] __netif_receive_skb+0x1d/0x60

921 [ 10.269541] netif_receive_skb_internal+0x2d/0x90

922 [ 10.269541] napi_gro_receive+0xd2/0x120

923 [ 10.269541] e1000_clean_rx_irq+0x191/0x510

924 [ 10.269541] e1000_clean+0x250/0x890

925 [ 10.269541] ? cpu_load_update+0xe1/0x150

926 [ 10.269541] net_rx_action+0x1fa/0x340

927 [ 10.269541] __do_softirq+0x89/0x294

928 [ 10.269541] irq_exit+0xb0/0xc0

929 [ 10.269541] do_irq+0x54/0xd0

930 [ 10.269541] common_interrupt+0x7f/0x7f

查詢字元出現次數最多(再看)

time limit 60msmemory limit 65536kb64bit io format lld llu submit status practice sdutoj 2892 description 給出n 1 n n 2 10 6 個字串,每個字串只包含小寫英文本母,且最多有五個。問這...

網絡卡多佇列

多佇列指例項規格支援的最大網絡卡佇列數。單個ecs例項vcpu處理網路中斷存在效能瓶頸時,您可以將例項中的網路中斷分散給不同的cpu處理。經測試,在相同的網路pps和網路頻寬的條件下,與1個佇列相比,2個佇列最多可提公升效能達50 到100 4個佇列的效能提公升更大。如果您使用的映象已預設開啟網絡卡...

lvs 網絡卡多佇列

bin bash 平均繫結cpu到網絡卡多個佇列上,避免單核cpu跑滿的問題 ipmi cpu高 f sys module ipmi si parameters kipmid max busy us echo 10 sys module ipmi si parameters kipmid max b...