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

这是张富涛的第5篇原创

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

1. TCP与UDP简介

在Java中,网络编程有两种通讯协议:TCP 和 UDP。

其中两种传输方式的优缺点对比:

  • TCP:优点较为安全,缺点是较慢。

  • UDP:优点较快,缺点是“丢包”。

传输方式的差别:

  • TCP:A链接B,只要链接上就不用再次建立链接,下次可以直接传输(类似打电话)

  • UDP:数据发送过去,不关心消息送没送到,不关心传输地址存不存在,消息发送了之后,链接就断开了(类似发快递、给离线的用户发送qq)

2. 什么是端口

每个应用程序都有权利去接收和发送一些网络数据,而一个计算机上可能运行着上千个应用程序,所以计算机发明了一个计算机上的地址——端口。端口用来区分接发信息的网络应用程序的唯一性的东西。

端口最多有65535个,但是1~4000端口是“系统保留端口”,“系统保留端口”的意思是系统霸占了的端口,我们尽量不要用4000以下的端口,因为系统不确定什么时候会用,但是这也说明:系统要是用端口,就不会用4000以上的端口。 所以4000以上的端口都是用户注册的端口。

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”。

外界无法直接找到电脑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浏览器还有玩游戏等路由器都自动配置了映射关系,所以并不需要我们去手动配置,而如果我们在内网中搭建一个服务器,外网想要访问的时候,我们就需要手动去进行映射了。

最近我在为我们的“万方数据知识服务新平台”增加微信支付功能,如果微信支付成功,微信需要向我的服务器发送一条支付成功的notify通知,可是在项目正式上线之前,微信是通知不到我本地计算机的。因为我们一个办公室的网络链接的是同一个路由器,说明我们共用一个网络,不论我直接填写了“内网的ip地址”还是“路由器的公网ip”,微信都找不到我,这时我们有两个解决方案:一种是利用端口映射技术,将我们“内网ip”及“tomcat端口”都映射到路由器上,另外一盅是借另外一台直接连接到公网的计算机搭建项目进行调试。

但是无论如何,将“内网的ip地址”或“路由器的公网ip”告诉微信让其进行通知这种做法都是不对的,小伙伴们在开发的时候一定要注意哦!



---------------

公众号:张富涛的学习笔记(ID:futaoNT)

知乎:张富涛

CSDN:张富涛

B站:你给的宝物

这是一个在夜晚可以靠编程拯救世界的程序员,关注他将在第一时间获悉他的知识、工作心得!

长按下图二维码关注:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值