网络层重要涉及到的协议是IP协议。
IP协议主要完成的工作是:
版本(Version):占4位,表示IP协议的版本号。目前广泛使用的版本是IPv4和IPv6。
头部长度(Header Length):占4位,表示IP报头的长度,以32位字(4字节)为单位。由于IP报头的长度是可变的,所以这个字段表示IP报头的字数。最小值为5(20字节),最大值为15(60字节)。
服务类型(Type of Service):占8位,用于指定IP数据包的服务质量要求,如优先级、延迟、可靠性等。
总长度(Total Length):占16位,表示整个IP数据包的总长度,包括IP报头和数据部分。最大值为65535字节。
标识(Identification):占16位,用于唯一标识一个IP数据包。在分片和重新组装过程中起到重要作用。
标志(Flags):占3位,用于标识IP数据包的特殊处理方式。其中,第1位保留,第2位表示是否允许分片,第3位表示是否为最后一个分片。
片偏移(Fragment Offset):占13位,用于指示当前分片在原始IP数据包中的位置。通过片偏移和标识字段,可以在目标主机上重新组装分片。
生存时间(Time to Live):占8位,表示IP数据包在网络中的最长存活时间,以防止报文在网络中永远循环。每经过一个路由器,生存时间减1,当生存时间为0时,数据包将被丢弃。
协议(Protocol):占8位,指定封装在IP数据包中的上层协议类型,如TCP、UDP、ICMP等。
校验和(Header Checksum):占16位,用于检测IP报头是否出现错误,以保证报头的完整性。
源IP地址(Source IP Address)和目标IP地址(Destination IP Address):分别占32位,表示发送方和接收方的IP地址。
选项(Options):可选字段,用于在IP报头中添加一些额外的选项信息,如记录路由、时间戳等。
解释:
IP地址本质上是一个32位整数,为了方便通常把IP地址表示为点分十进制,通过三个点分成四个部分,每个部分一个字节,每个部分的取值都是0-255.
IP地址的存在是为了能够区分网路上的不同的设备,但是32位整数最多只能表示42亿多个数,而世界上约有70亿人,所以实际的电子设备数量是超过了4个字节能表示的范围,显然做不到每个网络设备都有一个唯一的IP地址。
上个世纪90年代就面临了这样的问题,于是提出了两个解决方案:
1. 动态分配IP地址
全世界的设备也不是同一时刻都在上网,就把IP地址设为动态分配的模式,当你用到再给你分配IP地址。
2. NAT机制(网络地址映射)
把IP地址分为两个大类:
1. 私网IP / 局域网IP
IP以 10.* , 172.16.* - 172.31.* , 192.168.* 这三类都是私网IP
2. 公网IP / 广域网IP
要求公网上的设备IP不能重复,私网上的设备,只需保证局域网内的IP不重复即可,不同局域网中的IP可以重复。
由于这个机制就有了一些限制:
1.公网设备访问公网设备,没有限制
2.相同局域网内设备互相访问也没有限制
3.不同局域网间设备不能访问,因为有可能遇到两个局域网中存在相同的IP地址。
4. 局域网设备访问公网设备需要对局域网设备的IP转换为公网IP
5. 公网设备不允许主动访问局域网设备。
路由器集成了NAT,一般路由器都会有两个IP地址,一个是LAN口IP(一般是一个局域网IOP),一个是WAN口IP( 可能是局域网IP,也可能是公网IP),路由器的核心功能就是把这两个网络连接起来。当数经过这个路由器,想进一步转发,就会把IP报头中的源IP进行替换,替换为该路由器的WAN口IP(只有源IP是私网IP时才会替换),这个数据包到达服务器之后,服务器看到的IP就是路由器的WAN口IP。这样的机制就能让多个设备共用一个公网IP发送数据。
服务器返回数据时如何找到原来的设备?
路由器进行替换IP时,会把这次通信的相关信息记录下来,如:源IP,替换后的IP,目的IP,源端口号,目的端口号,替换后的端口号,等信息,路由器接收到返回的数据时,就会对照储存的信息把IP还原。
替换后的端口号:为了防止无法区分不同主机的同一个端口访问同一个服务器的情况,路由器发送数据时还会对源端口号进行一个替换。
当前互联网 是 NAT + 动态分配结合的模式。
3. IPV6
IPV6使用 16个字节表示IP地址,从根本上解决了问题。
但是IPV6的报头结构和IPV4不兼容,要使用IPV6就需要更新硬件设备,所以当前仍然是IPV4使用的更多。
网段划分是指将一个大的网络划分成若干个子网络的过程。在计算机网络中,通常使用IP地址和子网掩码来进行网段划分。IP地址用于唯一标识网络中的每个设备,而子网掩码用于指定哪些部分是网络号,哪些部分是主机号。
在IP地址中,网络号和主机号是用来划分一个网络中不同设备的标识部分。
网络号(Network ID)是指用于标识一个网络的一部分位。它表示的是一个IP地址所属的网络。通过网络号,可以确定一个IP地址属于哪个网络,从而实现在不同网络之间的通信。
主机号(Host ID)是指用于标识一个网络中具体设备的一部分位。它表示的是网络中的一个具体主机或设备的地址。通过主机号,可以唯一标识一个设备,并在网络中进行通信。
在IPv4地址中,网络号和主机号的划分是基于子网掩码(Subnet Mask)的。子网掩码中的1位表示网络号,0位表示主机号。子网掩码与IP地址逐位进行按位与运算,得到的结果就是网络号和主机号的划分。
例如,假设有一个IP地址为192.168.0.1,子网掩码为255.255.255.0,那么它的网络号就是192.168.0,主机号就是1。这样划分后,192.168.0.x范围内的IP地址都属于同一个网络,可以直接进行通信。
通过网络号和主机号的划分,可以实现有效的网络管理和通信。不同网络号的设备需要通过路由器进行通信,而同一网络号的设备可以直接通信。
注意:两个相邻的局域网的网络号必须不同
特殊的IP地址:
在IP协议中,每个路由器都维护了一个路由表,其中包含了路由器所知道的网络和与之相关联的下一个网络或设备信息。当一个路由器接收到一个数据包时,它会根据数据包的目标IP地址查找路由表,以确定应该将数据包发送到哪个接口和下一个网络或设备。 由于网络结构太复杂了,每个路由器都无法掌握全局的信息,所以路由器规划出来的路线只能是一个局部最优解,无法在最开始的时候就把路线确定好。