【JavaEE】IP协议详细讲解

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: JavaEE & IP协议1. 地址管理我们希望,每个网络上的设备,要能分配到一个地址(唯一)1.1 IP协议报文格式

JavaEE & IP协议


1. 地址管理


我们希望,每个网络上的设备,要能分配到一个地址(唯一)


1.1 IP协议报文格式



本质上,IP地址就是一个32为的整数


   点分十进制的形式~

   三个点分成四个部分,每个部分0-255


而如果单看int的取值范围


   它可以表示42亿9千万的数据

   2147483648 * 2

       字节换算牢记(常见)

       0 - 255 ==> -128 - 127

       0 - 65535 ==> -32768 - 32767

       0 - 42亿9千万 ==> -21亿 - 21亿


显然,这是不够用的


   全世界有很多的电脑,服务器路由器,还有很多很多很多的手机~


1.2 动态分配IP地址


设备上网才分配,不上网就不分配


   可以省下一大批ip地址,但是并没有增加ip地址的数量

   治标不治本,只能缓解~


路由器的一个功能,DHCP


   如果开启了DHCP,此时路由器就自动给你的设备分配一个局域网内唯一的ip

       默认是开启自动分配的

       不开启也可以,但是需要人工来保证你的ip是唯一的

       如果与别人重了,两个人都得寄


昨天的IP和今天的很可能不一样~


1.3 NAT机制


它把所有的IP地址分为两大类:


   内网IP: 【10.* 】或者【172.16.* ~ 172.31.* 】或者 【192.168.* 】

       只要是这三种开头的,都被称为内网ip

   外网IP:剩下的ip


   多个设备一个外网IP,一个设备一个内网IP

   不同外网IP的设备,可以有同一个内网IP


例子:


我们在现实中其实也不少见这种情况


   例如在学校网购,如果只有一个快递驿站,那么所有学生老师的快递的地址都填的是学校的地址

   学校的地址是唯一的,但是这个包裹的主人不一定唯一


即,内网设备如果要访问外网,会给它分配一个外网IP


   这个外网IP并非某设备的专属,

   而是这个内网中的所有设备都共用这一个外网IP~


在这样的放宽之下,IP就够用了~


什么是内网和外网:


   局域网可以称之为内网

       一个设备的局域网的内网IP

   对于内网和外网的规模规范,没有明确,类似局域网和广域网的界限

   在广域网内的外网ip(局域网在广域网中的位置),内网设备要向与外界交流,必然有一个外网IP,即所属局域网共用IP

控制台ipconfig:


   内网IP

   iP地址查询–手机号码查询归属地 | 邮政编码查询 | iP地址归属地查询 | 身份证号码验证在线查询网 (ip138.com)



   这就是一个外网IP

   共用IP


1.4 IP协议


1.4 IP协议工作过程


   设备1要发消息给设备2:



   构造IP数据报



   经过路由器:


       内网设备必须有外网IP才能发送给外网设备


       源IP替换为路由器(NAT设备)的IP



   设备2收到通过网络传输来的IP数据报:



   也就是说,设备1所在局域网,也有其他设备用的是同一个外网IP

       设备2无法分辨这两个数据报属于不同的设备的请求



   设备2返回响应:

       让路由器去处理,设备2按照数据报发送就好了~

       路由器是知道替换关系的


   端口号用来区分一个主机的不同程序,


   配合内网IP去区分不同主机的不同程序,也完全可以



在NAT背景下如何通信:


       外网设备 => 其他外网设备,不需要任何NAT,直接就能通信

       内网设备 => 其他内网设备,不允许!

           你的内网IP,不同局域网也可以有

       外网设备 => 内网设备,不允许!

           只能交给那个路由器,他秘密地交给对应的设备

           好比说,你知道了内网设备的内网IP,那么这个IP不同局域网也能用(有很多),那么你怎么发送呢?

               并且,你也不能通过这个内网IP获取这个内网设备的外网IP~

       内网设备 => 外网设备,对应的内网设备的路由器

           触发NAT机制进行ip替换,此时就会给这个网络数据报的源ip替换成路由器自己的ip

           即,内网设备的数据报获取一个共用的外网ip


1.5 IPV6协议


从根本上解决IP不够用问题


   前面的IP协议,其实是IPv4

       IPv4是传统的IP协议,使用4个字节,32位表示ip地址

   IPv6是更新了一些的IP协议,使用16个字节,128位来表示ip地址~

       大了可不止4倍,而是296次方倍!!!

       这个数字,给地球的每一粒砂子分配ip都是够用的~

       电子产品 本质上是 Si,Si的来源就是砂子(SiO2)


IPv6早在2000时期提出,但是现在上网还是以IPv4为主


   IPv6,真正被用到的情况很少~


IPv6月IPv4并不兼容


   一个IPv4路由器,要想支持动态分配和NAT,软件上升级下系统就行了(成本低)

   一个IPv4路由器,要想支持IPv6,光升级软件没有用,还得升级硬件(成本很高)

       旧的路由器得丢了换新的IPv6路由器


在我国,IPv6的普及率很高了(世界一流) => 70% +


   已经准备就绪了,但是还没开启使用,就是我们一般的路由器支持IPv4和IPv6,但是IPv6默认是关闭的~


1.6 IP地址的组成


   网络号

       标识一个局域网

   主机号

       标识了一个局域网内部的主机

       同一网段网络号一样,不同主机的主机号一定不一样


一个路由器有两个IP:


   WAN口IP

   LAN口IP


