内网打洞以及代码实现

2019-03-15 15:32:09

UDP-NAT简介:

1.一个NAT端口必须对应唯一的(内网ip:port)。

假设内网的多个ip或者同一ip的不同port,都要访问同一个(外网ip:port)。对NAT来说,从外网接收的包它的(srcIp:srcPort)==(serverIp,serverPort),它的dstIp==natIp,所以NAT只能用dstPort来决定把这个包转发给哪一个(内网Ip:port)

2.根据下文,cone nat中,一个NAT端口对应多个(外网ip:port)。

NAT根据从外网接收的包的dstPort,查找(srcIp,srcPort)在不在该dstPort对应的外网(ip,port)中。在则转发给内网,不在则丢弃掉

3.示例代码中如何处理UDP包的丢失、延迟。

clientA向clienB发送消息时,打洞要三个包(clientA请求server,server请求clientB,clientB打洞),发消息要三个包(clientA发消息头,clientA发消息体,clientB发确认包),任何一个包都可能丢失。只要clientA没有收到确认包,clientA便重复以上过程;而server、clientB并不处理包丢失的情况,程序的逻辑相当简洁!


  • 2020-03-03 09:51:38

    写一个可插入自定义标签的 Textarea 组件

    为了实现这个功能,我最先想的是改造一个 <textarea> 然后我想到了 contenteditable (链接指向 mozilla.org) 这一属性 这是一个 html5 的属性,可以让元素内容可编辑

  • 2020-03-03 20:18:21

    Vuepress如何做到在 Markdown 中使用 Vue 语法

    在 vuepress 刚出时,我就觉得这是个很值得追更的开源项目。果不其然,里面众多的前端编程技巧让我受益良多。 于是在周末这种日子里,人家追剧我追码。 今天,我就和大家分享下 vuepress 是如何做到在 Markdown 中使用 Vue 语法的。

  • 2020-03-03 21:35:57

    PWA:安装 Web 应用

    要完整介绍 PWA 是什么,需要扯一堆名词,毫无意义。 以改造公羊阅读的过程为例,简要的说明什么是 PWA。

  • 2020-03-04 13:00:23

    NPM酷库:minimist,命令行参数解析

    昨天我们了解的dotenv库用于从文件中加载环境变量。环境变量用于程序运行时动态加载参数,除了环境变量,我们还可以在启动Node.js 程序时直接指定命令行参数: