程序设计
TCP
服务器端监听0.0.0.0以获取所有网卡(主机所有IP地址)收到的请求
netstat -aptn#查看主机端口
socket底层有缓冲区,就算程序阻塞也能暂存收到的数据
代替客户端发起tcp连接
UDP
用sendto和recvfrom方法通信
因为端口只能绑定一次,所以服务端需要bind,以防和本地客户端冲突
查看运行的端口
UDP高级应用
- UDP广播数据包
广播只能在一个广播域(局域网)中传播,而不能跨网段传播
ARP协议,做MAC发现
vlan,实现局域网逻辑隔离 - 组播数据包
能够在组播组中进行传播的,并且路由器可以进行组播数据转发
修改套接口选项,实现广播
如果没有设置BLOADCASE选项的不递送。
如果bind端口不匹配不递送该套接口
如果绑定的不是INADDR_ANY话,那么BIND的地址和目的地址匹配才能递送:也就是说你必须BIND一个广播地址或者绑定INADDR_ANY
用ifconfig命令可以disable块网卡的BROADCAST标志,让其不能接受以太网广播。
也可以使用ioctl的SIOCSIFFLAGS方法去掉一个接口的标志IFF_BROADCAST,使之不能接受以太网广播。
linux抓包工具
如何识别广播包
MAC:FF:FF:FF:FF:FF:FF
IP:10.0.0.0/8 —>10.255.255.255
192.168.199.1---->192.168.199.255
组播
IP层实现远程通信,组播需要指定组的IP(也可以是域名),本机IP
bind组播地址
224.0.0.1—239.255.255.255
组播IP和局域网IP差不多,可以复用,是虚拟形式上的IP
将当前UDPsocket加入组