[Java EE] IP 协议 | NAT 机制 | 路由选择 | MAC 地址 | 域名解析服务

发布于:2024-10-18 ⋅ 阅读:(282) ⋅ 点赞:(0)

Author:MTingle
major:人工智能


Build your hopes like a tower!



目录

一. 初识 IP 协议

IP 协议报头:

二. IP 协议如何管理地址

NAT机制

路由选择

三. 数据链路层(以太网): MAC地址

四. 域名解析系统


一. 初识 IP 协议

IP 协议工作在网络层,其目标是为了在复杂的网络环境中确立一条合适的路径传输,  IP 协议主要完成的工作有两方面,地址管理和路由选择.

地址管理: 是使用一套地址体系来描述互联网上每个设备的位置.

路由选择: 是指一个数据包如何从网络的某个位置传输到另一个位置.

IP 协议报头

​

IP 协议的版本取值有两种,4和6( IPv4 和 IPv6 ),当前主流版本是 IPv4 ,首部长度单位是 4 个字节.

8位服务类型,实际上只有四位有效,这4位是彼此冲突的,其中只有1位为1,剩下的必须为0,表示当前 IP 所处模式,他们分别为最小延时,最大吞吐量,最高可靠性( IP 协议并非像 TCP 一样提供了强可靠性,但是内部也会有一些防止丢包的考量 ),最小成本(最小硬件开销).

16位总长度,描述一个 IP 数据报的长度,包含报头和载荷,但是这并不意味着我们的 IP 收到了 64kb 的限制, IP 协议可以通过 拆包/组包 的功能突破 64kb 的限制,运输数据包,即时数据报非常大,在 IP 这一层会自动拆成多个 IP 数据报,每个数据报会携带载荷的一部分.

包拆了之后该如何组包呢?

16位标识,可以说明哪些 IP 数据报的载荷应该组装在一起.

3位标志(只有两位有效),1位表示这次的 IP 数据报是否拆包了,还有一位表示结束标记.

13位片偏移,描述了这些包的先后顺序.

8位生存时间,单位是次数,而且是整数,一个 IP 数据报,每次经过一个路由器转发,TTL -1,如果这个数值减到0,此时就说明数据包被丢包了,TTL 除了可以验证是否丢包,还可以防止某个数据在网络上被无限转发下去, TTL 一般来说是 32/64 这样的整数,足够支撑当前网络传输.

8位协议,表示的是在传输层使用的是哪个协议.

16位校验和,只针对 IP 的首部校验,载荷部分的 TCP/UDP 都自带了校验和, IP 协议就不用管了.

32位源 IP 地址,32位目的 IP 地址,表示了发件人地址和收件人地址.

二. IP 协议如何管理地址

NAT机制

IP 协议本质上就是一个 32 位整数,为了方便,就会把 IP 表示成 点分十进制 的形式,通过三个点分成四部分,每个部分表示1个字节,每个部分的取值都是 0-255.

但是,在网络飞速发展的年代,32位的IP地址不够用了!如何解决 IP 地址不够用,就成了当时一个严峻问题.下面我们来解析 IP 协议是如何解决这个问题的.

1. 动态分配 IP 地址,全世界的设备也不是同一时刻一起上网的,可以更充分的利用现有 IP ,但这只是权宜之计,不能根本上的解决问题.

2. NAT 机制( 网络地址映射 ):先把 IP 地址分成两个大类:私网 IP / 局域网 IP ,公网 IP / 广域网 IP .

IP 地址是以 10* ,172.16-172.31* , 192.168* 这三类开头的地址为私网 IP ,剩下的就是公网 IP .

由于上述设定,就产生了一个重要的限制:

1. 公网设备访问公网设备,没有任何问题,可以直接访问.

2. 局域网设备访问另一个在同一个局域网下的设备,也没有任何问题.

3. 局域网访问不在同一个局域网的设备,不允许访问.

4. 局域网访问公网设备,就与需要对局域网设备的 IP 进行地址转换.

5.公网设备不允许主动访问局域网设备.

