网络层
负责地址管理与路由选择。IP地址、路由器
- 4位协议版本:IPV4/IPV6
- 4位头部长度:IP报头也是不定长的。最长60字节,最短20字节。有40字节的选项数据,以4字节为单位。
- 8位TOS字段:3位优先权弃用,4位服务类型(最小延时、最大吞吐量、最高可靠性、最小成本),1位保留。
- 16位数据大小:包含IP报头在内的一个IP报文的大小。最大65535–意味着一个IP报文的最大长度不能超过64K。tcp在传输层会自己选择合适大小MSS数据发送,udp报文数据大小应该小于64K-20-8。
- 16位分片标识:udp数据在网络层有可能会进行数据分片,标识当前分片属于哪个完整报文。
- 3位分片标志:1位保留,1位禁止分片标志–是否禁止分片。1位更多分片标志–类似于结尾标志。
- 13位分片偏移:以8个字节为单位。标识当前分片在完整报文中的位置(相对起始位置偏移量)
- 8位TTL:报文最大生存周期–一个数据能够经过多少路由器,经过一个路由器就会-1,为0的时候则将数据丢弃。(防止路由环路)
- 8位上层协议:在数据分用时,网络层取出数据,需要通过这个协议类型,决定传输层使用哪个协议对数据进行分用。
- 16位校验和:校验数据一致性。
- 32位源IP地址/32位目的IP地址:负责数据描述从哪个主机来到哪个主机去。描述起到到终点。
- 40字节选项数据:保存经过的路由器地址信息
网络层的数据分片
若传输层交付下来的数据大小过大,则会在网络层将这个大数据截断为多个小数据分片,然后每个分片封装IP报头进行发送。
到达对端之后进行分片重组,组合成为完整的一个报文交付给上层。
传输层交付下来的数据大小多大的时候就会分片?这个大小取决于链路层的一个限制。MTU(最大传输单元)
传输层tcp协议协商的MSS就是根据MTU计算得到的。因此tcp传输的数据到了网络层通常是不会进行分片的。
但是udp协议传输数据,只限制数据小于64K-28就可以传输。但是若大于MTU大小就会在网络层进行数据分片–网络层数据分片主要针对udp。
13位分片偏移,为什么要以8字节为单位?
13位能够表示的最大大小是2 ^ 10 * 2^3=8192。但是一个完整的udp报文有可能是接近64K的大小。
最后一个分片有可能偏移量都6万多了,13位的偏移大小是没法表示的。
因此这个字段中的大小是以8字节为单位的,8=2^3。这时候8192就表示具体的偏移量为8192*8=64K。这样就可以完整表示偏移量了。
因此每个分片除了最后一个,大小都是8的整数倍。
地址管理与路由选择:
地址管理:
IP-无符号32位的一个整数,在网络中唯一标识一台主机。
IP地址给主机的分配一定要保证唯一性。
网络非常大,人为分配是搞定不了的。只能机器分配–DHCP(动态地址分配)
整个网络上还有很多的小型网络组成的,按照网络进行地址分配。
IP地址的组成:网络号+主机号。
-
网络号:一个路由器组建局域网的时候,按照网络进行地址分配。
每个路由器对于接收到的数据进行源地址判断,这个主机是否属于自己的网络。属于才会转发,不属于则直接丢弃。也就是必须使用我给你分配的地址才能上网。(我自己分配保证不会冲突,避免人人自己给自己设置IP,造成冲突) -
主机号:主机号就是在局域网中大家拥有相同网络号的情况下,标识唯一的一个主机。
主机号的唯一路由器很容易就可以实现。主要保证的是网络号到底如何划分。
网段的划分:
早期:将所有IP地址划分为五类地址,组建什么样的网络,就使用什么样的网络号,分配什么样的地址。
- A类:用于组建超大型网络,IP地址中:高1位固定0,高7位是网络号,低24位是主机号0.0.0.0~127.255.255.255
比如我要组建超大网络,使用10.这个网络号,则这个网络的IP地址分配范围:10.0.0.0~10.255.255.255 - B类:用于组建中型网络,IP地址中:高2位固定10,高14位是网络号,低16位是主机号 128.0.0.0~191.255.255.255
- C类:用于组建小型网络,IP地址中:高3位固定100,高21位是网络号,低8位是主机号 192.0.0.0~223.255.255.255
- D类:特殊地址,地址中:高4位固定1110,28位多播组号
- E类:特殊地址,地址中:高5位固定11110,27位保留
你要组建什么网络,然后去权威机构进行申请,分配一个网络号。接下来组建网络,主机号的分配由自己完成。
早期的这种划分方式,已经几乎被淘汰。因为网络的划分太粗糙,对IP地址的浪费太大。作为了解即可。
当前划分方式:CIDR方案:引入一个新字段–子网掩码
子网掩码
子网掩码:无符号32位的整数,不过数据由连续的二进制1组成
1.子网掩码取反可以得到局域网中的最大主机号,从0到最大主机号就是局域网中主机号的分配范围 255.255.255.0
2.子网掩码与IP地址相与,可以得到网络号。路由器收到一个数据,拿数据的源地址与自己的网络号进行相与,看看与自己的网络号是否匹配。
现在有一个公司,申请了一个C类地址,192.168.122.0/24.公司有4个部门,想要平均划分出4个子网。请问如何划分,划分后各个子网的网络号是多少?子网掩码是多少?IP地址范围是多少?
C类网络:拥有256个主机号 0255:平均划分4个子网。那么每个子网的主机号64个,主机号范围063.
最大主机号取反就可以得到子网掩码: 00111111 -> 255.255.255.192
192.168.122.0~192.168.122.63 - 192.168.122.0 / 255.255.255.192
192.168.122.64~192.168.122.127 - 192.168.122.64 / 255.255.255.192
192.168.122.128~192.168.122.191 - 192.168.122.128 / 255.255.255.192
192.168.122.192~192.168.122.255 - 192.168.122.192 / 255.255.255.192
特殊的IP地址:
1.主机号全为0的IP地址192.168.122.0:网络号–用于标识网络–这个主机号不能分配给主机
2.主机号全为1的IP地址192.168.122.255:udp局域网广播地址–这个主机号不能分配给主机
udp支持局域网广播,将数据放松的广播地址,可以认为是发送给局域网中的所有主机–局域网所有主机都能收到
tcp不支持局域网一个地址广播,因为tcp是面向连接的。
3.127.0.1 :这个地址是每个主机上都有的一个本地虚拟回环网卡地址–主要用于本机的网络测试
4.0.0.0.0 :这个地址适配本机上任意网卡地址,常用语服务器监听服务–表示监听本机所有网卡IP
5.255.255.255.255 :全网广播地址–任意一个主机拿到发往这个地址的数据都会认为和自己匹配–常用于DHCP广播
路由选择
路由选择:根据数据中的目的地址,来为数据选择一条合适的路径。
- 网关:就像是一个大门。不管在家里怎么走,想出去都要经过大门。
每一个主机连接上路由器之后,都会全网广播dhcp请求。路由器收到后会进行回复。 - dhcp响应:
给主机分配的IP地址
当前所在网络的子网掩码
当前所在网络的网关地址
……
每个路由器中,都包含有一张路由表。
Destination:目标网络 192.168.2.0 192.168.1.0
Gateway:网关地址
Genmask:子网掩码 255.255.255.0 255.255.255.0
Use lface:对应这个网络的网卡名称 eth0-作为组件局域网的网关网卡 eth1-作为连接上层网络的网卡
路由选择的过程,其实就是通过路由表进行目的知己的网络匹配,看是否是与自己相连的网络。如果是,则直接通过连接这个网络的网卡发送出去。如果不是,则将数据发送给自己的网关设备(上层路由器),让自己的网关设备进行选择。
公网与私网(内网与外网):
IP地址不够用,除了dhcp之外还有一种NAT计数–网络地址转换技术
一个路由器可以组建一个私网,私网中的主机上网的时候都是用路由器对外的一个地址进行上网。
那么这个私网中的主机IP地址与其他私网中的主机IP地址都不害怕存在冲突问题了。因为对外她们都是使用路由器的地址进行上网的。
但是相邻的网络不能使用相同的网络号。网络是否相邻,主要取决与路由器的连线,与路由器相连的网络都属于相邻网络。
在RFC1918中规定,公网与私网,并且能够用于组建私网的地址有哪些:
10.* . * . * :大型私网
172.16. * . * ~172.31. * . * :中型私网
192.168. * .*:小型私网