三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 265|回复: 0
打印 上一主题 下一主题

关于 UDP 数据报文(datagram) 尺寸

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-14 08:35:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IPv4/v6 数据报文(datagram)的最大长度依赖于MTU (Maximum Transmission Unit)和 Payload Length 的长度。
  • Payload Length 内容为 16 位宽,它意味着 Payload 的最大字节说不超过 64k,其中包括了头信息和数据(65,507 字节 = 65,535 − 8 字节 UDP 头 − 20 字节 IP 头);对于环回接口(loopback interfaces)这是真的,但对于多数主机和网络来说不太现实。
  • MTU 能支持数据报文(datagram)的最大值(以目前链路层技术来说)。对于任何连接,IPv4 允许的最小值为 68 的 MTU,推荐值为 576(通常推荐作拨号应用的 MTU),无论他们是完整接收还是碎片接收。
    对于 IPv6,MTU 的最小值为 1280 字节,最小碎片缓存大小为 1500 字节。16 字节实在是太小,所以目前链路层一般最小 MTU 大小为 1500。

我们不可能知道一个包可能进过的每个连接的MTU。通常发送一个超过接收端 MTU 大小的数据报文(datagram)会失效。(数据包会被悄悄的抛弃,不会通知发送端数据包没有到达接收端)。
socket.bind(port[, address][, callback])
  • port 整数
  • address 字符串, 可选
  • callback 没有参数的函数, 可选。绑定时会调用回调。
对于 UDP socket,在一个端口和可选地址上监听数据报文(datagram)。如果没有指定地点,系统将会参数监听所有的地址。绑定完毕后,会触发 "listening" 事件,并会调用传入的回调函数。指定监听事件和回调函数非常有用。
一个绑定了的数据报文 socket 会保持 node 进程运行来接收数据。
如果绑定失败,会产生错误事件。极少数情况(比如绑定一个关闭的 socket)。这个方法会抛出一个错误。
以下是 UDP 服务器监听端口 41234 的例子:
  1. var dgram = require("dgram");

  2. var server = dgram.createSocket("udp4");

  3. server.on("error", function (err) {
  4.   console.log("server error:\n" + err.stack);
  5.   server.close();
  6. });

  7. server.on("message", function (msg, rinfo) {
  8.   console.log("server got: " + msg + " from " +
  9.     rinfo.address + ":" + rinfo.port);
  10. });

  11. server.on("listening", function () {
  12.   var address = server.address();
  13.   console.log("server listening " +
  14.       address.address + ":" + address.port);
  15. });

  16. server.bind(41234);
  17. // server listening 0.0.0.0:41234
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-5-3 00:02 , Processed in 0.023830 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表