一般一个路由器都会带有 2 个 IP 地址, LAN 口 IP 往往是一个局域网 IP , WAN 口 IP ,可能是局域网 IP ,也可能是公网 IP ,路由器的核心就是把这两个局域网连接起来.此处我们将模型简化,只考虑主机经一个路由器,把数据转入公网,最终到达了服务器: 

​

假设路由器的 WAN 口 IP 是5.6.7.8,这个时候,电脑上发出的数据,经这个路由器,想进一步往前转发,就会把 IP 报头中的源 IP 进行替换.经过上述替换,中间的源 IP 就被路由器修改了,改成了自己的 IP,当然,不是每一个路由器都会替换,局域网内的路由器会替换, 一旦这个数据包源 IP 变成了公网 IP ,就不会继续替换了.当这个包到达服务器后,服务器看到的 IP 就是5.6.7.8,就感知不到先前的 IP 了.

上述替换,本质上就是让一个公网 IP 能够对应到多个设备,从而起到节省 IP 地址的效果. 那么当数据需要返回时, IP 会怎么处理呢?

​

路由器在进行 NAT 地址转换的时候,会将此次的通讯的相关信息(替换之前的 IP ,替换之后的 IP ,服务器  IP ,源端口,目的端口)记录在表中,返回响应数据时,源 IP ,目的 IP 是反过来的.路由器通过查表,就能找到对应的表项,就能把目的 IP 还原成之前的局域网 IP .路由器收到响应之后,就可以查询,传输层中的目的端口,端口号可以用用来区分主机的不同进程,当然也可以用来区分不同主机的不同进程,客户端分配的端口号是系统随机分配的,两个主机之间的端口,大概率不相同.

若局域网中的两个设备,端口分配相同呢?此时路由器也会对端口号进行映射( NAT 也可能会修改传输层的报头,此时路由器就不是一个纯粹工作在网络层的设备,也会涉及到传输层的内容)

​​​​

大部分情况下,局域网内不同设备访问的不是同一个网站,这个时候直接通过服务器 IP 就能够区分.

少数情况下,如果访问的是同一个服务器,就可以按照端口号进行区分.

极少数情况下,碰巧访问的是同一个服务器并且端口相同,就可以在路由器这边自动映射成不同的端口号,仍然能够区分. 

当前互联网就是 动态分配 + NAT相结合产生的方案.

IPv6的产生则从根本上提供了解决方案,增加了 IP 地址的个数,IPv4用四个字节表示 IP 地址,而 IPv6 用16个字节表示 IP 地址.,但是 IPv6 和 IPv4 的报头结构是不兼容的,所以目前还未启动 IPv6 进行通信.

网段划分

网段划分的产生为我们进行组网提供了便利,我们把一个 IP 地址分为两个部分: 网络号 + 主机号,我们的机器如果在同一个局域网中,网络号都是相同的,主机号则是不同的.家用宽带来说,一般我们默认前三个字节是网络号,主机号的范围就表示局域网中可以有多少个设备.

路由器的其中一个功能是 DHCP ,自动帮我们将局域网设备中的 IP 都分配好.当设备连接上路由器时,路由器会自动分配,因此同一个设备,每次连到路由器得到的 IP 是可能不同的.

如果一个局域网中,网络号和主机号都相同,则个时候是无法上网的,如果局域网中的设备,网络号和路由器的网络号不相同,也是无法上网的,两个"相邻"的局域网,网络号不能相同(一个路由器连接的两个网络,称为"相邻")

 一些特殊的的 IP 地址

127.0.0.1 环回 IP ,表示自己本机.一般可以用于测试.127* 开头的 IP 都是环回 IP .

如果某个 IP 的主机号全为 0 ,表示这个 IP 比较特殊,不能分配给某个主机.

如果某个 IP 的主机号为全 1 (二进制比特位),表示"广播地址".广播表示的是一对多的传输,这里的多指的是所有人,单播表示一对一,组播表示一对多(整体的一部分),广播表示一对多(整体所有).广播的一个典型应用场景就是:手机电脑投屏,点击投屏,手机就会在局域网中广播一个查询数据,~看哪些设备有回应,根据收到的回应,就知道 IP 为哪个的设备是能够支持投屏的.

路由选择

