文章目录
- 面试题
- A与B通信的全过程
面试题
想要弄清楚这个问题,必须了解数据包在网络上是如何传输的:
- 首先B想向A发送数据包,会根据双方IP来判断是否在同一子网:
- A的IP地址属于192.168.26.0/24这个网段。
- B的IP地址属于192.168.26.0/27这个网段;
- 计算网络段可以用IP与子网掩码进行按位与(&)操作得来。
- 我们可以观察子网掩码得到:
- 子网掩码为xxxx.1110 0000,也就是前27位是网络号。
- 如果不在同一子网内,就会将包递交给默认网关,由网关选择将这个包发向哪个网段。
- 如果在同一子网内,就会直接丢到链路层上,不交给路由器,直接转发。
- 很明显,最后解析出来A,B不属于同一子网,所以B会直接把包丢到链路上,而是发到默认网关。
- 但是其实因为子网掩码设置错误导致B判断错误,其实B是属于192.168.26.0/24这个网段,所以A,B属于同一子网,那么默认网关就不会向外转发同一网段内的数据,而是向A所在网段发送,也就是自己所在的那个网段。
- 最后A能够成功收到B的包。同理,B也可以收到A的,所以可以正常通信。
A与B通信的全过程
- B分析源与目的地的IP地址,分析是否在同一子网。
- B准备向A发送数据,手握A的IP地址,但是由于没有A的MAC地址,所以没办法完成包的构建,于是使用ARP协议(地址解析协议)广播请求。
- 拿到A回应的包之后完成包的构建,物理链路层将数据包转换成电信号在链路上传输。
- 链路上的每台主机都会收取这个包并擦除其电信号,然后进行分析,确认MAC地址和IP地址是否是自己的。若不是,则重新封装然后发送。
- 也就是说我们的主机时时刻刻都在接收并不属于自己的包并转发出去。
- 检查目标MAC地址看数据包是否属于自己,检查目标IP地址看数据包是否发给自己。
- 在实际网络中,如果存在配置错误、网络故障或恶意攻击,可能会出现一些目标MAC地址与目标IP地址不一致的情况。例如,ARP欺骗(ARP spoofing)攻击可能会导致数据包的目标MAC地址被篡改,从而使数据包看起来是发给自己的,但实际上不是。
- 如果电信号一直没有主机认领,会一直在点路上荡嘛?
- 不会,网络设备(交换机、路由器)一般都会给数据包设有一个生存时间(TTL),每经过一次网络设备就会减少1,直到减为0,网络设备就会把这个包丢掉,将其电信号抹除。
- 在链路上有包的电学冲突怎么解决:
- 此类情况常发生在半双工的以太网中,为了解决电学冲突,以太网使用CSMA/CD协议(载波监听多路访问/碰撞检测),主机在发送数据包之前先监听信道,确保没有其他主机在发送数据。
- 链路上的每台主机都会收取这个包并擦除其电信号,然后进行分析,确认MAC地址和IP地址是否是自己的。若不是,则重新封装然后发送。
- 网关有可能收到这个包,但是看到目标IP属于内网,则直接发回内网。
- A收到数据包。