1、什么是UDP?

这里简单介绍下,UDP,即用户数据报协议,一种面向无连接的传输层协议,提供不可靠的消息传送服务。UDP协议使用端口号为不同的应用保留其各自的数据传输通道,这一点非常重要。与TCP相比,占用资源更少,传输速度更快。
2、了解UDP单播、广播和组播
单播:向一个单播地址发送UDP数据报时,数据报只能被指定的IP主机接收,同一子网下的其它主机都不会接收该数据报。单播过程(假设子网地址:192.168.10,该子网下有两台主机:192.168.10.2,192.168.10.3,向192.168.10.2发送数据报)
1.向主机192.168.10.2的8060端口发送数据报,该IP数据报目标IP在以太网中被ARP解析成MAC地址,然后将此MAC地址设置为目标地址发出去。
2.该子网下的主机以太网接口看到该数据帧时,对比自己的MAC地址,如果不一样,则忽略该数据帧。
3.直到192.168.10.2主机看到该数据帧时,发现MAC一致,则读入该数据帧,然后在IP层对比目标IP和本机IP,在UDP层对比端口号是否一致,最后接收该数据帧。
广播:向一个广播地址发送UDP数据报,该广播网络下的所有主机都会受到影响,主机根据端口号来判断是否丢弃该数据。广播过程(假设子网地址:192.168.10,则该网络的广播地址为:192.168.10.255,该子网下有两台主机:192.168.10.2,192.168.10.3,向192.168.10.255发送数据报):
1.向192.168.10.255主机端口为8060发送数据报,,该IP数据报目标IP在以太网中被ARP解析成MAC地址,然后将此MAC地址设置为目标地址发出去。
2.192.168.10.2和192.168.10.3的主机接口都会和此广播地址匹配成功,直到该数据报进入传输层时根据端口是否匹配判断是否丢弃该数据,端口为8060的会保留该数据,否则将数据丢弃。
组播:向一个组播地址发送UDP数据报,该组网络下的所有主机都会受到影响,主机根据端口号来判断是否丢弃该数据。组播过程原理与广播类似。
3、dgram模块API介绍
该模块用来创建UDP数据报socket,继承了EventEmitter,该模块的API如下所示:
3、UDP单播实现
单播的原理上面已经说了,这里便不再叙述。
服务端:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('close',()=>{
console.log('socket已关闭');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket正在监听中...');
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
server.send('exit',rinfo.port,rinfo.address)
});
server.bind('8060');
客户端:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('close',()=>{
console.log('socket已关闭');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('message',(msg,rinfo)=>{
if(msg=='exit') client.close();
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
client.send(`hello`,8060,'1.1.1.69');
3、UDP广播实现
要实现UDP广播,就必须知道广播地址,广播地址如何计算呢?可以利用ipconfig(windows)或ifconfig(*unix)得到ip地址和mask掩码地址,然后利用ip地址与mask子网掩码做与操作得到网络地址,网络地址中主机位都为1就是广播地址,举个例子:
IP:149.88.160.58
mask:11111111.11111111.11000000.00000000
IP&MASK得到网络地址:149.88.128.0/18
网络号就是主机位全为0,即149.88.10000000.00000000 即149.88.128.0
广播地址就是主机位全为1,即149.88.10111111.11111111即149.88.191.255
接着实现UDP广播,我机子的IP为1.1.1.69,掩码为255.255.255.0,因此广播地址为1.1.1.255,服务端向广播地址的8061端口发送数据报,客户端绑定本机的8061端口,如下所示:
服务端:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('close',()=>{
console.log('socket已关闭');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket正在监听中...');
server.setBroadcast(!0);//开启广播
server.setTTL(128);
server.send('大家好啊,我是服务端.',8061,'1.1.1.255');
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
server.bind('8060','1.1.1.69');
客户端:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('close',()=>{
console.log('socket已关闭');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket正在监听中...');
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061,'1.1.1.69');
3、UDP组播实现
组播地址是实现UDP组播的关键,因此了解组播地址是重点。什么是组播地址?IANA将D类地址(224.0.0.0-239.255.255.255)分配给IP组播,用来标识一个IP组播组,由IGMP(组管理协议)协议维护组成员关系,其中:
224.0.0.0~224.0.0.255为永久组地址,地址224.0.0.0保留不做分配,其它地址供路由协议使用;
224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
向组播地址发送数据报,只有该组成员才会接收此数据报。
dgram模块的addMembership()方法将socket加入组播组中,dropMembership()方法退出组播组。下面以组播地址224.100.100.100来实现UDP组播,如下所示:
服务端:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
const multicastAddr = '224.100.100.100';
server.on('close',()=>{
console.log('socket已关闭');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket正在监听中...');
server.addMembership(multicastAddr);
server.setMulticastTTL(128);
setInterval(()=>{
sendMsg();
},1500);
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
function sendMsg(){
server.send('大家好啊,我是服务端.',8061,multicastAddr);
}
server.bind('8060','1.1.1.69');
客户端:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const multicastAddr = '224.100.100.100';
client.on('close',()=>{
console.log('socket已关闭');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket正在监听中...');
client.addMembership(multicastAddr);
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061,'1.1.1.69');
另外UDP内网穿透相关的内容,大家也可自行了解一下。希望对大家的学习有所帮助,也希望大家多多支持。
# Node.js
# 实现UDP通信
# Node
# UDP通信
# dgram模块
# Node.js高级编程之UDP可靠性分析
# node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
# Node.js之如何构建UDP服务
# 组播
# 子网
# 服务端
# 以太
# 客户端
# 所示
# 端口号
# 我是
# 判断是否
# 网络地址
# 好啊
# 将此
# 本机
# 设置为
# 两台
# 自己的
# 组成员
# 网中
# 掩码
# 内有效
相关文章:
如何快速使用云服务器搭建个人网站?
c# 在高并发场景下,委托和接口调用的性能对比
存储型VPS适合搭建中小型网站吗?
如何在阿里云虚拟主机上快速搭建个人网站?
建站之星上传入口如何快速找到?
如何规划企业建站流程的关键步骤?
教学网站制作软件,学习*后期制作的网站有哪些?
如何选择美橙互联多站合一建站方案?
如何通过老薛主机一键快速建站?
如何在局域网内绑定自建网站域名?
太原网站制作公司有哪些,网约车营运证查询官网?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何用景安虚拟主机手机版绑定域名建站?
如何实现建站之星域名转发设置?
如何在云服务器上快速搭建个人网站?
宝塔建站后网页无法访问如何解决?
如何通过西部数码建站助手快速创建专业网站?
如何在VPS电脑上快速搭建网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
广东企业建站网站优化与SEO营销核心策略指南
制作旅游网站html,怎样注册旅游网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何用花生壳三步快速搭建专属网站?
微信小程序 input输入框控件详解及实例(多种示例)
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
如何基于云服务器快速搭建网站及云盘系统?
如何在Ubuntu系统下快速搭建WordPress个人网站?
香港服务器租用费用高吗?如何避免常见误区?
建站之星在线客服如何快速接入解答?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何快速辨别茅台真假?关键步骤解析
清除minerd进程的简单方法
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
广州商城建站系统开发成本与周期如何控制?
如何做静态网页,sublimetext3.0制作静态网页?
建站之星北京办公室:智能建站系统与小程序生成方案解析
成都网站制作报价公司,成都工业用气开户费用?
建站之星2.7模板快速切换与批量管理功能操作指南
如何用虚拟主机快速搭建网站?详细步骤解析
大学网站设计制作软件有哪些,如何将网站制作成自己app?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
图册素材网站设计制作软件,图册的导出方式有几种?
nginx修改上传文件大小限制的方法
如何制作算命网站,怎么注册算命网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。