网络层的主要功能是在复杂的网络环境中确定一个合适的路径.网络层的协议主要是IP协议.IP协议头格式如下:
1.4位版本号:指定IP协议的版本,常用的是IPV4,对于IPV4来说,这里的值就是4.
2.4位头部长度,单位也是4个字节,4bit表示的最大数字是15,因此IP头部的最大长度就是60字节
3.8位服务类型:3位优先权字段(已经弃用),4位TOS字段和1位保留字段(必须为1),4位TOS分别为:最小延时,最大吞吐量,最高可靠性,最小成本,这4者相互冲突,只能选择一个.
4.总长度:可以看到表示用16位来表示IP数据报的总长度,说明一个IP数据报的最大位64KB.
5.16位标识:唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一片里面的这个id都是相同的.
6.3位标志位:,第一个位保留(目前不用),第二位为1标识禁止分片,这时候如果报文长度超过了MTU,IP模块就会丢弃报文.第三位表示"更多分片",如果进行了分片,如果分片了的话,最后一个分片置为1,其余置为0,类似于一个结束标志.
7.13位分片偏移:是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原始报文中处于那个位置.实际偏移的字节数是这个值*8得到的.因此,除了最后一个报文,其余报文的长度就是8的整数倍.
8.8位生存时间:数据报到达目的地的最大报文跳数,每一经过一个路由都会减一,一直递减到0,还没到达的话就会丢弃.主要是为了防止出现路由循环.
9.8位协议:表示上层协议的类型.
10.16位首部校验和:使用CRC进行校验,来鉴别头部是否损坏.
11.32位源地址和32位目的地址:表示发送端和接收端.
地址管理
1.动态分配
对正在运行的主机分配IP地址.主机处于停止运行状态就不会分配IP地址.
2.NAT网络地址转换
IP地址有内网IP和外网IP
内网IP有下面几种: 10.* 172.16.*-172.31.* 192.168.*
其中,内网IP在不同的局域网中是可以重复的,外网IP是不能重复的.
NAT机制下的几个情况:
1.同一个局域网中,内网IP访问内网IP,是可行的.
2.不同局域网中,内网IP访问内网IP,不可行.
3.外网IP访问外网IP,可行.
4. 外网IP直接访问内网IP.不可行.
5.内网IP访问访问外网IP,可行.
这是内网IP访问外网IP的简单图示:假定我的电脑要访问某视频网站观看视频.源IP设置为192.168.100.188 源端口设置为2233 目的IP设置为 30.11.11.11 目的端口设置为 4455
可以看到运营商路由器会对源IP地址进行转换,转换成运营商路由器的公网IP后进行转发.视频网站的服务器在接收到数据之后,会返回数据,其中的目的IP就是运营商路由器的IP,运营商路由器在接收到数据之后,根据记录的转发表更换目的IP和目的端口,把数据转发到我的电脑.这就是NAT机制的基本原理,即内网IP访问外网IP时,会先访问一个外网的路由器,路由器会重新设置源IP和源端口,并且记录下旧的源IP,源端口和新的源IP,源端口的对应关系.在接收到返回的数据之后,根据记录的对应关系,把数据返回到对应的主机.即允许多个内部主机使用同一个公网IP和不同的端口号访问外部网络.通过生成转换表,使多个客户端可以同时与服务器进行通信.当前的网络世界就是通过动态分配和NAT机制来解决IP不够用的问题的.但是这两种方法,还是没有从根本上解决问题,一个外网NAT设备上最多有6万个表项,极端情况下还是会出现不够用的情况.于是就有了IPV6这个版本.
IPV6通过使用更多的字节来表示IP地址,来解决IP地址不够用的问题.IPV6使用128位地址长度,能够提供2^128个地址,数量极其庞大,可以充分满足目前的需求.
IP地址的基本规则
1.网段划分,同一个局域网中的主机按照一定的规则来分配IP地址,如何来表示不同的主机呢?通常把IP地址分成两部分:网络号+主机号.网络号用来标识局域网,主机号用来区分局域网中的不同主机.不同局域网中的主机的主机号可以相同,同一个局域网中的主机号不能相同.局域网和局域网之间,网络号可以相同.但是两个相邻的局域网,网络号不能相同,一旦相邻的局域网网络号相同,局域网内的主机就无法上网.同一个路由器的wan口和lankou就处于不同的局域网.既然IP地址由网络号和主机号构成,那么如何区分哪些是网络号那些是主机号呢?这里就引入了子网掩码,子网掩码是32位的二进制,左半部分全是1,右半部分全是0.与IP地址的每一位相互对应,1表示该位表示网络号,0表示该位表示主机号. 特殊的IP地址:1.主机号全是0:这样的IP地址表示的网段,不应该分配给具体的主机,即使设置给主机,主机也无法上网. 2.主机号全是0:这样的IP表示广播IP,向广播IP上发送数据,此时,就会发送给局域网中的所有设备. 3.127.* :环回IP,127.0.0.1 向这个IP发送数据,就是自己来接收.
2.路由选择
1.主机发送数据包到目的主机:当主机发送数据包时,会首先检查目的主机的IP地址,查看是否和自己在同一个内网,如果在,则主机直接将数据包发送到目的主机的MAC地址.如果发现目的主机和自己不在同一个内网,主机将数据包发送给路由器.
2.路由器转发数据包:路由器收到主机发来的数据包之后,检查数据包的目的IP地址,查看路由表,按照最长前缀匹配原则进行匹配.路由器会查找路由表中与目的IP地址匹配的最长前缀.如果找到匹配的路由条目,路由器将数据包发送到对应的下一跳地址或出接口.如果没有找到匹配的路由条目,路由器会根据默认路由进行转发,即一个指向外部网络的网关.数据包一般会经过多个路由器的转发,才会到达目的主机,每个路由器都会重复上述的查找和转发过程.直到数据包最终到达目标网络.每次转发时,数据包的IP头部信息保持不变,MAC地址会随着每`跳转发而改变.