2

假设我有带有两个以太网适配器的主机:

  1. LAN 适配器 - 连接到 LAN,自动获取 IP 地址。

  2. 设备适配器 - IP 地址为 192.168.10.1,子网掩码为 255.255.255.0。

我也有硬件设备连接到设备适配器,它像 TCP/IP 服务器一样工作,并配置了 IP 地址 192.168.10.2,子网掩码 255.255.255.0。

我有以下愚蠢的规则来建立主机-设备通信:将两个子网掩码都设置为 255.255.255.0,并定义仅由最后一个组件不同的 IP 地址。没关系,它有效。

现在我正在阅读有关 TCP/IP 通信的全部理论 (www.tcpipguide.com)。如何从网络、子网、掩码、路由等方面描述我的案例?例如,主机程序发送UDP数据报到192.168.10.2,端口1500。这个数据报是如何发送到设备的?做了哪些决策,哪些网络组件参与了数据报的传递?

4

1 回答 1

1

网络掩码可以被认为是 IP 地址的位掩码。

如果(address1 & netmask) == (address2 & netmask)那么 2 个 ip 地址被认为在同一个子网上。(这个表达式可以写成许多不同的方式......)

网络掩码只是“虚拟”划分网络的一种方式:网络掩码不是 ip 标头的一部分,也不在线传输。除了设备本身,没有人知道网络上设备的网络掩码。它在设备的 tcp 堆栈内部使用,以做出一些基本的路由决策。请注意,还有其他方法可以定义子网,这些方法可能不涉及网络掩码,但可以达到相同的结果:将多个设备分组到“虚拟”网络中。

插入设备的路由器甚至可能对同一设备有不同的网络掩码定义:只要路由器正确路由数据包就没有关系。网络掩码主要用于自动计算一些众所周知的地址:例如,用于 udp 广播数据包的广播地址是根据设备的 IP 地址及其网络掩码计算得出的。

在您的具体情况下

没有物理路由器,但您的计算机是路由器(它在内部将数据包路由到不同的网络接口)。您的计算机包含一个路由表,它告诉特定数据包应该使用哪个传出接口(在 Windows 上,try route print,在 linux 上,作为 root,try route)。

通常,路由表的设置是为了使数据包在与目标设备位于同一子网的接口上发出。计算机在每个接口上使用上述逻辑表达式来确定目标是否与该接口位于同一子网上。如果表达式为真,则数据包出去。每个条目都有一个参数(称为度量),允许选择看似最佳的接口,以防可能有多个路由。

您应该注意路由表是动态的:可以手动修改它以添加特定路由(例如,如果您知道可以通过接口访问特定设备,但该设备的 ip 地址与该接口 ip 无关地址/网络掩码)。本地网络中还使用一些协议(arp,dhcp ...)广播路由信息,系统会自动处理这些协议以修改路由表。

于 2011-12-20T13:28:30.003 回答