我知道通过互联网发送的数据包带有源和目标 IP 地址,以便协议可以将数据路由到正确的目的地并跟踪数据包的源地址。
但是网卡地址呢?据我所知,每个网卡都有一个唯一的标识号。这也是通过 TCP/IP 数据包传输的吗?当数据包到达目的地时,IP 地址如何映射到网卡号?
换句话说。
在发送方部分:发送方是否在其发送的IP数据包中存储发送方网卡号?
在接收方:当收到数据包时,哪个组件将 IP 地址映射到接收方的网卡号?例如,在家庭网络中,调制解调器/路由器是否将传入数据包的目标 IP 地址映射到网卡号,并将数据包直接传送到该网卡?
关于这些主题的文档链接将会很有帮助。
答案1
ISO 堆栈的每一层都是单独实现的(至少在理论上),因此没有任何层需要了解上面或下面的层。
NIC 地址称为 MAC,位于第 2 层,而 IP 地址位于第 3 层。第 2 层地址仅在本地网络(广播域)上有意义。因此,它们不会在本地网络之外传输。
您可能已经知道,IP 数据包是根据 IP 地址在互联网上路由的。当数据包到达路由器时,如果路由器的某个接口没有连接目标 IP 网络,则会检查路由表,并将数据包转发到“正确方向”的路由器。
最终,数据包将到达你的路由器,以及目标 IP 网络将要是连接到接口的一个。
此时,路由已完成,我们位于正确的网络 - 因此第 3 层已完成,现在需要在本地网络的第 2 层传输数据包。
因此,路由器需要找出数据包目的地 IP 地址对应的网卡的 MAC 地址。为此,它会发出一个arp
请求,说“谁有 IP 地址 xxxx”。此请求会在本地网络上广播,任何有 IP 地址的人都会回答“是我”。由于回复数据包来自相关网卡的 MAC 地址,因此路由器可以将数据包转发到正确的 MAC 地址。