设备通信就子网掩码和路由而言
假设我有两台以太网适配器的主机:
局域网适配器 - 连接到局域网,自动获得IP地址。
设备适配器 - 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.该数据报如何发送到设备? 做了什么决定,哪些网络组件参与数据报传送?
网络掩码可以被认为是IP地址的掩码。
如果(address1 & netmask) == (address2 & netmask)
地址2 (address1 & netmask) == (address2 & netmask)
则2个IP地址被视为在同一个子网上。 (这个表达可以用许多不同的方式写成......)
网络掩码只是“虚拟”分割网络的一种方式:网络掩码不是IP头部分的一部分,也不会在线路上传输。 除了设备本身之外,没有人知道网络上设备的网络掩码。 它在设备的tcp堆栈内部用于采取一些基本的路由决策。 请注意,还有其他方法可以定义子网,它可能不涉及网络掩码,但会达到相同的结果:将多个设备分组为“虚拟”网络。
设备插入其中的路由器甚至可以具有与该相同设备的网络掩码不同的定义:只要路由器正确地路由数据包就没有关系。 网络掩码主要用于自动计算一些众所周知的地址:例如,用于udp广播数据包的广播地址是从设备的ip地址及其网络掩码计算出来的。
在你的具体情况下 :
没有物理路由器,但您的计算机是路由器(将数据包内部路由到不同的网络接口)。 你的计算机包含一个路由表,它告诉哪个传出接口一个特定的数据包应该使用(在Windows上,尝试route print
,在Linux上,作为根,尝试route
)。
一般情况下,路由表的设置应使数据包在与目标设备位于同一子网的接口上熄灭。 计算机在每个接口上使用上述逻辑表达式来确定目标是否与此接口位于同一子网上。 如果表达式为真,则数据包熄灭。 每个条目都有一个参数(称为度量标准),允许在多条路径可能的情况下选择看起来最好的接口。
你应该注意到路由表是动态的:它可以被手动修改,添加一个特定的路由(例如,如果你知道一个特定的设备可以通过一个接口到达,但该设备有一个与该接口无关的ip地址地址/网络掩码)。 在本地网络中还有一些协议(arp,dhcp ...),用于广播路由信息,路由信息由系统自动处理以修改路由表。
链接地址: http://www.djcxy.com/p/65791.html上一篇: device communication in terms of subnet mask and routing
下一篇: Get the IPaddress of the computer in an Android project using java