C#UDP广域网,局域网通讯-原理分析

一.UDP局域网通讯。安全

这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通讯,网络上一大把,直接复制粘贴就可使用,原理也很是简单。因此,本文不作详细介绍。服务器

二.UDP广域通讯(包括路由器穿透技术)网络

广域网中的通讯就比局域网复杂多了,并且会出现不少状况,每种状况的处理方式不一样,下面一一道来。学习

1. 2台直接链接广域网中的计算机的UDP通讯:路由

这种状况是最简单的一种,由于这2台计算机直接暴露在广域网环境下,他们都拥有独立的外网IP地址。这种状况咱们能够直接利用2台计算机的外网IP和端口创建UDP数据通讯,和局域网很是相似。原理

2. 1台经过路由器上网的计算机与1台直接链接外网的计算机的UDP通讯(不考虑路由器端口映射的状况):软件

这种状况就和上面的状况不同了。咱们将经过路由上网的计算机称做A,将直接链接外网的计算机称做S。要实现A和S的UDP相互通讯,只有一个办法。就是A主动和S联系,也就是说,A先向S发送UDP数据包。必定不能反向,由于S根本不知道A的通讯地址。就算是知道了,S向A发送的数据包也会被A的路由器所拦截,由于在A的路由器看来,S主动发出的UDP数据包是不请自来的,是不安全的,因此会主动摒弃掉。可是,当A主动和S联系后,A的路由器就会记录下S的地址,咱们能够理解为一个通行证,这个时候S在向A发数据的时候,S已经拥有了通向A的通行证,因此,路由器会友好的将这个数据包传递到A。从而,咱们就创建起了A到S的通讯。同理,咱们能够推出N台经过路由器上网的计算机和一台直接链接外网的计算机间的UDP通讯。而这个时候,咱们S就充当起了服务器的做用,用于和每台其余客户机的链接并传递数据,如今咱们所用的大多数广域网的通讯软件,都是采用服务器转发的机制来实现计算机间的通讯。路由器

3. 2台都经过路由器上网的计算机之间的UDP通讯:请求

这种状况就变得很是复杂了,若是要实现2台经过路由器上网的计算机间的UDP通讯,咱们必需要在他们直接搭建一个桥梁,这个桥梁就是直接链接外网的S(服务器)。虽然这种方式不推荐,可是抱着研究学习的态度,我仍是研究了下。可能在现实的项目中根本用不到这种方式,由于咱们彻底能够经过服务器转发的方式来完成全部计算机(不论是内网仍是外网)的相互通讯。im

下面开始本篇文章的重点,2台内网计算机(经过路由器等设备上网的计算机)的UDP穿透。首先,咱们把这2台计算机称为C和D。若是C或者D直接向对方发送UDP数据包,即使是他们已经知道对方经过路由器转换后的外网IP和端口,他们也不会收到来自对方的任何数据包,缘由在第二种状况中已经说明,他们的路由器都会认为对方的数据包是不请自来的,不安全,都会一一摒弃掉。这个时间,咱们就须要服务器S了,他要在他们二者中充当介绍人的身份。

经过第二种方式,咱们已经知道了内网计算机怎样和外网计算机之间创建UDP通讯,因此,咱们的C和D均可以分别和S创建UDP通讯,他们与S的通道是能够一一打通的。这个时候,咱们的S端,已经有了C和D经过路由器转换后的外网通讯IP和端口,而且保存下来,在接下来的步骤中有重要做用。这个时候,①C向S发出请求,告知C想和D通讯而且请求D的外网IP和端口。②S端口收到C的请求后,向C发送有关D外网地址的数据包。③C收到有关D的通讯地址数据包后,很是重要的一步来了,C立刻向D的通讯地址发出一个UDP数据包,能够是任何内容,由于这个数据包D根本不会收到。但之因此要这样作的缘由是让C的路由器记录下D的通讯地址,也就是说,让D在C的路由器处得到通往C的通行证。④这个时候,C立刻向S发送数据包,让S告诉D,C已经容许D经过了,⑤而且向D发送C的外网IP和端口。⑥当D收到S发出的这个数据包后,D立刻向获取的C的地址发送一个UDP请求包,这个时候,C是会收到的。当D向C发出数据包后,D的路由器也记录下了C的通讯地址,因此,C也有了向D发送数据的通行证。当C接收到D的数据包后,C再向D回一个UDP应答包,这个时候,他们2者的UDP通讯已经创建了,咱们也就大功告成了。下面是整个通讯的流程图:

 

相关文章
相关标签/搜索