例子:


   上面的局域网,192.168.1就是网络号,最后一个点后面就是主机号

   下面的局域网,192.168.0就是网络号,最后一个点后面就是主机号

       路由器1,连接两个局域网,这两个局域网就是“相邻”的局域网

       这两个局域网的网络号不能重复!



网路号与主机号的划分:


   IP地址分类(ABCDE)(淘汰了)


       前缀:用来区分类别(A类B类…)


       每个类别的网络号和主机号是固定的


           本来就不富裕的IP地址,我还要浪费比特位去区分类别


           主机号的位数太多没必要(一般不会有那么大的局域网去连接那么多台主机)


   子网掩码(真实的划分方式)


命令行+ ipconfig /all:


子网掩码,也是一个32位整数


   但是它的特点就是,左侧是1右侧是0,1和0的个数和为32!

   255.255.255.0 => 11111111111111111111111100000000

   255.252.0.0 => 11111111111111000000000000000000


子网掩码的


   【1的那段】代表IP地址的网络号

   【0的那段】代表IP地址的主机号

   这样其实就可以据局域网实际情况调整主机号的“上限”


家用网络,子网掩码一般是255.255.255.0但是对于一些大型网络,就可能会更复杂~


   网络管理员负责


1.7 特殊的IP地址


假定子网掩码为 255.255.255.0


   主机号比特位为0的IP


192.168.0.0 => 这个称为网络号


   局域网里不应该存在某个主机的主机号为0


   主机号比特位全为1的IP


192.168.0.255 => 这个称为广播地址


   往这个地址发送UDP数据报,此时这个数据报会被转发给这个局域网里的所有主机!

   TCP不支持广播,TCP要建立连接嘛~


例子(投屏):


       手机投屏到电视机上

       手机和电视机都下载了投屏软件

       手机和电视机在同一个局域网内

       手机发起投屏,有一个自动查找电视机的过程,而这个过程就是,将广播地址发送了数据报,哪个设备有回应,就可能是你的电视机

       因此手机能获取电视机的IP地址


发送数据报给广播地址,是在我不能预先知道对方的地址的情况下,所需要采取的探测操作


   127开头的IP


127.0.0.1(最常用) => 称之为 “环回IP”


   127.1.1.1

   127.1.1.10

   …


环回ip对应特殊的虚拟网卡io


   传入或者传出环回ip的数据,走的就是这个虚拟网卡(这个过程没有io操作,是纯内存操作)


所以,这个ip的数据传输要比普通ip快~


   主机号为1的IP


192.168.0.1 => 一般称之为 “网关IP”


区别于刚才三种,这一种是习惯约定,不是强制约定


   可以手动改的,但是正常没人会去改~


网关 — 局域网的出入口~

2. 路由选择


机器之间的信息交流,具体要走哪条路?


   这就是“网络层”对传输路径规划


互联网,存在大量的冗余


   之前核战争的时候,为了防止爆炸导致传播中断,所以是有多条线传输数据的!


那么在这几条路径里,应该要走哪条呢?


   地图软件是站在上帝视角,他知道整块地区的模样,只需要解决“带权图的最短路径”问题就行了


在网络上,网络环境更复杂,没这么容易


   某个路由器,是无法把整个网络环境的模样记录下来的

       路由器只能记录周围的情况(较小范围,认识邻居或者邻居的邻居)

   路由器内部使用,路由表这种数据结构来记录邻居的信息~


实际的转发过程,是渐进式的,类似于 “问路 一样”逐渐接近最终目标的~


   每到一个路由器,就规划一下接下来的路径


图示:



   如果的“目的IP”在路由表里有,直接指明道路

   如果没有,它会根据路由表给你规划一条合理的走向目的IP的路

       路由表中的“下一跳表项”

       指向更上一级的路由器

           越上级的路由器,它的路由表就越大,记忆的就越多,功能也会越多(见多识广的路由器)

       这个指向,就是到达终点的大致方向


对于路由表这种数据结构,如果不是路由器开发工程师,大概率涉及不到的。在这里不做研究~


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
3月前
|
域名解析 网络协议 安全
【JavaEE初阶】 UDP协议的详细解析
【JavaEE初阶】 UDP协议的详细解析
|
3月前
|
网络协议 安全 Java
【JavaEE初阶】 TCP协议详细解析
【JavaEE初阶】 TCP协议详细解析
|
3月前
|
网络协议 Java 网络安全
【JavaEE初阶】IP协议简介
【JavaEE初阶】IP协议简介
|
3月前
|
自然语言处理 Java 编译器
【JavaEE初阶】 UDP服务器与客户端的搭建
【JavaEE初阶】 UDP服务器与客户端的搭建
|
3月前
|
网络协议 Java API
【JavaEE初阶】 TCP服务器与客户端的搭建
【JavaEE初阶】 TCP服务器与客户端的搭建
|
5月前
|
网络协议 安全 Java
【零基础学Java】—TCP通信(五十四)
【零基础学Java】—TCP通信(五十四)
|
9月前
|
网络协议
JavaEE-了解数据链路层主要协议
JavaEE-了解数据链路层主要协议
|
9月前
|
网络协议 网络安全 网络架构
JavaEE-一文了解IP协议与IP地址
JavaEE-一文了解IP协议与IP地址
|
9月前
|
域名解析 安全 网络协议
JavaEE-网络原理之UDP协议
JavaEE-网络原理之UDP协议
|
9月前
|
网络协议 网络性能优化 网络架构
JavaEE-轻松了解网络原理之TCP协议
JavaEE-轻松了解网络原理之TCP协议