我们花费很大的篇幅讲解了应用层的TCP和UDP协议。现在我们进入到网络层的学习,重点要学习的就是IP协议。
对于IP协议来说,重要的有IPv4和IPv6协议,我们重点介绍IPv4协议。
此处的取值只有4和6,代表着是IPv4还是IPv6协议。具体的关于IP版本的知识可以看: 【电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅】https://www.bilibili.com/video/BV1i14y157YV/?share_source=copy_web&vd_source=f44a1aec9bd3f4b80728fab35b04d675
描述了IP报头多长。同时在选项部分,也会有相关的参数,可以使其变长。此处的长度是4字节。
虽然说是8位,但是其实只有4位有效。这4位中只有1位可以是1,其他的都是0.4位就表示IP协议的四种工作形态/模式,分别为:
最小延时、最大吞吐量、最高可靠性、最小成本。
描述了一个IP数据报的长度(IP报头+载荷)。同时16位总长度意味着一个IP数据报最大就只能支持64KB,但是一个IP数据报携带的数据载荷太长了,超过了64KB,就会在网络层针对数据进行拆分,把一个数据拆分成多个IP数据报,再分别发送,接收方再重新拼装。
虽然说是64KB,但是IP协议不一定就按照64KB为单位进行拆分,实际的单位往往更小。
和上一条有关,同一个数据拆分成的多个包标识是一样的。
这是结束标志。
表示了多个包的先后顺序。这几个字段都是辅助拆包、组包提供的。
一个数据报在网络上能够传输的最大时间。这个时间的单位不是秒而是次数。一个数据报构造出来,会有一个初始的TTL数值,比如32或者64,这个数据报每次经过一个路由器转发后TTL-1,如果一只减到了0还没到达目标就会认为这个包此时永远也到不了,就可以丢弃了。
描述了当前的载荷部分是属于TCP还是UDP协议。
此处只需要对首部进行校验,载荷部分自身已经校验过了。
这是IP协议最重要的部分。此处看到的IP地址是32位的整数,但是我们日常生活中看到的IP地址是一串数字,比如192.168.1.1。这是通过点分十进制把32位的整数转换成4个部分,每个部分分别使用0-255十进制整数表示。这就引出接下来的地址管理。
诞生之初IP协议想要的是全球每个上网设备都能够有一个IP地址,但是32位数字只能表示42亿9000万个数字,为了解决IP地址不够用的问题,想了很多办法:
1.动态分配IP地址
2.NAT网络地址转化:本质是用一个IP代替一批设备。
在NAT背景下,把IP地址分成了两个类,内网(私有IP)(10.* ; 172.16.*-172.31.* ; 192.168.*)和公网(公网IP)
NAT要求,公网IP是唯一的,私网IP可以在不同的局域网中重复出现的,如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问。
这些接入运营商路由器的电脑,去访问外部服务器都会被路由器替换成路由器自己的外网IP。我的IP经过运营商路由器之后,会把我的源IP改了。
NAT能够有效的解决IP不够用的问题,但是副作用就是网络环境更加复杂了。
WAN,指的是广域网。LAN,指的是局域网。
网络号:标识网段,保证相互连接的两个网段具有不同的标识。
主机号:标识主机,同一网段内,主机之间具有相同的网络号。
192.168.0.10 这是一个常见的设定,网络号是192.168.0,主机号就是10
并且当前局域网下的设备,网络号都是192.168.0
每个路由器都有两个IP分别属于不同的网段,分为WAN(广域网)和LAN(局域网)。相邻的局域网,网络号是不能相同的。
但是一个IP地址,前面从哪里到哪里是网络号?后面从哪里到哪里是主机号?
子网掩码表明一台主机所在的子网与其他子网的关系。
网络号不一定就是前三个字节,简单的说就是子网掩码255的部分就是网络号。