对于初学者而已,我们学习的网络编程(如TCP,UDP编程),我们通常都是在局域网内进行通信测试,有时候我们或者会想,我们现在写的内网网络数据和外网的网络数据有什么不同,我们内网的数据是如何走出外网的呢?

再者,我们大多人都是使用宽带上网,结果发现,A 和 B 的局域网 IP 都是192.168.31.11,当他们都访问百度浏览网页时,百度服务器回复数据时,如何区分是给 A 还是给 B 呢?

公有 IP 和私有 IP 的区别

首先,我们需要了解一下什么是公有 IP 和私有 IP ?

公有地址(Public address):由 Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些 IP 地址分配给注册并向Inter NIC提出申请的组织机构,公有 IP 全球唯一,通过它直接访问因特网(直接能上网)

私有地址(Private address):属于非注册地址,专门为组织机构内部使用,说白了,私有 IP 不能直接上网

而我们平时通过运营商(电信、移动、联通宽带等)上网,家里面通过路由器分出来的 IP 都是私有 IP(局域网 IP),大家可能会疑问,我们可以上网啊,怎么会是私有 IP 呢?租用(申请)公有 IP 是需要钱的。 运营商买了一些公有 IP,然后通过这些公有 IP 分出来,再分给一个一个的用户使用。这个过程有点类似于,我们去安装了宽度,通过路由器分出几个 IP,让好几个人都能上网,当然运营商通过公有 IP 分出来的过程肯定比这个复杂多了。所以,我们平时上网用的 IP 是私有 IP,真正拥有公有 IP 的是运营商(当然,我们可以租用一个公有 IP )。所以,A 家庭的局域网 IP 和 B 家庭的局域网 IP 相同很正常,但是,最终 A 和 B 能上网(数据走出去)还是通过运营商的公有 IP,毕竟,公有 IP 的资源有限,这一片区域的用户使用的很有可能(实际上就是这样的)是同一个公有 IP,这样的话,又回到前面的问题,假如 A 和 B 的局域网 IP 相同(192.168.31.11),当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 A,哪个是 B 呢?

端口映射

接下来,给大家介绍一下什么是端口映射?

端口映射是 NAT 的一种,它将外网主机的 IP 地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

现在市场上的家庭路由器都具备 NAT 功能,也可以实现端口映射。下图为小米路由器的端口映射设置图:

我们平时经过路由器,通过宽带,最终去到运营商那边,数据是从运营商出去,最终数据是回到运营商那边,运营商再把数据发送到用户的电脑。

路由器,至少有两个端口:WAN 口和 LAN 口。

WAN:接外部 IP 地址用,通常指的是出口,转发来自内部 LAN 接口的 IP 数据包,这个口的 IP 是唯一的。
LAN:接内部 IP 地址用,LAN 内部是交换机。

这里,我们简化这个过程,我们把运营商当做一个 NAT 设备。

为了方便大家理解,我们把 IP 的转化方向反过来分析(准确来说,公网转局域网)。

A 电脑的 IP 是局域网 IP(192.168.31.11),这个 IP(192.168.31.11)是从路由器的 lan口分配的。

当我们上百度的时候,经过路由器的 wan口,进行相应的IP、端口转化:192.168.31.11:80 -> 10.221.0.24:8080,所以,从 wan口出去的地址为:10.221.0.24:8080。

最后,经过运营商,运营商那边会做相应的端口映射(而且是动态端口映射),子网 IP(10.221.0.24:8080)转化为公网 IP(128.0.0.1:8888),通过这个公网 IP 去访问百度服务器。

同理,B 的过程也是一样。通过这样的层层端口映射,最终保证地址(IP + 端口)的唯一性。A 和 B 访问百度服务器,尽管它们的局域网 IP 是一样的,但是最终它们访问百度的地址(IP + 端口)是唯一的,所以,百度服务器回复时,原路返回时能够区分到底给谁回。

如何让外网能够访问自己写的网络程序(服务器)

首先,我们需要在运营商那边申请(租用)一个公有 IP (长城宽带一年需要 2000 元左右),假如这个公有 IP 为:128.0.0.123。

假如,我们写的服务器如下:

接着,找个 NAT 设备进行相应的端口映射,家庭路由器都有这个功能。这里以小米路由器为例:

映射关系如下:

最后,其他人写客户端程序时(电脑能上外网),只要指定目的 IP 地址为 128.0.0.123,端口为 8888,通过这个地址,就能找到192.168.31.248:8080,因为这两者已经建立好映射,如上图,这样,我们的服务器就能收到数据。

