计算机网络 ------ 网络层(IP数据报)
我们今天进入网络层的学习。
网络层要满足的功能
网络层作为OSI模型中的第三层,是计算机网络体系结构的关键组成部分,其主要功能包括但不限于以下几点:
- 路由与转发:网络层负责决定数据包从源主机到目的主机的最佳路径。这一过程包括路由选择(Routing),即根据网络拓扑、链路状态、路由协议等信息计算路径;以及分组转发(Packet Forwarding),即路由器根据路由表将数据包从一个网络接口转发到另一个网络接口,直至到达目的地。
- 异构网络互联:网络层使得不同类型的网络(如以太网、Wi-Fi、卫星网络等)能够相互通信。通过使用网关和路由器等中间设备,网络层能够实现不同网络技术之间的桥接,保证数据可以在多样化的网络环境中无缝传输。
- 地址分配与寻址:网络层为每台主机分配逻辑地址(如IPv4或IPv6地址),这些地址用于在网络中唯一标识每一台设备。同时,它还负责将高层的逻辑地址转换为数据链路层的物理地址(MAC地址),以实现数据的实际传输(如通过ARP协议)。
- 拥塞控制:网络层需要监控网络的拥塞状况,当网络资源接近饱和时,采取措施如调整数据发送速率、丢弃某些数据包或采用其他策略,以防止网络性能严重下降,确保网络的稳定性和效率。
- 分片与重组:对于需要跨越多个网络传输且超过下一跳最大传输单元(MTU)的数据包,网络层负责将其分片并在目的地重新组装,确保数据完整性。
- 服务质量(QoS)管理:根据应用需求,网络层可以提供不同级别的服务,如优先级调度、带宽预留等,以保证关键业务的数据传输质量。
- 安全性:虽然安全性主要是传输层和应用层关注的焦点,但网络层也参与安全机制,如IPSec可以提供数据加密和身份验证,保护数据在传输过程中的安全。
综上,网络层是确保数据能够在复杂的网络环境中正确、高效、安全传输的基础,其功能直接影响到整个网络的性能和可靠性。
IP数据报
在这之前,我们来复习一下之前学的东西:
我们看到IP(网络层),占了很大一部分,其中IP向上为ICMP,TCP等 提供服务,也为下面的ARP,数据链路层,和物理层服务。
我们来回忆一个数据如何被处理的:
在计算机网络中,数据从一个应用程序传输到另一个应用程序的过程中,需要经过OSI模型的多个层次,每个层次都有其特定的功能。以下是一个简化的描述,说明数据从应用层到物理层再到接收端反向过程中的每一层所做的主要事情:
- 应用层:
- 数据最初由用户在应用程序中生成,比如在浏览器中输入网址或在邮件客户端撰写邮件。
- 应用层协议(如HTTP、SMTP、FTP)负责将用户数据封装成应用层数据单元,并附加必要的控制信息,如头部信息,以供下一层处理。
- 传输层:
- 传输层(TCP或UDP)接收应用层的数据,并添加源端口号和目的端口号,用于标识发送方和接收方的进程。
- TCP提供可靠传输,包括错误检测、流量控制、拥塞控制和重传机制;UDP则提供无连接服务,不保证数据的可靠传输,但速度快。
- 网络层(IP层):
网络层接收传输层的数据单元,并封装成IP数据报
。它添加源IP地址和目的IP地址,以及其它必要的控制信息。- 网络层负责路由决策,决定数据报在网络中的传输路径,并进行分片和重组处理(如果需要通过不同MTU的链路)。
- 数据链路层:
- 数据链路层将网络层的IP数据报封装成帧。这包括添加帧头(包含源MAC地址和目的MAC地址)和帧尾。
- 它还执行差错检测(如CRC校验),流量控制,以及介质访问控制(如CSMA/CD、CSMA/CA)。
- 物理层:
- 物理层处理实际的比特流传输,将数据链路层的帧转换成电信号、光信号或无线信号等物理信号。
- 它定义了网络连接的物理特性,如电压、线缆类型、信号频率等,确保数据能在物理媒介上传输。
接收端的反向过程:
- 数据从物理层开始,逐层向上解封装,每一层去除对应的头部信息,并根据头部信息进行必要的处理(如错误检测、流量控制)。
- 最终,数据到达应用层,恢复成原始的应用程序数据,供接收方应用程序使用。
我们看到,网络层接收到上层的数据之后,把这些数据封装,形成IP数据报,然后向下传输。
IP数据报格式
IP数据报是Internet Protocol (IP)协议中数据传输的基本单元,它包括两个主要部分:首部(Header)和数据部分(Data)。
IP数据报首部格式
- 固定部分(20字节)(80位):
- 版本(Version):占4位,表示IP协议的版本,常见的有IPv4(值为4)和IPv6(值为6)。
- 首部长度(Internet Header Length, IHL):占4位,表示首部的长度,单位为32位字(4字节),因此最小值为5(即20字节的首部)。
- 服务类型(Type of Service, ToS):占8位,用于指定数据报的优先级和服务类型。
- 总长度(Total Length):占16位,表示整个IP数据报的长度,包括首部和数据部分,单位为字节。
- 标识符(Identification):占16位,用于标识每一个IP数据报,当数据报需要分片时,所有分片具有相同的标识符。
- 标志(Flags):占3位,与分片有关,用于控制和标识数据报是否可以分片及是否为最后一个分片。
- 片偏移(Fragment Offset):占13位,用于指示分片在原始数据报中的相对位置。
- 生存时间(Time to Live, TTL):占8位,定义数据报在网络中的最大存活时间,每经过一个路由器TTL减1,为0时数据报被丢弃。
- 协议(Protocol):占8位,指出数据部分使用的上层协议,例如TCP(6)、UDP(17)。
- 头部校验和(Header Checksum):占16位,用于校验首部是否有错误。
- 源IP地址(Source Address):占32位(IPv4)或128位(IPv6),标识发送方的IP地址。
- 目的IP地址(Destination Address):占32位(IPv4)或128位(IPv6),标识接收方的IP地址。
- 可变部分:
- 选项(Options):可选字段,允许IP数据报携带额外信息,如记录路由、时间戳等。这部分的长度可变,因此首部总长度会超过20字节。
- 填充(Padding):为了保持首部为32位字节对齐,可能需要填充一些额外的0比特。
数据部分
- 这是实际传输的数据,可以承载如TCP段或UDP数据报等上层协议的数据。其长度是可变的,取决于实际传输的需求,但总长度(首部加数据)不能超过最大传输单元(Maximum Transmission Unit, MTU)限制,否则需要进行分片处理。
综上所述,IP数据报的格式设计旨在提供一种灵活且通用的封装机制,以支持不同类型的上层协议数据通过互联网进行传输。
IP数据报分片
IP数据报分片是网络层的一个重要机制,当一个IP数据报的大小超过了其即将穿越的网络路径中某段链路的最大传输单元(MTU)时,就需要进行分片。这个过程主要涉及以下几个方面:
- 目的: 分片的目的是确保大型的数据报能够适应各种网络链路的MTU限制,从而能够通过网络中的不同设备和链路进行传输。
- 过程: 分片通常发生在数据报的源节点或途经的任何需要分片的路由器上。源节点可以通过路径MTU发现(Path MTU Discovery)机制预先获知路径上的最小MTU以避免分片,但如果没有这样做或者路径MTU在传输过程中发生变化,路由器可能需要进行分片。
- 分片信息: 分片后的每个数据报片段都包含一个IP首部,其中的标识符(Identification)、标志(Flags)和片偏移(Fragment Offset)字段对于分片和重组至关重要。
- 标识符:确保同一原始数据报的所有分片可以被识别并重新组合。
- 标志:包括一个是否还可以继续分片的标志位(DF,Don't Fragment)和一个更多分片(MF,More Fragments)的标志位,后者用来表明是否还有其他分片跟随当前分片。
- 片偏移:指示该分片在原始数据报中的相对位置,单位为8字节。
- 重组: 分片的重组通常在数据报的目的地,即接收方的IP层完成。接收方根据标识符将属于同一数据报的分片收集起来,并根据片偏移重新排序,最终合并成原始的数据报。如果任何一片丢失,整个数据报将无法重组,这可能导致高层协议(如TCP)超时重传或ICMP错误消息通知发送方。
- 透明性: 对于传输层协议(如TCP和UDP)来说,分片和重组过程是透明的,它们看到的是完整的数据报。
- 潜在问题: 分片和重组增加了网络复杂性和延迟,且可能导致一些安全问题,如IP分片攻击。现代网络设计倾向于避免分片,例如通过使用路径MTU发现和设置DF标志来请求中间路由器不要分片,而是让源节点处理分片或使用更小的MTU值来传输数据。
举个例子:
很明显,数据部分的长度超过了最大限制,如果准许分片的话,我们就要对它进行分片,除开头部的20字节,我们分隔,以1400为单位进行划分 ,然后加上原来的20字节的头部:
然后我们就要计算,这些分片的相对位置,用起始位置/8 :
这里注意区分一下和其他字段的区别: