网络部分 终于写到网络了 !!!
终于写到网络了!用qemu+gdb+tap+wireshark来分析宿主机器以及qemu虚拟机之间的通讯。。
=======
起了qemu虚拟机之后,我在宿主机上去ping我的虚拟机,有如下几条log:
首先使用ARP协议:
这是一个ARP协议:总共有42个字节,收到了一个广播:说谁知道192.168.0.110怎么走?
我本机上的mac地址是:
3 5.013060953 1a:70:da:77:94:cc RealtekU_12:34:56 ARP 42 Who has 192.168.0.110? Tell 192.168.0.1
如何清除系统中的arp中的arp缓存?
ARP协议:地址解析协议;
Frame 3: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0 Ethernet II, Src: 1a:70:da:77:94:cc (1a:70:da:77:94:cc), Dst: RealtekU_12:34:56 (52:54:00:12:34:56) Address Resolution Protocol (request) Hardware type: Ethernet (1) Protocol type: IPv4 (0x0800) Hardware size: 6 Protocol size: 4 Opcode: request (1) Sender MAC address: 1a:70:da:77:94:cc (1a:70:da:77:94:cc) Sender IP address: 192.168.0.1 Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) Target IP address: 192.168.0.110
试验过程中先把arp缓存给清除掉再做哈:
arp -d 192.168.0.110
【首先我ping 192.168.0.110的时候,会在系统中查找路由表由哪个端口发出去,我系统中对192.168.0.0/24的路由是由tap0端口负责发送,于是就由tap0在机器上发出arp请求,问谁是192.168.0.110,这个时候我虚拟机上的192.168.0.110就发出一个应到的包了,告诉说我才是192.168.0.110,并且把自己的mac地址给发过去,所以前后我们看到了两个包】
那接着arp协议这个话题:如果此时我的地址变了咋办,比如192.168.0.110-->192.168.0.111,这个时候要广播?不会广播自己的ip地址变化,而是arp协议是如何应到的?
//-------------------------
刚刚有点糊涂了,在局域网内应该很是好处理;如何确定一个包是在局域网内和局域网外?
对于我PC机其实网卡非常简单,就是个一个发送和接受的过程,不涉及到转发,真正的转发只在局域网的路由表中。比如我输入了一个www.baidu.com,那么我这个请求包会先发到网关中去,然后网关会代理我发东西出去,网关:[跟踪一个网络包一路上经过的设备: traceroute
traceroute这种东西存在,肯定说明网络协议中有地方设置让一个包每次转发都回传信息!【attention!】
www.baidu.com
www.google.com
都是会直接发送到网关去的,并且可以直接
当发现目标的IP地址不是在自己局域网的时候,就可以直接发送到网关去了【这个时候不需要广播说是谁在192】当我ping www.baidu.com时,第一个发送的是DNS协议,这个协议后来直接送去网关
【刚才有个怀疑是说既然局域网中Mac地址和IP地址都是唯一的,为什么不直接通过IP地址去解析得了,原理上说得通【数学思维啊,这不就是简单的映射么】,都是唯一的嘛,但是要考虑两个因素:1)历史因素;到底谁先出来,协议要兼容!再就是要处理简单性,如果是通过IP过滤包,那么每台机器还得去集合所有的包,这样才能解析出IP层的包,而如果是mac地址的话,直接在硬件层面过滤掉就好了,性能上是一个很大的优化呀,甚至是一个主要的因素!】
以太网帧大小:60字节数据和4字节的CRC。
ARP请求接近于每秒一次,这是RFC1222中规定的的最大值,都不能改的。
arp上两个有用的功能:1)代理arp,对于局域网内任意的请求,我都告诉别人说我是最大的包;