【发布时间】:2018-12-28 09:16:45
【问题描述】:
我正在做一个实验室并编写了一个 C 程序,它读取所有 AF_PACKET SOCK_RAW 数据包 - 意思是 OSI 第 2 层以太网帧。程序记录以太网报头(MAC地址)、IP报头、TCP报头等内容。
这就提出了一个问题——如果以太网层在物理层之前是最低的,那么MAC地址在IP地址层之下的一层是如何解析的?例如,如果我在加利福尼亚的机器向您在纽约的机器发送 TCP/IP 数据包,那么以太网标头中的 MAC 地址是对应于我们的实际 MAC 地址还是只是我们单独的计算机与其各自路由器之间的 MAC 地址?
我知道有一个事务,其中一台机器通过 MAC 地址向路由器识别自己并获得一个 IP 地址,但每个以太网数据包都有一个源 MAC 地址和目标 MAC 地址,我很困惑这些 MAC 地址与哪些机器相关,因为在通过 IP 地址首次联系您的机器之前,我的机器不可能拥有您机器的 MAC 地址。
【问题讨论】:
-
"如果以太网层在物理层之前是最低的,那么MAC地址在IP地址层以下的一层是如何解析的?" ARP(地址解析协议- RFC 826),但您在错误的 SE 网站上提问。
-
请注意,IP 协议需要 IP 地址才能环游世界,但以太网是一种链路协议,每个设备只知道它的邻居(如果不知道,可以使用广播来发现它)它)。我的机器和无线路由器之间只有一个链接;该路由器和下一个路由器之间的另一条链路,等等。在每条链路上,IP 数据包都会获得一个新的以太网帧。就像接力赛一样,payload 是一样的,但是每个环节只知道接受最后一位选手的接收,并将其传递给下一位选手。
-
@Amadan 因此,每次数据包到达新机器时,都会创建一个具有相同或非常相似有效负载的新以太网标头的新以太网数据包,这可能是我们之间的数十次或更多次?有没有关于这方面的好文献详细介绍?我发现到目前为止我读过的大多数网络教育都非常吸引人,但它往往把重点放在 IP 及以上。
-
@the_endian 两个链接之间甚至不总是有以太网;其他第 2 层标头是可能的(sonet、atm)。但是,以太网是当今最常见的一种。您可以想象,以太网地址被重写,而不是创建一个新的数据包。
-
不要忘记 SLIP 或 PPP 协议,它们是点对点的,不需要(也不使用)硬件地址来将数据包定向到。
标签: c sockets networking