网络层概念
网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它为数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。
简单来说,网络层负责的就是地址管理和路由选择,为每一条数据选择合适的路径。
在TCP/IP协议族中,网络层协议包括IP协议,ICMP协议(Internet互联网控制报文协议)以及IGMP协议(Internet组管理协议)
网络层只有IP协议的话,进行数据传输是不可靠的,因此需要其他协议帮助。
- ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
- IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。
IP协议格式
如上图:
- 四位版本号:IPV4/IPV6
- 四位首部长度:标识IP报头长度 (一个单位代表四字节,最小20字节/最长60字节)
- 八位服务类型:三位弃用,一位置0,四位TOS字段-最大吞吐量/最小成本/最高可靠性/最小延时
- 16位数据报长度,限制IP报文最大长度不超过64K
- 分片标识:标识当前分片属于哪一个上层报文(传输数据大于MTU会进行数据分片)
- 三位标志: 一位保留,一位禁止分片位,一位分片标志位(一般置为1 1 0)
- 13位分片偏移:标识当前分片位于原始报文的什么位置(2^13 --> 8192 ,单位8个字节,因此描述道0-65536)
- 八位TTL:报文的最长生存周期,每经过路由器-1,默认64/128,防止路由环路
- 八位上层协议:记录传输层协议类型
- 16位校验和:校验数据一致性
- 32位源端/对端IP地址:描述通信的两方
- 0-40字节选项数据:保存特殊服务信息
MTU与mss关系图:
MTU是链路层最大传输单元,而mss则可以理解为传输层所能传输最大数据大小。
MTU通常默认1500字节,因此在网络层如果数据大于1500字节,就会进行分片
不考虑选项数据,当传输层封装的报文为2500字节时,网络层会取出1480字节+20字节的IP头部进行封装,向链路层传递。
IP地址管理
IP地址在网络层就相当于一个主机的标识,主机在网络中的绝大多数行为,比如请求资源,都要通过IP地址进行操作。
IP地址分为IPV4/IPV6地址。
- ipv4地址其实是一个uint32_t的整形,也就是说ipv4地址一共不到43亿个。
- ipv6地址相比于ipv4最显著的区别就是ipv6地址有128位。
IP地址的组成包含两部分,网络号+主机号。
- 网络号,俗称网段,也就是当前网络的标识。
- 主机号就是一个主机在网络中的唯一标识。
我们在这里详细解释ipv4地址。
早期网段划分
网段的划分分为早期和当前,早期划分方式不合理,因此人们对其进行改造,衍生出了当前网段的划分。
早期将网络号划分为了五部分:
- A:用于组建大型网络,高一位0,7位网络号,24位主机号。
网络号范围:0-127,IP地址范围0.0.0.0-127.255.255.255 - B:用于组建中型网络,高二位10,14位网络号,16位主机号。
网络号范围:128.0-191.255,IP地址范围:128.0.0.0-191.255.255.255 - C:用于组建小型网络,高三位110,21位网络号,八位主机号。
网络号范围:192.0-233.255,IP地址范围:19.0.0.0-233.255.255.255 - D:特殊IP地址
- E:特殊IP地址
无类域间路由(CIDR)
传统划分IP地址的方法都是8位划分的,要不就是前8位网络ID,后24位主机ID;或前16位网络ID,后16位主机ID,或前24位网络ID,后8位主机ID,这种划分IP地址的方法是固定的.
无类域间路由这种划分IP地址的方法,可以划分这种地址,前10位是网络ID,后22位是主机ID这种ID地址,他并不强行规定哪些位是网络ID,哪些位是主机ID。
子网掩码
因为不规定明确的网络ID和主机ID,于是提出了子网掩码的概念,根据子网掩码配合IP地址可以判断出哪些位是网络ID,哪些位是主机ID。
子网掩码时一个uint32_t的数。由连续的二进制1组成,
比如11111111 11111111 11111111 11000000
- 子网掩码和IP地址相与会得到当前网络的网络号,
- 子网掩码取反可以得到当前网络的主机号范围,
特殊IP地址
二进制下
- IP地址全0:可以实现当前主机的任意网卡地址,常用于服务端监听地址,绑定监听本地的所有地址。
- IP地址全1:全网广播地址,常用于DHCP请求地址
主机号全0:网络号的标识,不可分配
主机号全1:UDP局域网广播地址,适配当前网络的所有主机,不可分配
127.0.0.1:本地虚拟回环网卡的IP地址,本地网络测试通信
因此在一个网络中不是所有的IP地址都能划分的,应该减去2.
路由选择
网络可以分为公网/外网,私网/内网
公网/者外网就是我们常听到互联网。
私网/内网是一个私有网络,仅限于内部通信。
ipv4明显IP地址不够分配, 因此由DHCP动态地址分配和NAT网络地址转换等方式解决。
DHCP动态地址分配简单来说,当前主机IP地址为0.0.0.0,向255.255.255.255,发送一个获取IP地址的请求,当DHCP服务器收到后,就会分配IP地址。
NAT(网络地址转换 )和 NAPT(网络地址端口转换)。
它们都是地址转换,NAPT与NAT的区别在于 NAT是NAT是一对一转换,NAPT是多对一转换。 通俗来说NAT是一个内部地址转换成一个外部地址进行通信的,而NAPT是多个内部地址使用同一地址不同端口转换成外部地址进行通信的。
简单来说:NAPT发送数据的时候会在源地址和目标地址上加上端口号(比如源地址:192.168.1.2:1010,目标地址:200.1.1.2:1020),回来的数据也是一样。
NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台私有网主机利用1个NAT公共IP就可以同时和公共网进行通信。(NAPT多了对TCP和UDP的端口号的转换)
IP地址转换和port转换对双方完全透明
路由选择就是路由器根据拿到的数据的IP地址,在路由表中匹配,将数据发往对应的网络。
路由表:
ICMP协议和IGMP协议
ICMP协议,英文全称(Internet Control Message Protocol),就是网际控制信息协议。
主要是用于补充IP传输数据报的过程中,发送主机无法确定数据报是否到达目标主机。
ICMP报文分为出错报告报文和查询报文两种。若数据报不能到达目标主机,ICMP出错报告报文可以以回送信息的方式,向源主机发去信息,并不能纠正数据报中的任何出错。除了出错报告,ICMP还可以诊断出某些网络问题,这就是ICMP的查询报文。
IGMP协议,英文全称(Internet Group Management Protocol),网络组管理协议。主要用于建立和管理多播组,对IP分组广播进行控制。