[結論]
當協議失效的時候,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/0x260911 [ 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...