网络编程:TCP与UDP简介及端口映射技术

这是张富涛的第5篇原创网络编程:TCP与UDP简介及端口映射技术 1. TCP与UDP简介
在Java中 , 网络编程有两种通讯协议:TCP 和 UDP 。
其中两种传输方式的优缺点对比:
传输方式的差别:
2. 什么是端口
每个应用程序都有权利去接收和发送一些网络数据 , 而一个计算机上可能运行着上千个应用程序 , 所以计算机发明了一个计算机上的地址——端口 。端口用来区分接发信息的网络应用程序的唯一性的东西 。
端口最多有65535个 , 但是1~4000端口是“系统保留端口” , “系统保留端口”的意思是系统霸占了的端口 , 我们尽量不要用4000以下的端口 , 因为系统不确定什么时候会用 , 但是这也说明:系统要是用端口 , 就不会用4000以上的端口 。所以4000以上的端口都是用户注册的端口 。
【网络编程:TCP与UDP简介及端口映射技术】TCP和UDP同时可以占用一个端口 , 但是尽量不要用同一个端口 。
3. 端口映射
比如A和B两个电脑通过路由器连接网络 , 他们共同分享的ip是路由器中公网的ip,同时他们自己也有一个ip , 是内网的ip , 外界是无法直接找到连接到路由器中的电脑的 , 原因就是在于内网的ip是虚拟的 , 多个计算机链接路由器上网 , 他们没有属于公网中的ip , 他们共用的是路由器的ip , 而路由器也不知道这条请求到底是访问到哪个计算机的哪个端口 , 所以出现了端口映射这个概念:
如下图 , 路由器通过ASDL拨号上网获得到的公网ip为:61.1.1.1 , 电脑A和B通过路由器上网 , 他们共享“61.1.1.1”的网络 , 并且或得到了两个内网的ip:“168.160.1.1”和“168.160.1.2” 。

网络编程:TCP与UDP简介及端口映射技术

文章插图
外界无法直接找到电脑A或者电脑B , 如果外界发送一条请求 , 找到的ip只能为“61.1.1.1” , 可是这个路由器也分不清究竟这条请求时找的电脑A还是电脑B , 此时我们就要用“端口映射”这个技术来解决这个问题了 。
我们可以手动操作:将“电脑A”的要接收这条请求的应用端口 , 映射到路由器中的一个端口 , 比如“电脑A”的4001端口需要接收这条请求 , 我们将路由器的4002端口 , 对应到“电脑A”的4001端口 , 请求发送到“61.1.1.1:4002” , 就会转发到电脑A的内网:“168.160.1.1:4001”上 。
这就是端口映射技术 。
那为什么我们平时在家链接路由器 , QQ等软件不需要我们手动的去将端口映射到路由器上呢?这是因为我们平时用QQ等软件、IE浏览器还有玩游戏等路由器都自动配置了映射关系 , 所以并不需要我们去手动配置 , 而如果我们在内网中搭建一个服务器 , 外网想要访问的时候 , 我们就需要手动去进行映射了 。
最近我在为我们的“万方数据知识服务新平台”增加微信支付功能 , 如果微信支付成功 , 微信需要向我的服务器发送一条支付成功的通知 , 可是在项目正式上线之前 , 微信是通知不到我本地计算机的 。因为我们一个办公室的网络链接的是同一个路由器 , 说明我们共用一个网络 , 不论我直接填写了“内网的ip地址”还是“路由器的公网ip” , 微信都找不到我 , 这时我们有两个解决方案:一种是利用端口映射技术 , 将我们“内网ip”及“端口”都映射到路由器上 , 另外一盅是借另外一台直接连接到公网的计算机搭建项目进行调试 。