内网和外网之间的通信相关推荐

  1. CCNA-NAT协议 静态NAT 动态NAT(多对多) PAT(多对一) 内网与外网之间的通信 GNS3实验验证

    目录 实验视频简讲解链接 NAT协议概述 NAT 网络地址转换 NAT协议种类归类: NAT实验练习 实验拓扑 实验设备准备设置 实验验证过程 第一部分: 验证静态NAT 第二部分:验证多对多的动态N ...

  2. 内网和外网之间的通信(端口映射原理)

    内网和外网之间的通信(端口映射原理) 首先解释一下"内网"与"外网"的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具 ...

  3. UDP内网和外网连接通信的问题

    这几天忙着搞UDP的socket通信,忙乎了几天终于有点成就了,窃喜下.... 如果你不懂内网和外网的区别,不懂局域网和广域网就先熟悉下,再来看程序.我目前的情况是客户端在一个内网上,要连接外网的服务 ...

  4. 网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?

    相信很多人都不知道内网.外网.宽带.带宽.流量.网速之间的区别与联系,今天小编给大家介绍一下,希望对大家能有所帮助! 一.带宽与宽带的区别是什么? 带宽是量词,指的是网速的大小,比如1Mbps的意思是 ...

  5. DMZ-一种中间地带,鉴于内网与外网之间的自由地带。----黑客寄生的地方?

    两个防火墙之间的空间被称为DMZ.与Internet相比,DMZ可以提供更高的安全性,但是其安全性比内部网络低. DMZ是英文"demilitarized zone"的缩写,中文名 ...

  6. 服务器内网与外网的四大区别?

    服务器中的内网.外网是什么意思? 内网又称局域网(Local Area Network,LAN),是指在某一区域内由多台计算机以及网络设备构成的网络,比如校园网.政府网等,一般方圆几公里. 内网 即局 ...

  7. IP、内网、外网、私网、公网、子网掩码、默认网关的概念解析

    本文梳理一下网络基础中的一些重要概念. 一.IP IP(Internet Protocol,网际互连协议)地址就是给每个连在Internet网的主机分配一个在全世界范围内唯一的标示符,Internet ...

  8. IP地址(内网与外网)

    什么是内网ip ipv4是目前比较广泛使用的一个版本,它是由32位二进制数组成的,但是ip毕竟是有限的,随着计算机的爆炸性增长和移动网络的普及,ip地址越来越不够用,于是出现了一门技术叫NAT技术,N ...

  9. uboot 如何设置网关地址_两种网络地址段,如何设置内网和外网一起上?

    一般企业都会有自己内部专用业务网络.及对外的互联业务两个网络,在具体使用过程中,根据业务类型的不同.部门职能的不同而分开使用两种网络. 但在使用过程中总会有特殊情况,就是一台电脑要同时使用两种业务网络 ...

  10. 实习笔记0708 https协议/ django中间件/接口测试/内网与外网/域名系统DNS

    1 https协议 https://www.cnblogs.com/superfeeling/p/11561340.html https://www.cnblogs.com/an-wen/p/1118 ...

最新文章

  1. python简单编程例子-中文方便就用中文编程!Python图形界面开发实例
  2. 虚拟主机TOMCAT配置
  3. 用UltraISO制作的u盘ubuntu11.04,启动失败解决方案
  4. vtkSuperquadricSource:创建以原点为中心的多边形超二次曲面
  5. SpringMVC+MyBatis+MySQL实现分页
  6. exp导出excel oracle_OracleToExcel_Oracle导出excel数据(OracleToExcel)下载 v3.1 官方版 - 121下载站...
  7. 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is
  8. 快、准、狠!秒杀Excel的报表工具,十分钟教你做好数据填报
  9. SQL 面试题及答案(一)
  10. 麦子学院-第一阶段-测试基础
  11. python terminal_一个简单、易用的Python命令行(terminal)进度条库
  12. (软考信息安全工程师--中级)二、网络攻击原理与常用方法
  13. VS2015卸载方法
  14. 天猫官方出品运营宝典-小二带你解读行业趋势
  15. 云研发 IDE Uncode:演示版发布(欢迎加入开发)
  16. 使用 Spring Boot websocket 写简单网页聊天室
  17. 虚拟机硬盘格式的选择:qcow2、 raw等
  18. Springsecurity+cas整合后无法单点登出
  19. 【Spark】(五)Spark Transformation(转换算子) 和 Action(执行算子)
  20. Hbuilderx 代码折叠和展开

热门文章

  1. MyBatis中如何使用insert标签呢?
  2. 3D-3D:ICP_SVD
  3. Android中fastboot devices无法发现设备解决方案和adb remount问题解决
  4. Java 链表知识总结
  5. 时间戳计算获取今天起始本周每天起止本月每天起止本周起止本月每周起始时间本年每月起止时间本年每个季度的起止时间
  6. 华虹半导体发力国际MCU市场
  7. Linux之ant安装部署
  8. Android 8.0 VTS 测试 FAIL 项解决记录
  9. CSS设置元素的透明度(不透明度)
  10. math_角函数反三角函数诱导公式三角/反三角恒等式