路由选择: 网络结构十分复杂,每个路由器都无法掌握全局信息,只能掌握一部分局部信息,此时路由器根据这些信息会给我们规划出一条路线,此为"较优解",举个例子:假如我们要从甲地前往乙地,我们找人进行问路.

1)出门,先问问 À=>坐上 336 公交车,你往南走.

2)问 B =>坐到运动公园下车,换地铁二号线.

3)问 C=>坐二号线坐到倒数第二站, 航天城.

4)问 D =>沿着这条街往南走走到下一个路口,一直往西走,走两条街左右就差不多到了.

5)问 E=>E 就说了,沿着这个路口稍微往北走一点就到了.

每一次问路,都会让我们离目标更近,最终到达目的地,路由器转发数据包的过程就与之类似,摸着石头过河,数据报中包含的"目的 IP "字段就是要问路的目标,每个路由器都对于网络环境以及他们相邻的设备情况有一些了解(路由器内部的存在一个数据结构--路由表,路由表中存在:目的 IP 网段,对应的网络接口,特殊的表项,更上层的路由器等等),此时,就可以根据他的了解告诉我们下一步往哪走.

三. 数据链路层(以太网): MAC地址

数据链路层引入了另一套地址体系,称为 "mac地址" / 物理地址, mac 和 IP 是两套独立的地址体系, IP 地址侧重于全局的转发,从起点到终点这整个转发过程,通过 IP 地址负责完成(查询路由表,通过 IP 地址), MAC 地址侧重于局部的转发,两个相邻设备之间的转发,一个电脑上连一个路由器,这就是相邻设备,一般开发中, MAC 地址用的比较少,而 IP 地址用的比较多, MAC 地址按照16进制的方式来表示,字节之间通过 - 来分割.

MAC 地址表示的范围比 IPv4 大得多,当前 MAC 地址和主机网卡一对一绑定. IP 地址很多时候是动态分配的,而 MAC 地址则是静态分配,网卡刚出的时候, MAC 地址就已经写死了,由于 MAC 地址有这样的特性,通常就会将 MAC 地址来作为你机器的身份识别.例如某些外挂只能在某个设备使用,其实就是根据 MAC 地址来进行绑定的.

1.西安->北京
源IP 西安, 目的IP 安广;
源mac 西安,目的mac 北京;

2.北京->长春
源IP 西安, 目的IP 安广;
源mac 北京,目的mac 长春;

3.长春->白城
源IP 西安, 目的IP 安广;
源mac 长春,目的mac 白城:

4.白城->安广
源IP 西安, 目的IP安广;
源mac 白城,目的mac 安广;

这两套地址体系,我们如果将他们合并成一套,分别在两个报头中使用,也是可以的.

四. 域名解析系统

域名,一串可读性更好的单词,域名解析系统可以将域名转换成对应的 IP 地址,再根据 IP 地址来找寻网络设备的位置.例如,阿b的域名就是:

在很早之前,引入了一个 hosts 文件,内部的内容就是行文本,每一行都有 IP 和 域名 ,每次访问某个域名都会进行查询,找到对应的 IP ,当今, hosts 文件仍然是有效的,只不过一般情况为空,因为随着互联网的发展,域名和服务器越来越多了,维护 hosts 文件变得十分麻烦,于是就有人搭建了一组服务器,来提供域名解析服务,hosts的内容就储存到服务器当中了,当某个主机需要访问某个域名,就可以先查询一下 域名解析服务器 (DNS 服务器),查询到的结果就是域名对应的 IP ,根据 IP 进行访问即可.

但是,全世界这么多人在上网,大家都去访问 DNS ,服务器能否抗住如此大的的请求量呢?

DNS服务器并非只有一份,而是有很多份,最开始的这一套 DNS服务器 ,我们称为 根域名服务器 ,这里面的内容是最全的,各个国家的网络运营商再根据根域名服务器的内容,搭建出"镜像服务器",网民上网时,一般就是访问附近运营商搭建的镜像DNS服务器.

搭建域名服务器时,还会根据域名进行分级管理,一级域名,二级域名,三级域名......这样就可以确保每个服务器管理的数据都不多.


微信公众号

今日签到

点亮在社区的每一天
去签到