网络请求是如何发送出去的
当我们在编程的时候,通过网络发送数据,以 UDP 发送为例
其中指定的地址,为目标服务器地址(IP),那么网络请求是如何发送出去的。
网络请求包的 N 层结构
MAC 头
源 MAC:本机的 MAC
目标 MAC:你的机器如何知道目标 IP 的 MAC 地址???
IP 头
源 IP:本机 IP
目标 IP:编程时写入的 IP 地址或者域名
UDP/TCP 头
源端口:本机可能随即指定的一个端口
目标端口:编程时指定的端口号,例如 http 默认是 80,https 默认是 443
上层协议头
例如 HTTP 的协议头等信息,由应用程序的框架来组装该协议头,例如 java 的 HttpClient 发送 http 请求。。。
问题 1:目标 MAC 地址应该是什么
网络请求发送,四层协议头缺一不可,但是在 MAC 层我们没有这个目标地址的 MAC 地址,请求包如何发送出去?
Case 1:目标 IP 在同一网段
目标 IP 地址与本机 IP 地址,在同一个网段,通过 ARP 广播,得到对应的目标 IP 的 MAC 地址
Case 2:目标 IP 不在同一网段
目标地址 IP 与本机 IP 不在一个网段里,请求只能通过网关出去,所以此时目标的 MAC 地址,是网关 MAC。隐藏的约束:网关的 MAC,本机 IP 如何获得。所以网关必须和本机在同一个网段里,才能通过 ARP 协议,拿到网关的 MAC,从而将包发送到网关上。
问题 2:其他网络主机会不会处理不是他 MAC 地址的包
携带了完整信息的网络请求包,源 MAC,目标 MAC,源 IP,目标 IP。。。,发送到网络以后,
所有的本网段的机器都会收到这个包,只是其他的机器不处理该包,因为 mac 地址不对?
还是只有对应的目标机器能收到该包?
参考https://blog.csdn.net/yang_hugo/article/details/42407905
正常情况下,网卡收到网络包后,比较 MAC 地址,是否与本机 MAC 匹配。如果不匹配,丢弃。匹配,传到上层
如果网卡配置为混听模式,所有包都传给上层
版权声明: 本文为 InfoQ 作者【kof11321】的原创文章。
原文链接:【http://xie.infoq.cn/article/af454ed94090acde04f563140】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论