网络层是OSI模型中的第三层,负责在不同网络之间传输数据包。网络层的主要功能是将数据包从源主机传输到目标主机,通过路由选择最佳路径并进行数据分组和转发。网络层使用IP地址来标识计算机在网络中的位置,并通过路由器来实现不同网络之间的通信。网络层还处理数据的分组、寻址、路由选择和数据包传输等任务,以确保数据能够在多个网络之间可靠传输。网络层是构建互联网和广域网的重要层级之一,负责实现跨网络的数据传输和路由选择功能。
一、基本概念
-
主机:
- 网络中的终端设备,如计算机、智能手机或服务器,用于发送和接收数据。配有IP地址,但不进行路由控制。
-
路由器(Router):
- 路由器是一种网络设备,用于在不同网络之间转发数据包。
- 路由器工作在网络层(第三层),根据目标IP地址来转发数据包。
- 路由器能够实现网络间的数据传输,通常用于连接本地网络和互联网之间。
- 路由器具有路由表,用于确定数据包的最佳路径转发。
- 路由器提供网络地址转换(NAT)、端口转发、防火墙等网络管理和安全功能。
-
交换机(Switch):
- 交换机是一种网络设备,用于在局域网内部传输数据包。
- 交换机工作在数据链路层(第二层),根据MAC地址来转发数据包。
- 交换机可以通过学习和转发机制,将数据包仅转发到目标设备,提高网络传输效率。
- 交换机可用于本地网络内部设备的连接和通信,提供较高的带宽和较低的延迟。
- 交换机还可以提供虚拟局域网(VLAN)、链路聚合、流控制等功能,灵活管理局域网内部网络。
-
其他网络设备
-
节点:
- 网络中的任何连接点,包括主机、路由器和其他网络设备,是信息传递的基本单元。
-
网关:
- 在计算机网络中,网关(Gateway)是连接两个不同网络之间进行数据交换的设备或程序。网关的作用是转发数据包,并负责将数据从一个网络传输到另一个网络。它充当连接不同网络的桥梁,实现不同网络之间的通信和数据传输。
- 网关可以是物理设备(如路由器或交换机)或逻辑设备(如计算机上运行的网络软件)。物理网关通常连接不同类型的网络,如将局域网连接到互联网;而逻辑网关通常用于在网络中转发数据包、管理流量或提供额外的安全功能。
-
互联网:
- 互联网(Internet),又称网际网路或音译因特网、英特网,是网络与网络之间所串连成的庞大网络。这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。
-
万维网:
- 万维网(World Wide Web)是一种基于互联网的信息服务系统,是一种通过超文本链接(HyperText)来访问和传输信息的分布式信息系统。万维网是互联网上的一部分,是通过HTTP协议访问各种网页和资源的网络服务。
-
超文本链接:
- 超文本链接(Hyperlink)是万维网中的一个重要概念,指的是在网页内容中,通过点击文本、图像或其他内容可以跳转到另一个网页或资源的链接。超文本链接使用户可以方便地在网页之间进行导航,探索不同的内容和资源。
- 超文本链接通常由以下两部分组成:
- 文本或图像:用户可以点击的可视化内容,用于触发链接跳转的操作。
- URL(统一资源定位符):指向目标网页或资源的地址,当用户点击链接时,浏览器会根据URL加载相应的内容。
二、IP协议
2.1 IPv4协议概述
IP协议,全称为Internet Protocol,是互联网中最核心、最基础的协议之一,它负责为互联网上的每一台设备分配一个唯一的地址,并确保数据能够准确地从源地址传输到目的地址。IP协议目前有两个主要版本:IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)。下面主要介绍IPv4。
IPv4 概述
IPv4是互联网协议的第4版,它使用32位(4字节)地址,以点分十进制表示法(例如,192.168.1.1)来表示网络中的每个设备。这种地址系统允许互联网上有大约43亿个唯一地址。然而,随着互联网的快速发展和设备的激增,IPv4地址资源已经接近枯竭。
IPv4 地址结构
IPv4地址被划分为几个部分,以支持网络中的层次化寻址。地址通常被分为网络部分(Network Portion)和主机部分(Host Portion),这种划分通过子网掩码(Subnet Mask)来实现。子网掩码是一个32位的二进制数,用于指定IP地址中哪些位是网络部分,哪些位是主机部分。
IPv4 主要特点
- 地址空间有限:如前所述,IPv4地址空间只有大约43亿个地址,这对于日益增长的互联网设备来说远远不够。
- 无连接:IPv4是一种无连接的协议,即发送数据前不需要建立连接,每个数据包都是独立传输的。这种特性使得IPv4能够支持广播和多播,但也增加了数据包丢失或乱序的风险。
- 尽力而为的传输:IPv4不提供数据传输的可靠性保证,它只负责将数据从源地址传输到目的地址,而不关心数据是否完整到达。数据的完整性和可靠性通常由上层协议(如TCP)来保证。
- 支持选项和扩展头:IPv4允许在头部包含选项和扩展头,以支持额外的功能,如安全(IPsec)、源路由等。
IPv4 与 IPv6
鉴于IPv4地址空间的限制,IPv6被设计出来作为IPv4的继任者。IPv6使用16字节128位地址,提供了几乎无限的地址空间,同时还改进了其他方面的功能,如安全性、自动配置等。然而,由于IPv4的广泛应用和兼容性问题,IPv6的普及过程相对缓慢。
2.2 IPv4的报头结构
IPv4协议的报头格式定义了数据包在网络中的传输方式。IPv4报头是网络层协议中的关键部分,它提供了必要的信息以确保数据包能够正确地从源主机传输到目的主机。IPv4报头的格式如下:
-
版本(Version):
- 长度:4位
- 描述:表示IP协议的版本号。对于IPv4,这个字段的值是4。
-
首部长度(IHL, Internet Header Length):
- 长度:4位
- 描述:表示IP报头的长度,单位是32位字(4字节)。这个字段的最小值是5(即20字节),最大值是15(即60字节)。这是因为IPv4报头可能包括选项字段,首部长度用于确定报头的总长度。
-
服务类型(Type of Service, ToS):
- 长度:8位
- 描述:用于指示数据包的服务质量。这包括优先级(Precedence)和服务类型(如延迟、吞吐量、可靠性等)。这个字段在IPv4中被称为"服务类型"字段,但在现代网络中,它常被称为"流量类(Traffic Class)"字段,包含不同的优先级和性能需求。
- 具体包括:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要。
-
总长度(Total Length):
- 长度:16位
- 描述:整个IP数据包的长度,包括报头和数据部分,单位是字节。最大值是65,535字节。
-
标识(Identification):
- 长度:16位
- 描述:唯一标识数据包的标识符,通常用于数据包分片。分片后的数据包会带有相同的标识符,以便接收方能够将它们重新组合。
-
标志(Flags):
- 长度:3位
- 描述:用于控制和指示数据包是否可以分片,以及是否还有更多分片。包括:
- 第0位(保留位): 应始终为0。
- 第1位(不分片标志, DF): 如果设置为1,表示数据包不能分片。
- 第2位(更多分片标志, MF): 如果设置为1,表示后面还有更多分片。
-
片偏移(Fragment Offset):
- 长度:13位
- 描述:表示当前数据包是原始数据的哪个部分,以8字节为单位。用于数据包分片和重组。
-
生存时间(Time to Live, TTL):
- 长度:8位
- 描述:用于防止数据包在网络中无限循环。每经过一个路由器(跳数)TTL值减1,当TTL值减为0时,数据包会被丢弃。
- 游离IP报文:指的是在网络中因各种原因(如网络路由配置错误或网络中存在循环路径)导致的数据包无法找到合适的目的地,而在网络中不断循环的情况。这种现象也被称为“数据包环路”或“网络环路”。
-
协议(Protocol):
- 长度:8位
- 描述:表示数据包载荷中的协议类型,如TCP(6)、UDP(17)等。用来告知接收方如何处理数据包中的有效负载。
-
头部校验和(Header Checksum):
- 长度:16位
- 描述:用于校验IP报头的完整性。通过计算报头中所有字段的校验和,接收方可以检测报头是否在传输过程中被损坏。
-
源IP地址(Source Address):
- 长度:32位
- 描述:发送数据包的主机的IP地址。
-
目的IP地址(Destination Address):
- 长度:32位
- 描述:接收数据包的主机的IP地址。
-
选项(Options):
- 长度:可变
- 描述:提供附加的功能,如时间戳、路由记录等。这个字段是可选的,通常只有在需要时才会使用。
-
填充(Padding):
- 长度:可变
- 描述:为了确保报头的长度是32位字的整数倍,可能会填充额外的字节。填充部分不包括在IPv4报头的实际数据中。
-
数据(Data):
- 描述:报头之后的数据部分,包含要传输的实际信息。数据部分的长度取决于总长度字段减去报头长度。
报头和有效载荷如何分离?
- 固定长度 + 自描述字段(首部长度和总长度)
- 先直接读取20字节的定长报头(基本报头),从中获取到首部长度和总长度,就可以将报头和有效载荷分离了。
如何将有效载荷交付给上层协议?
- IP报头中包含协议字段,指明了数据包载荷中的协议类型,如TCP(6)、UDP(17)等。用来告知接收方应该将有效载荷交付给传输层的哪个协议。
重新理解TCP面向字节流
tcp和udp都要将报文交给ip层,不管是面向字节流还是面向数据报,将来在网络中发送的都是一个个IP协议的数据报。所谓面向字节流是tcp提供给应用层的概念,并不是网络中真正的数据传输形式。
2.3 IP报文的分片和组装
在IPv4协议中,如果数据包大小超过了链路层MTU(Maximum Transmission Unit)的限制,即超过了最大传输单元,就需要对数据包进行分片。分片是将原始数据包分割成多个更小的数据包,以便在网络中传输。
当源主机发送一个大的IP数据包时,如果数据包大小超过MTU的限制,则路由器会将数据包进行分片,并在每个分片中包含原始数据包的一部分。在每个分片中,除了首个分片外,都会有一个偏移字段,表示该分片在原始数据包中的位置。
在路由器收到这些分片后,会按照目的主机发送的顺序将分片进行重组。重组时根据IP首部中的标识字段来识别哪些分片是同一个原始数据包的一部分,偏移字段来确定每个分片的位置,并使用分片中的偏移数据将多个分片合并为原始数据包。
如果有任何一个分片在传输过程中丢失或损坏,重组后的数据包也会丢失或损坏,因此在分片和组装过程中,要确保所有分片都能正确到达目的主机,以保证数据的完整性。
注意:如果有任何一个分片在传输过程中丢失或是损坏,整个数据包会在IP层被直接丢弃,由TCP协议负责超时重传。
IPv4报头结构中关于分片和组装的字段:16位标识、3位标志、13位片偏移。
三、网段划分
3.1 网络号和主机号
IP地址分为两个部分, 网络号和主机号
-
网络号: 保证相互连接的两个网段具有不同的标识;
-
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
-
不同的子网其实就是把网络号相同的主机放到一起.
-
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复.
-
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.
路由器构建局域网
路由器本质也是特定子网的一台主机,也需要配置IP地址。
路由器至少要连接两个子网,而每个子网中的网络号一定不同,因此路由器要配置多个IP。
路由器除了有路由转发的功能还有一个重要功能就是构建局域网。
路由器通常是其构建的局域网中的第一台设备,一般他的IP地址都是:网络号.1
问题:那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情。能不能做到联网后自动分配IP地址呢?这就不得不提DHCP协议了。
3.2 IP地址的类型
在IPv4地址中,IP地址根据其网络部分(网络ID)的范围可以分为三类,即A类、B类和C类。这些类别根据IP地址的高位部分来确定。
-
A类地址(Class A Address):
-
A类地址的第一个字节范围是1-126,剩下的三个字节用于主机地址。
-
A类地址中网络ID占据8位(最高位为0),主机ID占据24位。
-
A类地址范围是1.0.0.0到126.255.255.255。
-
A类地址是用于大型网络的地址类别,可容纳大量主机,适用于大型组织或互联网服务提供商。
-
-
B类地址(Class B Address):
-
B类地址的第一个字节范围是128-191,前两个字节用于网络ID,剩下的两个字节用于主机ID。
-
B类地址中网络ID占据16位(最高两位为10),主机ID占据16位。
-
B类地址范围是128.0.0.0到191.255.255.255。
-
B类地址通常用于中等大小的网络,能够容纳较多的主机。
-
-
C类地址(Class C Address):
-
C类地址的第一个字节范围是192-223,前三个字节用于网络ID,最后一个字节用于主机ID。
-
C类地址中网络ID占据24位(最高三位为110),主机ID占据8位。
-
C类地址范围是192.0.0.0到223.255.255.255。
-
C类地址用于小型网络,主要用于家庭网络、小型企业等,每个网络最多可容纳256台主机。
-
除了A、B、C类地址外,还有D类和E类地址用于特定用途。不过,随着IPV6的普及,类似A、B、C类地址的划分在IPv6中已被废弃,取而代之的是更加灵活的地址分配方式。
3.3 子网划分(CIDR)
子网划分是将大型网络划分为多个较小的子网,以提高网络性能、安全性、管理效率和资源利用,并便于网络扩展和维护。
CIDR(Classless Inter-Domain Routing)是一种用于对IP地址空间进行划分和分配的方法。传统的IP地址分配方式采用了IP地址类别(Classful addressing),将IP地址空间分为A、B、C、D、E五种类别,每种类别有固定的网络位和主机位划分。然而,这种分配方式并不高效,导致了IP地址空间的不平衡使用。
CIDR引入了可变长度子网掩码的概念,允许网络管理员根据实际需求对IP地址空间进行更灵活的划分。CIDR将IP地址表示为“IP地址/子网掩码位数”,如192.168.1.0/24,表示网络地址为192.168.1.0,子网掩码为24位(即255.255.255.0)。
CIDR的使用使得网络地址可以更加有效地分配和利用,减少了IP地址的浪费,同时也更容易管理较大的IP地址空间。CIDR的引入对互联网的发展起到了重要的促进作用。
子网掩码(Subnet Mask)是用于确定一个IP地址中哪部分是网络地址,哪部分是主机地址的32位掩码。帮助网络中的设备确定彼此的位置和通信方式。子网掩码从来不会单独出现,在他出现之前一定要把IP地址给出来,他们是一对的。
子网掩码的表示方式:
- 点分十进制表示法:
- 子网掩码通常以“255.255.255.0”这样的格式表示,其中每个“255”代表8位二进制中全为1的部分,而每个“0”代表8位二进制中全为0的部分。在子网掩码中,全为1的部分对应网络地址,全为0的部分对应主机地址。
- 例如,如果一个IP地址是192.168.1.10,子网掩码是255.255.255.0,那么网络部分是192.168.1,主机部分是10。这意味着有254台主机可以连接到这个网络(由于IP地址的一部分被用作网络标识和广播地址,因此可用主机数量少于256)。
- 网络后缀法:即<IP地址>/<网络号位数>,例如138.96.0.1/18,表示前18位是网络号,后14位是主机号。(显然这不是原始网络,而是一个经过划分后的子网)
正确配置子网掩码对于网络设备的通信至关重要,它可以确保通信的目标地址正确识别,并帮助路由器和交换机准确定位目标设备。
例题(重要)
3.4 特殊的IP地址
-
网络地址:将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
-
广播地址:将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
-
本地环回地址:127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
-
未知目标地址:在计算机网络中,0.0.0.0是一种特殊的IP地址,通常用作表示未指定或未知的目标地址或默认路由地址。它通常用于初始化网络配置或作为默认的源IP地址。
-
私有IP地址:IPv4的私有IP地址范围为10.0.0.0至10.255.255.255、172.16.0.0至172.31.255.255和192.168.0.0至192.168.255.255。是在局域网内部使用的IP地址,不直接暴露在公共互联网中。
-
四、互联网和网络运营商
互联网(Internet)是指全球范围内连接了数十亿台计算机的巨大网络系统。它是由多个网络通过协议相互连接而成,为全球各地的设备和用户提供了互相通信和信息互换的平台。互联网的核心特点包括开放、中立、去中心化、异构以及覆盖全球等。
网络运营商(Network Operator,ISP)是指提供接入互联网服务的组织或公司,其主要业务是为终端用户提供互联网连接、宽带接入、数据传输和相关服务。网络运营商通常拥有自己的网络基础设施、数据中心、机房等设施,负责构建、维护和管理网络设备和系统,并通过主干网络连接到互联网的核心骨干网络。
网络运营商的主要职责和功能包括:
- 互联网接入服务:为终端用户提供互联网接入服务,包括ADSL、光纤、无线网络等多种接入方式。
- 数据传输和交换:提供数据传输、路由、转发等网络服务,确保用户之间的通信和数据传输顺畅。
- 网络基础设施建设和维护:建设和维护网络基础设施、骨干网络、数据中心、服务器等设施。
- 网络安全管理:保障网络的安全和稳定运行,包括防火墙、入侵检测、数据加密等安全措施。
- 互联网服务提供:提供域名解析、主机托管、邮件服务等一系列互联网服务。
网络运营商在互联网生态系统中扮演着重要的角色,连接了用户和互联网之间的纽带,为人们的网络通信和信息交流提供了便利和支持。不同的网络运营商之间通过协议和互联接入点(IXP)相互连接,构成了复杂的全球互联网架构。
提示:在中国,主要的网络运营商包括中国电信、中国联通和中国移动,以及近年来加入的中国广电。这些运营商在提供网络服务方面各有特点和优势。
五、私有IP和公网IP
私有IP和公网IP是指在互联网中用于区分内部网络和外部网络的两种IP地址:
-
私有IP地址(Private IP Address)是在局域网内部使用的IP地址,用于内部通信和资源共享,不直接暴露在公共互联网中。私有IP地址范围由互联网工程任务组(IETF)定义,也分三类:
-
10.0.0.0 到 10.255.255.255:对应于网络号的范围是10.0.0.0/8,其中主机号的位数为24位。
-
172.16.0.0 到 172.31.255.255:对应于网络号的范围是172.16.0.0/12,其中主机号的位数为20位。
-
192.168.0.0 到 192.168.255.255:对应于网络号的范围是192.168.0.0/16,其中主机号的位数为16位。
-
-
公网IP地址(Public IP Address)是在互联网中全局唯一的IP地址,用于将计算机、服务器等设备直接连接到互联网,允许与外部网络进行通信和数据交换。公网IP地址是由互联网服务提供商(ISP)或其他机构分配给设备的唯一标识符,可供全球范围内访问和通信。
私有IP地址用于内部网络中的通信和连接,而公网IP地址用于全球互联网之间的通信和连接,二者在互联网中起到不同的作用。
- 一个路由器可以配置两个IP地址, 一个是WAN口IP(广域网IP), 一个是LAN口IP(局域网IP)
- 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
- 不同的家用路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了.
- 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,最外层的运营商路由器, WAN口IP就是一个公网IP了。
问题:既然子网(私有)IP是可以重复的,也就是说不能唯一确定的。那么使用子网IP的我们是如何与互联网进行通信的呢?这就需要NAT技术进行网络地址转换了。
- 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。
- 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有公网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.
六、路由
路由是指在计算机网络中确定数据包从发送端到接收端的路径的过程。在网络中,数据包需要经过多个网络设备和网络节点才能到达目的地,而路由则是确定这个数据包的传输路径的过程。
具体来说,路由的概念包括以下几个要点:
-
路由器(Router): 路由器是负责在网络中转发数据包的设备,它根据网络中设定的路由表,决定数据包从哪个接口转发到下一个节点。路由器是实现路由功能的主要设备。
-
路由表(Routing Table): 路由表是路由器中存储的用于确定数据包转发路径的数据结构,其中包含了目的IP地址和相应的下一跳的信息。路由器根据目的IP地址查询路由表,找到最佳的转发路径。(不仅是路由器具有路由表,任何一台具有三层路由功能的设备都具有路由表)
-
最短路径算法(Shortest Path Algorithm): 路由器使用最短路径算法来计算数据包传输的最佳路径。常见的最短路径算法包括Dijkstra算法和Bellman-Ford算法,它们通过计算网络中各节点之间的距离和代价来确定最佳路径。
-
静态路由(Static Routing)和动态路由(Dynamic Routing): 静态路由是手动配置路由表中的路由信息,适用于网络结构稳定的情况;动态路由则是根据网络拓扑变化动态学习和更新路由表中的信息,适用于网络结构经常变化的情况。
提示:关于最短路径算法我们在【图形结构】图 {最短路径:Dijkstra算法,Bellman-Ford算法,Floyd算法}-CSDN博客已经讲过了,同学们可以点击链接,跳转阅读。
路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程.
所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
IP数据包的传输过程也和问路一样.
当IP数据包, 到达路由器时, 路由器会先查看目的IP; 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器; 依次反复, 一直到达目标IP地址;
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;
-
如果目的IP命中了路由表中记录的目标网络(与路由器直接相连), 就直接转发给目标主机即可;
-
当目的IP与路由表记录的所有网络都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址(路由器地址)。
假设某主机上的网络接口配置和路由表如下:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;
路由表可以使用route命令查看:
- 路由表的Destination是目的网络地址;Genmask是子网掩码;Gateway是下一跳地址(路由器地址);Iface是发送接口;
- Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;
转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
- 跟第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符
- 再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;
- 由于192.168.56.0/24正是与eth1接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;
转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
- 依次和路由表前几项进行对比, 发现都不匹配;
- 按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
- 由192.168.10.1路由器根据它的路由表决定下一跳地址;