UDP打洞原理总结

一:UDP打洞的用途

    当你编写的程序,需要两个局域网能够进行通信的时候,UDP打洞不失为一种好方法。简而言之,UDP打洞是为了实现两个局域网进行直接通信。

    两个局域网为什么不能通信呢?(这里所说的是两个不同的局域网),主要原因就是局域网中的ip不能被互联网认识,与外网交互必须通过NAT服务。

    那什么是NAT服务呢?NAT服务一般继承在路由器,防火墙,或者单独的NAT设备中,英文全称为Network Address Translation.顾名思义,NAT服务的作用就是网络地址转换。

    简而言之,由于中国区域分配的ip太少,我们只有利用NAT服务来实现很多电脑使用一个ip的效果,许多共用一个上网ip的电脑组成了一个局域网,例如家里的路由器可以提供家里的手机,电脑,等一起上网。

    NAT服务的原理:当一台局域网的主机想连接互联网的时候,这台主机向往常一样,把自己的消息封装好,然后填上要发送的ip地址,然后发给局域网里的交换机,交换机收到消息后对ip地址进行判断,发现ip地址不在本局域网,交换机就会把消息发送给网关,(网关相当于自己局域网通向internet的大门,这个时候nat服务发生作用,)把这台主机的内网ip和端口号封装成可以在外网使用的ip和端口号,并记录下来,这个主机就对应这个ip和端口号,然后把消息发送出去,外边的主机发送消息给这台主机的时候,他们发送过来的消息的ip必须是刚才封装好的ip和端口号,然后网关接收到之后进行查询,就知道对应的是本局域网的那一台主机了,然后把消息发给它。从而实现局域网主机上网的功能。

二:UDP打洞的原理

    在上面的解释中我们已经知道NAT的用途和原理,那要怎样实现两个局域网之间的通信呢?需要借助一个中间服务器,

    第一:两台局域网主机分别先和服务器连接,服务器获得两边的经过NAT转换的ip和端口号。

    第二:其中一台局域网主机,向服务器发送消息,告诉服务器他要和另一台局域网进行打洞,服务器接收到消息会把主动要求连接的一方的ip和端口号发给被动的一方。

    第三:被动的一方收到之后先给这个ip和端口发送一个消息,但是主动的一方不会收到消息,消息会被NAT丢弃,因为主动的一方不曾给被动的一方发送过消息,NAT没有注册这条通道,所以不认识被动主机的ip。然后被动的主机再给服务器发送个消息,让服务器告诉主动的主机这边已经注册好了NAT可以进行通信。

    第四:主动的主机这时候拿到了服务器发给它的被动的主机的ip和端口号,然后发送消息,被动的主机就可以进行接收了。两边就建立了一个类似洞口一样的东西,这就是UDP打洞。

由于本人才疏学浅,表达能力有所欠缺,有疑问直接留言吧,希望能够帮到你。

猜你喜欢

转载自blog.csdn.net/qq_37468954/article/details/77285092