网卡多ip 再看arp; arp队列也会缓存skb
[结论]
当协议失效的时候,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] <IRQ>
[ 8.355168] [<ffffffff8171154f>] arp_send_dst.part.2+0x4f/0x80
[ 8.355168] [<ffffffff81711edf>] arp_solicit+0xff/0x280
[ 8.355168] [<ffffffff8117c4ce>] ? kmem_cache_alloc+0x17e/0x1c0
[ 8.355168] [<ffffffff816744b4>] ? skb_clone+0x54/0xa0
[ 8.355168] [<ffffffff81673abe>] ? __skb_clone+0x2e/0x130
[ 8.355168] [<ffffffff816934b2>] neigh_probe+0x42/0x60 所以这里是个同步的过程
[ 8.355168] [<ffffffff8169610a>] __neigh_event_send+0x19a/0x230
[ 8.355168] [<ffffffff81696de2>] neigh_resolve_output+0x122/0x1b0 ------> 就是在这里把arp包给发送出去了v
dst_neigh_output
[ 8.355168] [<ffffffff816e1aa7>] ip_finish_output2+0x1a7/0x300
[ 8.355168] [<ffffffff816e347f>] ip_finish_output+0x12f/0x1e0
[ 8.355168] [<ffffffff816e3f0e>] ip_output+0xae/0xc0
[ 8.355168] [<ffffffff816e3350>] ? ip_fragment.constprop.5+0x80/0x80
[ 8.355168] [<ffffffff816e36b5>] ip_local_out+0x35/0x40
[ 8.355168] [<ffffffff816e3808>] ip_build_and_send_pkt+0x148/0x1c0
[ 8.355168] [<ffffffff817036ea>] tcp_v4_send_synack+0x5a/0xa0
[ 8.355168] [<ffffffff816e99e8>] ? inet_csk_reqsk_queue_hash_add+0x78/0xa0
[ 8.355168] [<ffffffff816f4210>] tcp_conn_request+0x8b0/0x9a0
[ 8.355168] [<ffffffff816ccc85>] ? tcp_packet+0xac5/0x11c0
[ 8.355168] [<ffffffff81702bf3>] tcp_v4_conn_request+0x53/0x60
[ 8.355168] [<ffffffff816f8af4>] tcp_rcv_state_process+0x194/0xd60
[ 8.355168] [<ffffffff81318d7b>] ? security_sock_rcv_skb+0x3b/0x50
[ 8.355168] [<ffffffff81701254>] tcp_v4_do_rcv+0x64/0x210
[ 8.355168] [<ffffffff81704485>] tcp_v4_rcv+0xc15/0xcd0
[ 8.355168] [<ffffffff816de11f>] ip_local_deliver_finish+0x6f/0x1a0
[ 8.355168] [<ffffffff816de7b5>] ip_local_deliver+0xc5/0xd0
[ 8.355168] [<ffffffff816de0b0>] ? inet_del_offload+0x40/0x40
[ 8.355168] [<ffffffff816de3eb>] ip_rcv_finish+0x19b/0x350
[ 8.355168] [<ffffffff816dea8e>] ip_rcv+0x2ce/0x370
[ 8.355168] [<ffffffff816de250>] ? ip_local_deliver_finish+0x1a0/0x1a0
[ 8.355168] [<ffffffff816851ea>] __netif_receive_skb_core+0x34a/0xa20
[ 8.355168] [<ffffffff817095b8>] ? tcp4_gro_receive+0x118/0x1c0
[ 8.355168] [<ffffffff81718dc7>] ? inet_gro_receive+0x1f7/0x250
[ 8.355168] [<ffffffff81687bcd>] __netif_receive_skb+0x1d/0x60
[ 8.355168] [<ffffffff81687c3d>] netif_receive_skb_internal+0x2d/0x90
[ 8.355168] [<ffffffff81688882>] napi_gro_receive+0xd2/0x120
[ 8.355168] [<ffffffff81533081>] e1000_clean_rx_irq+0x191/0x510
[ 8.355168] [<ffffffff81531e80>] e1000_clean+0x250/0x890
[ 8.355168] [<ffffffff8168998a>] net_rx_action+0x1fa/0x340
[ 8.355168] [<ffffffff81880a99>] __do_softirq+0x89/0x294
[ 8.355168] [<ffffffff81058fc0>] irq_exit+0xb0/0xc0
[ 8.355168] [<ffffffff81880854>] do_IRQ+0x54/0xd0
[ 8.355168] [<ffffffff8187ee7f>] common_interrupt+0x7f/0x7f
在arp表项失效的当下,这个时候如果发来一个数据包,数据包此时是没有目的地址的,那么这个时候是把数据包给丢掉呢?还是等arp表都回来了再发送,也就是说是个同步的操作.
第一次会返回,但是紧接着第二次就会回来,打印出来栈看一下数据是从哪里来的,是收到了arp的数据,是收到了, 收到了一个arp数据包, 然后这个数据包会导致
910 [ 10.269541] [<ffffffff8169628f>] neigh_resolve_output+0x7f/0x260
911 [ 10.269541] [<ffffffff81696a43>] neigh_update+0x5d3/0x700 neigh_update直接调用了neigh_resolve_output
912 [ 10.269541] [<ffffffff817118bf>] arp_process+0x1ef/0x6c0
913 [ 10.269541] [<ffffffff816de1e0>] ? inet_del_offload+0x40/0x40
914 [ 10.269541] [<ffffffff816de51b>] ? ip_rcv_finish+0x19b/0x350
915 [ 10.269541] [<ffffffff81711f00>] arp_rcv+0x150/0x180
916 [ 10.269541] [<ffffffff816de380>] ? ip_local_deliver_finish+0x1a0/0x1a0
917 [ 10.269541] [<ffffffff816851ea>] __netif_receive_skb_core+0x34a/0xa20
918 [ 10.269541] [<ffffffff817096e8>] ? tcp4_gro_receive+0x118/0x1c0
919 [ 10.269541] [<ffffffff81718f17>] ? inet_gro_receive+0x1f7/0x250
920 [ 10.269541] [<ffffffff81687bcd>] __netif_receive_skb+0x1d/0x60
921 [ 10.269541] [<ffffffff81687c3d>] netif_receive_skb_internal+0x2d/0x90
922 [ 10.269541] [<ffffffff81688882>] napi_gro_receive+0xd2/0x120
923 [ 10.269541] [<ffffffff81533081>] e1000_clean_rx_irq+0x191/0x510
924 [ 10.269541] [<ffffffff81531e80>] e1000_clean+0x250/0x890
925 [ 10.269541] [<ffffffff81083881>] ? cpu_load_update+0xe1/0x150
926 [ 10.269541] [<ffffffff8168998a>] net_rx_action+0x1fa/0x340
927 [ 10.269541] [<ffffffff81880c59>] __do_softirq+0x89/0x294
928 [ 10.269541] [<ffffffff81058fc0>] irq_exit+0xb0/0xc0
929 [ 10.269541] [<ffffffff81880a14>] do_IRQ+0x54/0xd0
930 [ 10.269541] [<ffffffff8187f03f>] common_interrupt+0x7f/0x7f
网卡多ip 再看arp; arp队列也会缓存skb的更多相关文章
- Linux 单网卡多 IP 的配置方法
Linux 单网卡多 IP 的配置方法 1 .永久配置的方法: 知道在 Linux 下网卡被称为 eth0,eth1,eth2..... ,所有网卡的配置文件都存储在 /etc/sysconfi ...
- centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课
centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...
- 单网卡多IP导致的socket connect 10060超时错误
问题: 接管别人代码时遗留的一个bug,在win7下,给一个网卡设置多个ip时,发现无法连接上服务器了.XP下就不会,这多个ip为192.168.1.127,172.1.1.13,10.0.0.1. ...
- LINUX一网卡多IP设置
方法1:少量IP手动绑定(这里以绑定IP到eth0为例,其它网卡的话修改相应的文件名即可) 1.复制ifcfg-eth0的网卡配置文件并改名为ifcfg-eth0:0 [root@akinlau /] ...
- linux单网卡多IP配置
一.仅一个网卡的情况下,可以让该机器可以通过多个IP被访问,或隐藏常用IP,让他人访问其临时IP. 1.如果临时性的增加一个IP(重启机器或network服务后,丢失),可以使用ifconfig命令 ...
- Linux多网卡多IP配置
echo "210 local100" >> /etc/iproute2/rt_tables echo "220 local200" >> ...
- Ubuntu下单网卡多IP地址的配置
删除用户默认配置文件 由于在默认清空下,配置文件是系统自动生成的用户设备配置文件保存在/etc/udev/rule.d/下面:# cp /etc/udev/rule.d /etc/udev/rule. ...
- 配置多网卡多IP的方式
[root@web01 conf.d]# cat ip.conf server { listen 10.0.0.7:80; server_name _; location ...
- 记一次排查局网内的ARP包 “不存在的” MAC 地址及 “不存在的”IP 所发的ARP包
xu言: 最近生了一场病,虽然不是给自己找理由不写.不过果不其然还是没有坚持每天发一篇啊.不过,有时间我还是会把一些有意思的事情记录下来.以作备忘吧.这人老了记性就不好了.哈哈哈,当然,也侧面说明了. ...
随机推荐
- Python学习:9.模块的安装以及调用模块
什么是模块 在Python中,模块其实也就是包含python代码的文件,我们为什么要使用模块?在我们以后写代码的时候,我们会发现有很多功能需要经常使用,那我们想要使用这些功能怎么办,要再把那些代码在敲 ...
- C语言学习记录
思路: 工具书: <c程序设计语言> R&K <linux C 编程一站式学习>
- 位域 (Bit field)
最近开始看编程之美这本书,里面有一道关于中国象棋将帅位置的简单问题,如下图所示,写一个程序输出将.帅的合法位置. 分析与解法 问题的本身并不复杂,只要把所有A.B 互相排斥的条件列举出来就可以完成本题 ...
- Java设计模式(11)——结构型模式之享元模式(Flyweight)
一.概述 概念 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). UML简图 单纯享元模式 角色 抽象享元角色(Flyweight):定义享元子类公共接口 具体享元角色(Co ...
- 20145202马超《java》实验5
两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面 ...
- python中利用少量代码快速实现从类对象中抽取所需属性的一种实践
项目中有可能会碰到这样一种场景: 根据一个id,查询得到和id对应的完整数据信息存储对象,比如书籍id到书籍详细信息,用户id到用户详细信息等,详细信息字段可能包括几十甚至上百个数据字段,真正需要返回 ...
- 长沙Uber优步司机奖励政策(1月4日~1月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- [Jmeter并发报错解决方案]org.apache.http.NoHttpResponseException: 10.0.4.147:8000 failed to respond
背景:公司模型框架是Nginx+uwsgi+Django+nginx,一开始使用Jmeter进行高并发请求测试,发现成功率只有50%,换用postman,成功率100%,代码进行高并发一样不会报错. ...
- 代码混淆防止APP被反编译指南
本文来自网易云社区 安卓App安全包含很多内容,包括混淆代码.整体Dex加固.拆分 Dex 加固.虚拟机加固等方面.事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势. 混淆代 ...
- create-react-app react-redux项目 配置模块热更新hmr
HRM并不是create-react-app专属的,提供一篇博客介绍hrm http://chrisshepherd.me/posts/adding-hot-module-reloading-to-c ...