同网段和跨网段主机通信原理详解[待完善]

同网段

同网段两台主机(主机A、主机B)通信不走网关。

  • 主机A通过掩码计算得知与主机B在同一网络内
  • 主机A通过arp广播给整个局域网的主机
  • 主机B收到arp后,构建包含自己mac的arp包响应主机A
  • 主机A得到主机B的mac后封装包与主机B通信

跨网段

主机A发送arp向网关(主机A与网关地址在同一网段)请求主机B的mac

参考

同网段及跨网段主机间通信原理

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP是一种无连接的传输协议,可以用于网段广播。当我们在一个网络上使用UDP广播时,我们希望能够获取接收广播的服务器主机名和所有IP地址。 在UDP广播过程中,我们可以使用Socket库来实现。 首先,我们需要创建一个UDP广播的发送端Socket对象,设置广播地址和端口号。之后,我们可以通过调用Socket对象的sendto()方法来发送广播数据。在发送广播之前,我们可以通过hostname()函数获取本机主机名。接下来,我们可以使用ifconfig()或者getaddrinfo()函数来获取本机的所有IP地址。 接收端需要创建一个UDP的接收端Socket对象,也需要设置广播地址和端口号。然后,我们可以使用bind()方法将接收端Socket对象绑定到特定的地址和端口上。之后,我们可以使用recvfrom()方法来接收广播的数据包。在接收到数据后,我们可以提取其中的主机名和IP地址信息。 整个过程的代码示例如下: 发送端代码: ```python import socket import platform # 创建UDP发送端Socket对象 sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sender.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 设置广播地址和端口号 broadcast_address = "<你的广播地址>" # 例如:192.168.1.255 port = 1234 # 发送广播数据 sender.sendto(platform.node().encode(), (broadcast_address, port)) # 获取本机所有IP地址 ips = socket.gethostbyname_ex(socket.gethostname())[2] # 打印主机名和IP地址 print("本机主机名:", platform.node()) print("本机IP地址:", ips) ``` 接收端代码: ```python import socket # 创建UDP接收端Socket对象 receiver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置广播地址和端口号 broadcast_address = "<你的广播地址>" # 例如:192.168.1.255 port = 1234 # 将接收端Socket对象绑定到广播地址和端口号 receiver.bind((broadcast_address, port)) # 接收广播数据 data, addr = receiver.recvfrom(1024) # 提取主机名和IP地址 hostname = data.decode() ip_addresses = socket.gethostbyname_ex(hostname)[2] # 打印主机名和IP地址 print("接收到的主机名:", hostname) print("接收到的IP地址:", ip_addresses) ``` 通过以上代码,我们可以实现UDP网段广播返回服务端主机名和所有IP地址的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值