目录
网络层有两个作用
1.地址管理
2.路由选择
网络层的代表:IP协议
IP协议
报文结构
4位版本:此处的取值只有两个,4和6,对应着IPv4协议和IPv6协议.
4位首部长度:描述了IP报头多长(IP的报头是可变长的),因为报头中有一个选项部分,是变长的,是可有可无的,注意此处的单位是4字节.
8位服务类型:实际上只有4位是有效的,这4位中,只有1位可以是1,其他的都是0,4位的1也表示IP协议的4种形态/4种工作模式.(最小延时,最大吞吐量,最高可靠性,最小成本)
16位总长度(字节数):描述了一个IP数据包的长度(头+载荷),这个长度减去前面的IP报头长度,就是载荷的长度,就是一个完整的TCP/UDP数据报的长度.
16位的总长度就意味着一个IP数据报,最大只能支持64kb的数据,但是IP自身就支持对包的拆分和组装,一个IP数据报携带的数据载荷太长了,超过了64kb,就会在网络层针对数据进行拆分,把一个数据拆成多个IP数据报,在分别发送,接收方在重新组装.
16位标识:同一个数据报拆成的多个包的标识是一样的.
3位标识:结束标志,用来辨认当前包是不是拆包后的最后一个包.
13位片偏移:标识了多个包的先后顺序.
8位生存时间:一个数据报在网络上能够传输的最大时间..
这个时间的单位不是"秒"而是"次数",一个数据报构造出来的时候,会有一个初始的TTL数值(比如32,64,128...),这个报每经过一次路由器转发,TTL-1,如果一直减到0了,还没有到达目标,此时就认为这个包永远到不了了,就可以丢弃了.
8位协议:描述了当前的载荷部分是属于哪个协议(TCP/UDP..)
16位首部校验和:此处只需要针对首部进行校验,载荷部分自身已经有校验和了.
32位源IP地址和32位目标IP地址:这个是IP协议中最重要的部分.
此处看到的IP地址是32位的整数,而我们日常见到的是一串数字[61.185.187.142],把32位,4个字节的数字分割开,分成四个部分,每个部分分别使用0-255十进制整数表示(这种表示方法叫做点分十进制).
地址,我们期望每个设备都不相同,但是32位数字,只能表示42亿9千万个数字,期望使用这个数字表示全世界所有的上网设备,当前物联网的时代显然是不够用的.
为了解决IP地址不够用的问题,想了很多办法:
1.动态分配IP地址
给上网的设备分配地址,不上网的设备不分配,全世界的设备并不是同一时间都在上网,此时就可以省下一批ip地址了.这个方案没有从根本上增加ip地址,只是提高了利用率,治标不治本.
2.NAT 网络地址转换
本质是使用一个IP代表一批设备,能够大大提高ip地址的利用率,这一批设备用端口号来区分.
在NAT背景下,就把IP地址分成两个大类:
1)内网IP(私有IP) 10.* 172.16.*-172.31.* 192.168.*
2)外网IP(公网IP) 私有IP剩下的都是公网IP
NAT要求,公网IP必须是唯一的,私网IP可以在不同的局域网中重复出现.
如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问.
公网的设备,无法直接访问私网的设备,不同的局域网的设备无法直接相互访问.
打开cmd,输入ipconfig,即可查看当前设备的IP地址
10开头的就属于局域网内部的私有IP.
内网IP只要在局域网内部不重复即可,不同的局域网是允许重复的.
我们可以打开浏览器搜索IP地址
这就是一个外网的IP地址.
接入运营商路由器的电脑,去访问外部的服务器都会被路由器换成自己的外网IP.
站在服务器的角度,看到的是NAT设备(运营商路由器)转换之后的外网IP.
如果同一个运营商路由器下的多个电脑访问同一个服务器,服务器的响应就会先发给路由器,路由器在根据这些电脑不同的端口号来区分,来决定发给哪个设备.
因此,服务器拿到的只是路由器的IP,不能拿到我的电脑的内网IP,如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动找到我.
NAT机制能有效的解决IP不够用的问题,但是带来的副作用就是网络环境更加复杂了.
3.IPv6
根本上解决了IP不够用的问题.
IPv6使用16个字节来表示IP地址,128位.
42亿*42亿*42亿*42亿,这个数字非常之大,足以表示地球上的每一粒沙子.
IPv6从根本上解决了IP地址不够用的问题,但是当前世界上仍然是NAT+IPv4+动态分配 来进行网络组建.
这是由于IPv4和IPv6是两个不相兼容的协议,如果要支持IPv6,就需要更换网络设备,成本很高.
地址管理
IP地址可以分为两个部分:
1.网络号:标识网段(标识局域网),保证相互连接的两个网段具有不同的标识.
2.主机号:标识主机,保证在同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号.
那么一个IP地址,网络号和主机号的分界是怎么定的?
有一个单独的概念"子网掩码"来判断哪些是网络号,哪些是主机号.
网络号不一定就是前三个字节,都是可以调整变化的,此处的255.255.255.0就是子网掩码.
子网掩码有32位,左侧全是1,右侧都是0,1的部分就描述了IP有多少位是网络号>
255.255.255.0=>1111 1111 1111 1111 1111 1111 0000 0000
左侧24位是网络号,剩下的是主机号.
特殊IP
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
路由选择