发送网络数据包成三种方式,每间单播、组播、广播。
广播通俗地讲,就是让你的机器发送的数据包能够被同一个网络内的全部主机都接收到。
在解说怎样发送广播包之前。先来看看跟广播有关的知识:
我们都知道IP地址的作用是用来在网络中定位某个网络接口的(没错,准确的讲。IP并非定位某一台主机)。
我们通常见到的IP地址的形式都是例如以下这样子的:
XXX.XXX.XXX.XXX
这样的IP地址的形式叫做点分十进制表示法,事实上IP是一个32位长的二进制数,以每8位为单位,共分成4个部分。也就是分成了4个字节。
IP地址的组成方式是: [网络号]+[主机号]
网络号是用来标识某个网络的,而主机号是用来标识网络中的某一台主机的(事实上是主机上的某个接口)。
通常计算机发送一个数据包时会在数据包的头部加上发送者的IP地址。和接收者的IP地址。
可是一般计算机发送数据包的时候,同一个网络内的全部主机都会收到这个数据包,可是仅仅有那个自己的IP地址和数据包中的接收者的IP地址同样的那个计算机才会真正接收这个数据包。
假设要让网络(同一网络)中的全部计算机都能收到这个数据包。就应该将这个数据包的接收者地址设置为这个网络中的最高的主机号。通常255.255.255.255就能够达到这个要求。所以我们假设要发送一次UDP广播报文,就能够试试例如以下实例代码:
package main import "net" func main() { // 这里设置发送者的IP地址,自己查看一下自己的IP自行设定 laddr := net.UDPAddr{ IP: net.IPv4(192, 168, 137, 224), Port: 3000, } // 这里设置接收者的IP地址为广播地址 raddr := net.UDPAddr{ IP: net.IPv4(255, 255, 255, 255), Port: 3000, } conn, err := net.DialUDP("udp", &laddr, &raddr) if err != nil { println(err.Error()) return } conn.Write([]byte(`hello peers`)) conn.Close() }
打开WireShark,设定过滤规则为udp.port == 3000, 然后运行一下程序。就能够抓到我们发送的广播包了:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ29waGVycw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
假设转载请注明出处:http://blog.csdn.net/gophers
版权声明:本文博客原创文章。博客,未经同意,不得转载。