8/27 Java学习博客
一、地址管理
(1)网段划分
一个IP地址,分成两个部分
网络号(标识了一个局域网)+ 主机号(标识了局域网中的一个设备)
假设有三个设备
192.168.1.10 ------
192.168.1.11 --------------> 192.168.1.1 (路由器)
192.168.1.12 ------
这个局域网中,网络号192.168.1 后面.1.10.11.12主机号
再假设
192.168.0.10
192.168.0.11 -------------->192.168.0.1(路由器)
192.168.0.12
这个局域网中网络号192.168.0,主机号.1.10 .11.12
其中 192.168.0.1 <--------------> 192.168.1.1 连接上
那这就是两个相邻的局域网 (通过一个路由器,连接的两个局域网)
两个相邻的局域网,网络号不能相同!!
那 一个IP地址,哪个部分是网络号,哪个部分是主机号,其实不一定。
我们通过子网掩码,来确定网络号。
(2)子网掩码
IPv4地址 192.168.100.176
子网掩码 255.255.255.0
注意子网掩码是32位的整数. 左侧都是1,右侧都是0.不会10交替出现
1111 1111 1111 1111 1111 1111 0000 0000
被标记成1的部分就是网络号.
这里的1也不一定就非得是24个,可以根据实际的网络环境,灵活配置的.
一般来说,家用路由器,子网掩码都是255.255.255.0
那如果一个IP地址,主机号全0
比如192.168.100.0
255.255.255.0
当前这个IP就表示"网络号",代表一个局域网的.给一个具体的主机,是不能分配这个IP的
如果一个IP地址,主机号全1,
比如192.168.100.255
255.255.255.0
表示当前这个IP就是一个"广播地址” 也是不能给具体的主机分配这个IP的~~
前面说UDP天然能支持广播,就是和这个IP有关系.
使用UDP socket给这个地址发送UDP数据报,此时局域网中所有的设备,都能收到这个数据报~~
TCP则无法和这个地址,建立连接....
如果一个IP是127开头的,此时这个IP就是“环回ip"(loopback)
127.0.0.1(最常用的)都表示"设备自身”自己发给自己~~
操作系统提供了一个特殊的"虚拟网卡",关联到了这个IP上
这里的环回IP主要的用途就是进行一些测试性的工作.
环回IP能够排除网络不通干扰因素,更好的排查代码中的问题.
上述和IP地址相关的规则,也是IP协议的一部分.(IP协议,两个核心功能,地址管理,路由选择)
二、路由选择
1)路由选择
就是描述了IP协议(IP数据报)转发过程.
从A->B,中间可能有很多条可行的路径.具体怎么走~~
平时,使用地图软件.一搜索,就会出现很多条路径~~
而进行IP数据报转发的时候,每个路由器,都是无法知道,网络的“全貌”的,只知道一些局部信息.(一个路由器能知道哪些设备和它自己是相连的),这就意味着IP数据在转发过程中,是一个"探索式""启发式"过程.
这个过程,很难给出"最优解"只能是"较优解"
就像我们在没有导航的情况下,通过问路到达最终地点
一个网络层的数据报,每次到达一个路由器,也会进行类似的问路,每个路由器内部都有个路由表,根据数据报中的目的IP查路由表
查到了 就按照路由表给定的方向转发
没查到 路由表里就有个默认表项(下一跳地址),按照默认的表项转发。
上述内容,就是关于IP协议的基本情况了.
三、数据链路层
其中一个比较常见常用的,就是"以太网协议”
(1)以太网协议
通过网线/光纤,来通信,使用的协议,以太网协议。
以太网,横跨数据链路层+物理层
以太网数据帧,格式 如图

其中目的地址和源地址 6个字节,不是IP地址,而是mac地址(物理地址)
定位与IP地址有一定的冲突/重合的
目前来说,每个设备都是有唯一的mac地址~~
mac地址通常是十六进制表示的.两个十六进制数字就是一个字节.字节和字节之间通常使用-或者:来分割
(一个字节 八位二进制 一个十六进制可以表示4位二进制)
IP地址和Mac地址各自的用途是什么?
IP协议立足于全局,完成整个通信过程的路径规划工作.以太网则是关注于局部,相邻两个设备之间的通信过程~~
比如
(1)传输层(UDP、TCP)关注的 从西安,到安广~~
(2)网络层(IP)关注的是,路径是啥样的~~
西安->长春->白城->安广
西安->北京->长春->白城->安广
西安->北京->白城->安广
西安->沈阳->长春->白城->安广
无论走哪条路线,
IP数据报里的源IP始终是"西安",目的IP始终是"安广”
(3)数据链路层(以太网协议)关注的是"相邻节点”之间如何转发
(源IP和目的IP始终是整个通信过程中的最初的起点和终点(这里是不考虑NAT的情况))
西安->长春:坐飞机~~
数据报:
源IP:西安;目的IP:安广源mac:西安;目的mac:长春
长春->白城:坐火车~~
数据报:
源IP:西安;目的IP:安广源mac:长春;目的mac:白城
白城->安广:坐大巴~~
数据报:
源IP:西安;目的IP:安广
源mac:白城;目的mac:安广
源mac 和目的mac会根据你当前转发的过程每次到达一个节点,往下一个节点转发的时候,源mac和目的mac都会随之改变
(2)以太网 数据帧格式
①类型 是描述载荷是一个啥样的数据的。
②那看图片可以看到 IP数据报最大长度不能超过1500字节,这1500字节便是MTU
数据链路层的数据报能携带的最大载荷长度
不同数据链路层的协议的MTU是不一样的(也会物理层的介质有关)
MTU可以看成,一条公路上允许车的最大载重量,如果路不行 车太重就会压坏掉。
反之路好了,车就可以重一点。
所以 IP数据报的分包组包,大概率是因为MTU引起的,而不是触发64KB上限引起的.
③ARP和RARP
这两个协议不是传输“业务数据”,而是辅助转发的协议
像交换机这样的设备,收到以太网数据帧的时候,就需要进行转发
(这个转发过程就需要能够根据mac地址,判定出数据要走哪个网口)
这里的网口是“物理意义"上插网线的口,
(IP协议,路由器,走哪个网络接口,其实是抽象的概念,最终还是要在数据链路层才能决定是走哪个网口...)

具体如何转发?
交换机内部也有一个数据结构"转发表”
和前面说的路由表,有点像,其实还是有一系列差别~~
转发表是一个简单的像hash这样的映射(当然这个表不一定是软件实现的,也可能是硬件实现的)
转发表如何构造(里面的内容咋来的?)
主要就是通过arp协议来生成的

浙公网安备 33010602011771号