【JavaEE】网络原理——网络层+数据链路层
🤡🤡🤡个人主页🤡🤡🤡
🤡🤡🤡JavaEE专栏🤡🤡🤡
🤡🤡🤡上一篇文章:【JavaEE】网络原理——传输层协议🤡🤡🤡
文章目录
- 1.网络层
- 1.1IP协议的报文格式
- 1.2IP地址基本规则
- 1.2.1网段划分
- 1.2.2特殊IP地址
- 1.2.3路由选择
- 2.数据链路层
- 2.1以太网协议
1.网络层
1.1IP协议的报文格式
- 4位版本:就是ipv4和ipv6两个版本,此处的报文格式是ipv4的。
- 4位首部长度:此处的和TCP是一样的,单位为字节,范围为0-15,则最大报头字节为15*4=60字节,最小为20字节。
- 8位服务类型:其实只有4位有效,并且这4位还是互斥的,有一位为1则其余三位都为0.
- 16位总长度:指IP报头和载荷的和,通过这个长度可以算出TCP的载荷长度。
TCP载荷=IP总长度-IP报头-TCP报头
此处的16位,那么IP的数据包也最多只有64kb?
为了解决这个问题,IP有自动拆包和自动组包的特性
以上就是拆包的过程,那么接收方怎么把这些拆包的数据包组成一个完整的IP数据包呢。
- 16位标识:用来区分哪些数据包需要进行合并
- 3位标志:其实有用的只有2位,其中一位是表示该数据包是否触发拆包的效果,进而确定是否要组包,另一个标志位是在组包的时候标记最后一个包,在组包的过程,发现了这个标记说明到达了这个完整包的最后一部分。
- 13位片偏移:这个就是标记若干个要拼接数据包的先后顺序,片偏移量越大就越在后面。
- 8位生存时间:其实是IP数据包在网络转发的次数,一个IP数据包的初始情况下,有一个TTL的值(像32/64这样的整数)每经过一次路由器转发就-1,减到了0那么就丢包了,这个初始值是可配置的,是系统内核的参数。
- 8位协议:这里就是描述载荷部分是哪种协议的数据包,比如TCP,UDP等等协议
- 16位首部检验和:和TCP,UDP的检验和是一样的。
- IP地址:是一个32位的整数,为了让人们可以更好的观察,我们采取"点分十进制"的方式,理论上ip个数有42亿多,放到之前肯定是无法用完的,但是就现在而言,网络的发展,ip地址是远远不够的。
IP地址不够用怎么办?
1)动态分配IP地址
比如这个地方的人不用,就给另一边的人用,就是空闲下来的ip地址分配给需要用的人。
2)NAT机制——网络地址映射
外网IP不可以重复,内网IP在不同的局域网中可以重复。
a)内网/局域网
192.168.* 10* 172.16-172.31* 一般这些IP地址开头的就是局域网,其余就是外网IP
b)外网/广域网
在NAT机制下有这几种情况:
1)同一个局域网中,内网IP访问内网IP是可以的。
2)不同的局域网中,内网IP访问内网IP是不可以的
3)外网IP访问外网IP是可以的
4)外网IP访问内网IP是不可以的
5)内网IP访问外网IP是可以的
对于内网IP访问外网IP这个问题我们来画一张图来描述
首先我们以单个主机访问JD为例:
在同一个局域网下多个主机访问JD?
我们需要添加一个端口号和一个映射表,通过端口号和映射表不仅可以让多个主机访问JD,而且还可以让JD将响应一一返回给我们的主机。
映射表的简略模型:
同局域网下的内网IP端口号相同怎么访问JD外网IP?
只需要在端口号这改一下即可,将新端口号改为不一样的即可,这个新端口号是由运营商路由器自己分配的,类似于我们自己的主机给我们主机上的程序自动分配端口号一样
不同局域网下内网IP相同怎么访问JD外网IP?
1.2IP地址基本规则
1.2.1网段划分
同一个局域网的主机要按照一定规则分配IP地址
这个规则就是:
将一个IP地址分为两部分,一部分为网络号,一部分为主机号。
在同一个局域网下网络号相同,但主机号不同。
那么怎么划分网络号和主机号呢?
这里就需要一个新的概念子网掩码,这个子网掩码就是帮助我们来设置网络号和主机号的,子网掩码左边部分全为1,右边部分全为0,这些01是指二进制,而且01不能交替
比如:255.255.255.0这个子网掩码就是前三个字节全为1,后一个字节全为0。
全为1的就是网络号,全为0的就是主机号
1.2.2特殊IP地址
- 主机号全为0:这样的IP表示网段,不应该分配给具体的主机
- 主机号全为1:这样的IP表示广播IP,在广播IP发送数据,就会发送给局域网中所有的设备,例如:手机投屏。
广播IP在发送数据是发送UDP数据包而不是TCP数据包,原因就是TCP是有连接的,但是广播IP在发送数据给每一个设备的时候并不需要建立连接,只需要发送到了就行。‘
- 127.*开头的地址:这样的地址称为环回地址,就是将数据包自己发送给自己,比如客户端和服务器在同一个主机上。
1.2.3路由选择
路由选择其实就是找从源IP到目的IP的路径,这里类似于我们生活中的地图导航,规划出一个路线"最优解",但是在我们路由这里就不是"最优解"而是"较优解"其实就是我们网络路线复杂程度很高,并且路由不是对全局网络路线都很了解,只对周围路由的网络线路了解。
对于源IP找目的IP是"探索性"的方式寻找,在寻找的过程中会借助"路由表"来寻找目的IP。
2.数据链路层
2.1以太网协议
mac地址:为了区分网络传输中不同设备的。
mac地址/物理地址:
mac地址在网卡出厂的时候就设置好的,原则上不同点网卡的mac地址是不一样的,因此mac地址可以作为主机的一种身份标识。
IP地址是支持整个传输过程的转发
mac地址的作用是支持两个相邻节点之间的转发。
比如:生活中出游的路线规划
假设我要从株洲出发到重庆旅游,那么我规划的路线是这样的:
株洲-长沙-重庆
株洲作为源IP,重庆作为目的IP
株洲-长沙:株洲就是源mac,长沙就是目的mac
长沙-重庆:长沙就是源mac,重庆就是目的mac
这个过程中源mac和目的mac一直是变化的,可以将mac作为短期目标,而ip作为长期目标来理解。
在数据传输的过程中,IP会用到路由表,mac会用到转发表,这两个表不是同一个东西
ARP协议就是为了给每一个路由器/交换机来建立转发表的。
- 2.1以太网协议