最近的实验一直涉及通过各种协议实现通信,遇到了一些问题,总结一下
内网和外网
这一组概念是相对于某个组织而言的,如果你在一个局域网内(比如学校、公司等),那局域网外部的网络都叫外网, 你自己所在的网络就是内网。
私网和公网
公网就是人人都能访问的网络,比如www.baidu.com
私网顾名思义,私有网络,未经授权无法访问的网络。局域网也是某种意义上的私网。私网地址产生的一个原因是因为公网地址非常缺乏,大家不得不使用同一个公网IP地址上网。
一般看见IP地址是 10...*就是私网
宽泛而言,内网≈私网 外网≈公网,不过这也得看具体场景。
场景举例
eg1: 我在学校,买了阿里云服务器,相对于我而言,阿里云服务器是外网,也是公网;相对于阿里云服务器所在的网络而言,我的学校的网是外网,也是私网。
eg2:我在学校,想要连接公司的网,公司的网相对于我而言是外网,但肯定不是公网(这里默认大家都可以访问);我在公司想访问学校的教务,学校的网相对于我而言是外网,但学校的网也不是公网。
在eg1中,如果我ping阿里云服务器,肯定能得到结果;但是我进入阿里云服务器ping自己的IP地址,就ping不通!因为我的网属于私网,私网中的各设备相互ping是没问题的,私网中是设备ping阿里云服务器也是没问题的(这里会涉及到NAT,网络地址转换,后面说),但是如果我的设备没有事先作内网-公网的转换,阿里云服务器是ping不通我的,换言之,阿里云找不到我在哪~
NAT 网络地址转换
当主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad
- 静态转换
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。
此处的解释摘自https://blog.csdn.net/qq_21125183/article/details/86487747
当内网主机 192.168.1.2如果要与外网的主机202.20.65.4通信时,主机(IP:192.168.1.2)的数据包经过路由器时,路由器通过查找NAT table 将IP数据包的源IP地址(192.168.1.2)改成与之对应的全局IP地址(202.20.65.4),而目标IP地址202.20.65.4保持不变,这样,数据包就能到达202.20.65.4。而当主机HostB(IP:202.20.65.4) 响应的数据包到达与内网相连接的路由器时,路由器同样查找NAT table,将IP数据包的目的IP 地址改成192.168.1.2,这样内网主机就能接收到外网主机发过来的数据包。在静态NAT方式中,内部的IP地址与公有IP地址是一种一一对应的映射关系,所以,采用这种方式的前提是,机构能够申请到足够多的全局IP地址。
2.动态转换
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的
此处的解释摘自https://blog.csdn.net/qq_21125183/article/details/86487747
动态转换(亦称NAT pool)是指不建立内部地址和全局地址的一对一的固定对应关系。而通过共享NAT地址池的IP地址动态建立NAT的映射关系。当内网主机需要进行NAT地址转换时,路由器会在NAT地址池中选择空闲的全局地址进行映射,每条映射记录是动态建立的,在连接终止时也被收回。
动态NAT方式适合于 当机构申请到的全局IP地址较少,而内部网络主机较多的情况
3.端口多路复用
此处的解释摘自https://blog.csdn.net/qq_21125183/article/details/86487747
网络地址端口转换NAPT(Network Address Port Translation)则是把内部地址映射到外部网络的一个IP地址的不同端口上。它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。
如果两客户机访问同一服务器的源端口不同,那么在Track Table里加入端口信息即可区分
参考链接
https://www.zhihu.com/question/337578873
https://blog.csdn.net/qingshenxue/article/details/6196665
https://blog.csdn.net/qq_21125183/article/details/86487747