【Java ee初阶】IP协议

发布于:2025-05-17 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、网段划分

组建网络

IP地址分成两个部分:

1.网络号:标识局域网

2.主机号:标识主机

同一个局域网内部,网络号必须相同,主机号必须不同

两个相邻局域网,网络号必须不同,主机号随意

家用路由器的ip地址经常是192.168.0.100

但是企业级路由器/骨干网路由器不一定是这种情况

子网掩码:

利用ipconfig命令查看主机的网络信息,可能有多组,每一组都对应着一个“网络接口”,也就是网卡/虚拟网卡(有线网卡/无线网卡)

子网掩码,是32位的正数。转为2进制之后,左侧都是1,右侧都是0.

家用路由器,网段一般都是255.255.255.0的,这是因为家用路由器,设备数量是比较少的,主机号0-255的范围是足够用的,如果是规模大一点的公司/学校/商场/组织单位,上网设备的数目大概率会超过256

就需要把子网掩码的1减少一点,这样子就能够支持更多的设备了

gateway 网关:

网络的出入口

192.168.100.1 我所在的路由器的LAN IP(.1只是习惯用法,都是可以修改的)

三种特殊的IP地址:

1.主机号全为0(所有的比特位都是0)

这个IP就是特殊的IP,表示该网段。不能把这个IP分配给某个具体的机器使用,形如192.168.100.0

2.主机号为全1(所有的比特位都是1)

这个IP也是特殊的IP,表示该局域网的“广播IP”

广播IP的作用,往这个IP上发送数据,广播给该局域网中的所有设备

只能基于UDP使用,TCP用不了广播

广播IP 和 微信群群消息,二者是不同的运力

广播IP,是基于网络层的IP协议支持的广播,只能是在当前的局域网内进行广播。应用场景有:手机投屏,点击投屏,显示出局域网内有哪些设备可以投屏,这都是基于广播IP实现的,因为你的电视的IP地址,手机是不知道的。投屏软件在启动的时候就可以往局域网的广播IP发送一个数据包。局域网中大部分的设备都不会理会数据包,因为他们没有对应的投屏软件,但是你的电脑有投屏软件,收到数据之后就可以做出响应,响应中告知手机,我的IP是什么...我能进行xxx投屏。

投屏软件不是把手机的画面传输到电视上(这种投屏也是存在的),更多的是把要播放的视频的地址告诉电视,而手机该干啥就去干啥,二者完全不影响。

微信群发送群消息则是应用层实现的广播效果,这不受限制,全然取决于程序员的代码是什么样子的。本质上就是你把消息发送给服务器,服务器在获取到所在群的成员列表之后通过遍历循环,把刚才的消息一个个地发送给所有的群成员。这是通过程序员编写代码实现的,TCP/UDP都可以做到。

3.127*

环回IP,通过这个IP发送的数据,还能够通过这个IP收到。自己发,自己收。

经常用到127.0.0.1,我们也称这个IP为localhost。绝大部分情况下,这两者等价,少数情况下,127可以使用,localhost使用不了。

上述基于子网掩码的网段划分方式,是现代的网段划分方式。

在这之前,还有另外一种方式:

上述功能,都是围绕“IP协议”的“地址管理”

接下来我们来看一下“路由选择”,即从起点到终点,路径是怎么规划的。高德地图这样的地图软件,导航的时候,能够获取到“全局信息”,你在搜索的时候,给你提供一个“最优解”

而网络上的路由选择,虽然也是在“导航”,由于每个连路由器都无法知道整个网络的结构环境,只能知道和自己相邻的一些设备的情况,从而只能提供一个“较优解”

路由器的路由选择,是一个“启发式”“探索式”的过程

数据链路层

数据链路层负责两个相邻节点之间的数据传输。

最常见的数据链路层协议:

1.以太网(IEEE 802.3)

通过网线/光纤进行传输的网络

2.Wifi(IEEE 802.3)

无线信号

数据包报文格式(使用 帧)

IP数据报的拆包组包

要不了64KB,在数据链路层,长度就已经限制住,需要进行拆包了

此处的目的地址是6个字节,不是IP地址

mac地址/物理地址 当前可以做到每个设备有一个唯一的mac地址,通常是网卡出厂的时候就被写死了。mac地址也通常会作为一个机器的身份标识。

数据链路层中,也提出的地址体系,专注于解决两个相邻节点之间的数据转发。

数据的字节数量限制取决于硬件结构的,是一个非常非常小的数字,1KB多点。

不同的链路层协议,这个上限也是不同的,1500只是针对以太网协议。把长度的上限,称为MTU。

mac地址的本职工作是进行网络转发。在管理员终端中使用ipconfig /all 进行查询,物理地址那一栏表示的就是mac地址。两个十六进制数字,相当于一个字节。mac地址的标识方式,通常使用16进制。两两一组,组和组之间通常使用- 或者:来进行分割。

能不能数据链路层也用IP地址,或者网络层也用mac地址呢?理论上是可以的。

ARP协议

ARP协议准确的来说,是横跨网络层和数据链路层的协议。ARP不携带业务数据,是为了实现网络转发(给数据链路层的转发)提供必要的支持。

网络转发的时候,A给B发送了一个数据,A不光要知道B的IP地址,还需要知道B的mac地址(尤其是当A和B相邻的时候)

IP协议里,在路由器中,存在一个路由表:IP地址->网络接口(WAN/LAN)关系

数据链路层协议,交换机中,存在一个转发表 mac->具体的网口之间的关系

ARP就是为了协助构造这个转发表,它能够根据IP地址,获取到对应设备的mac地址

ARP协议的报文周期性触发(这是因为网络结构可能变化),ARP广播给局域网中的所有设备,询问每个设备的mac地址,每个设备收到ARP请求之后,返回响应,响应中就会包含对应的mac地址的值。

DNS

应用层协议

域名解析系统

网络上通过IP地址,描述一个设备的位置,但是32位的数字,化为点分十进制标识,是比较晦涩拗口的,因此我们引入“域名”,通过一串具有实际意义的单词,来标识一个IP地址

域名还有了另外一个好处:未来某天如果更换了机器,也就是更换了IP,那么只需要在DNS系统中重新设置一下域名和IP的关联关系就好了,这对于网站的用户来说,是无感知的。

最早的DNS系统,是通过hosts文件来进行标识的。而随着网络的发展,网站数量越来越多了,每天都有新的网站上限,也有旧的网站消亡,手动维护本地的hosts文件就非常麻烦了。因此,现在的DNS系统不再依赖hosts文件,而是通过一组DNS服务器来完成的域名解析。

这个模型下,DNS服务器会收到海量的请求。

思路一:访问某个网站的时候,不是每次访问都需要进行DNS访问的。相邻的几次访问,域名和IP的映射关系是不会变的。因此,浏览器会对域名解析结果进行缓存。通过引入缓存,大幅度降低访问DNS服务器的频率。

思路二:分布式系统

通过引入更多的硬件资源来解决这个问题

日常生活中,如果遇到浏览器打开网站打不开,但是不依赖域名(直接使用IP地址通信)的程序(比如QQ)可以正常打开,那么就是你附近的DNS服务器挂了。


网站公告

今日签到

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