数据链路层和网络层

本文深入解析了IP协议与数据链路层之间的交互作用,详细介绍了32位IPv4地址分类、TCP/IP支持的链路层协议、以太网标准、SLIP与CSLIP、PPP协议、环回接口及其工作原理、最大传输单元MTU的概念、IP路由选择过程、子网寻址与掩码应用等内容。

32位IPv4地址分为五类:

数据链路层主要有以下作用:

1,为IP模块发送和接收IP数据报。

2,为ARP模块发送ARP请求和接收ARP应答。

3,为RARP发送RARP请求和接收RARP应答。


TCP/IP支持多种不同的链路层协议,根据物理层的不同,包含以太网,令牌环网,FDDI(光纤分布式数据接口)及RS-232串行线路等。


以太网:

因为历史的原因,以太网有两个略有不同的以太网标准:RFC894(DEC,intel,Xerox发布,常用)和RFC1042(IEEE发布的 IEEE802)

所以跟以太网连接的主机需要支持以下标准:

1,必须能发送和接受RFC894格式的数据。

2,应该能接收与RFC894混合的RFC1042格式数据。

3,发送RFC1042格式的数据不是必须的,如果两个都可以支持,那么发送格式必须是可设置的,且默认必须是RFC894

两种帧封装格式如下:


RFC894和RFC1042都采用6字节(48bit)的目的地址和源地址(硬件地址),ARP和RARP负责对IP地址和硬件地址进行互相映射。


串行线路IP(SLIP):

SLIP是一种在串行线路上对IP数据报进行封装的简单格式(RFC1055)。


CSLIP(压缩的串行线路串行线路

因为串行线路的速率低,SLIP主要是采用压缩的方式提高传输效率。


点对点协议(PPP):

PPP是对SLIP的一个提高版本,主要包括以下3个部分:

1,既支持数据位8位和无奇偶校验的异步模式,还支持面向bit的同步链接。

2,链路控制协议,用于建立,配置及测试数据链路,它允许通信双方进行协商,以确定不同的选项。

3,正对不同网络层协议的网络控制协议体系。


换回接口:

环回接口允许运行在同一台主机上的客户程序和服务器通过TCP/IP进行通信。

根据惯例,大多数系统将127.0.0.1分配给这个接口,并命名为localhost。

一个传给环回接口的数据报不能在任何网络上出现。

其工作模式与正常的网络通信类似,也是通过传输层到达网络层,只是当IP数据报离开网络时又回到自己,然后回给传输层。

具体如下图:

1,传给环回地址的任何数据均作为IP输入。

2,传给广播地址或多播地址的数据报均需复制一份传给环回接口(广播和多播也包含主机自己),然后再送到以太网上。

3,任何传给该主机IP地址的数据均送到环回接口。


最大传输单元MTU:

RFC894和RFC1042对数据帧的长度都有一个限制,数据链路层的这个特性就是MTU。

不同类似的网络大多数有一个上限,如果IP报文大于链路层MTU,IP层需要进行分片(fragmentation),将数据分为若干小于MTU的片。

路径MTU指两个对端通信的路径的最大MTU,很明显这个MTU应该取决于路径中最小的MTU

同时,路径MTU不一定是个常数,这取决选路是经过的路由,有可能来回的路径不一致。


网际协议IP:

IP是TCP/IP协议族中最为核心的协议,所有的TCP,UDP,ICMP,IGMP都以IP数据报格式传输。

IP数据报格式如下图,固定IP首部长度为20个字节,可能含有数量不定的选项字段。


首部长度指首部占有的字节数,包含选项。

服务类型(TOS)包含一个3bit的优先权子字段(先已忽略),4bit的TOS子字段(最小时延、最大吞吐量、最高可靠性、最小费用分别占一位),1一个保留位(必须置0)。

总长度字段指真个IP数据报的长度,单位为字节。该字段为16bit,故IP数据报最大65535。

标识字段唯一的标识主机发送的每一份数据报,发一份加一。

TTL(time-to-live)指定了数据报的生存时间,也就设置了数据报最多可以经过的路由器数,因为每经过一个路由器,TTL减一

首部检验和字段是根据IP首部计算的检验和码,它不对首部后面的数据进行计算,这与ICMP/IGMP/UDP/TCP不一样(检验和同时覆盖首部和数据)。

检验和计算方法:将整个首部看做16bit的字,对每个16bit进行二进制反码求和。

选项字段一直都是以32bit作为界限,在必要的时候插入值为0的填充字节


IP路由选择:

在一般的体制中,IP可以从TCP/UDP/ICMP/IGMP接收数据报或者从一个网络接口接受数据报并发送。

IP层在内存中有一个路由表,路由表中的每一项都包含下面这些信息:

1,目的IP地址,它既可以是一个完整的主机地址,也可以是一个网络地址,由标志字段指定。

2,下一跳路由器的IP地址,或者直连的网络IP地址。

3,标志,分别标识目的IP地址是网络地址还是主机地址和下一站路由器是真正的下一站路由器还是直连接口。

4,为数据报的传输指定一个网络接口。


当需要发送一分数据报时,它都搜索路由表表一次,当数据报来至网络接口,首先确认目的IP是否本机或IP广播地址,

如是,依据首部协议字段指定的协议模块去处理。 

如不是以上目的地址,且IP作为路由器功能,对数据进行转发,如本机不作为路由器则丢弃数据报

IP路由选择主要遵循以下步骤(如都不成功,那么该数据报就不能被传送):

1,搜索路由表,寻找能与目的IP地址完全匹配的表项(网络号和主机号都要匹配)。找到则直接通过该表项指定的下一跳路由器或者直连网口发送报文。

2,搜索路由表,寻找能与目的网络号相匹配的表目,找到将报文通过表目指定的下一跳路由或直连网口发出。

3,搜索路由表,寻找标为“默认(default)”的表目,找到发送给该表项指定的下一跳路由器。


子网寻址和子网掩码:

RFC950规定所有主机都要支持子网编址,不是仅仅把IP地址看做单纯的一个网络号和一个主机号,进而将主机号分为一个主机号和一个子网号。

这是因为A类B类IP地址为主机号分配了太多空间,可分别容纳的主机数位2^24 - 2和2^16 - 2(去掉两个全0全1的主机号)。


子网掩码用于确定有多少bit用于子网号以及多少bit用于主机号

子网掩码是一个32bit的值,其中值为1的bit留给网络号和子网号,为0的bit留给主机号





<think>我们正在讨论数据链路层网络层之间的交互机制。根据OSI模型,数据链路层(第二层)位于物理层之上,网络层(第三层)之下。数据链路层负责在同一个局域网(LAN)中的节点之间传输数据帧,而网络层负责在同网络之间路由数据。 交互机制主要涉及以下几个方面: 1. 封装与解封装:当网络层的数据(例如IP数据)传递到数据链路层时,数据链路层会将其封装成帧(添加帧头帧尾)。接收方数据链路层收到帧后,解封装,将数据交给网络层。 2. 地址解析:网络层使用IP地址进行寻址,而数据链路层使用MAC地址。因此,需要ARP协议(地址解析协议)将IP地址映射到MAC地址。 3. 错误检测:数据链路层通过帧尾的校验码(如CRC)检测传输中的错误,但纠正(纠正由上层协议负责)。如果检测到错误,通常丢弃该帧,网络层可能因为超时重传。 4. MTU(最大传输单元)限制:数据链路层有MTU限制,如果网络层的数据超过MTU,则需要在网络层数据链路层进行分片。在IP协议中,分片在网络层处理。 具体过程: - 发送方: a. 网络层将IP数据传递给数据链路层。 b. 数据链路层检查目的IP地址对应的MAC地址(通过ARP缓存或ARP请求获取)。 c. 将IP数据封装成帧(添加帧头,括目的MAC地址源MAC地址,以及帧尾的校验码)。 d. 通过物理层发送帧。 - 接收方: a. 数据链路层收到帧,检查目的MAC地址是否匹配(广播帧则接受)。 b. 进行错误检测(校验码),如果错误则丢弃。 c. 解封装,取出IP数据,传递给网络层。 注意:在交换网络(如以太网)中,交换机(工作在数据链路层)根据MAC地址转发帧,而路由器(工作在网络层)根据IP地址转发数据。 参考引用: [^1]中提到了网络层数据链路层的基本功能,以及IP协议以太网帧格式。 [^2]中详细说明了MTU对IP协议的影响,即IP层需要对数据进行分片,并说明了分片的细节(标识、标志位等)。 [^3]介绍了MAC地址交换机的工作原理,交换机通过MAC地址转发帧,这是数据链路层的核心功能。 因此,数据链路层网络层之间的交互是紧密的,网络层依赖于数据链路层在局部网络上的传输,而数据链路层需要网络层提供目标IP地址以便解析出MAC地址(通过ARP)。 相关问题: 1. ARP协议的工作流程是怎样的? 2. 当数据在传输过程中需要经过多个网络时,数据链路层网络层如何协作? 3. 为什么需要MTU?MTU的大小对网络性能有什么影响? 4. 数据链路层的错误检测机制是如何工作的? 5. 路由器在处理数据时,数据链路层网络层分别做了什么?</think>### 数据链路层网络层交互机制详解 数据链路层(L2)网络层(L3)通过以下核心机制实现协同工作: --- #### 一、分层交互的核心流程 1. **封装与解封装** - **下行(网络层数据链路层)** 网络层将IP数据传递给数据链路层数据链路层添加**以太网帧头**(含源/目的MAC地址)**帧尾**(CRC校验码),形成完整帧结构[^1][^3]: ``` | 目的MAC (6B) | 源MAC (6B) | 类型 (0x0800) | IP数据 | CRC (4B) | ``` - **上行(数据链路层网络层)** 接收端数据链路层剥离帧头帧尾,通过类型字段`0x0800`识别IP数据,将其提交给网络层[^1][^3] 2. **地址解析(ARP协议)** - 当网络层需要发送IP数据时,若目标MAC未知,触发**ARP请求广播**(目标MAC=FF:FF:FF:FF:FF:FF)[^3] - 目标主机通过**ARP响应**单播返回自身MAC地址 - 网络层获得MAC后,数据链路层才能完成帧封装[^1][^3] ```mermaid sequenceDiagram participant 网络层 participant ARP缓存 participant 数据链路层 网络层->>+数据链路层: 发送IP数据(目标IP) 数据链路层->>ARP缓存: 查询目标IP的MAC alt MAC存在 数据链路层->>数据链路层: 封装以太网帧 else MAC存在 数据链路层->>网络: 广播ARP请求 目标主机-->>数据链路层: 单播ARP响应 数据链路层->>ARP缓存: 更新映射表 数据链路层->>数据链路层: 封装以太网帧 end 数据链路层->>-物理层: 发送帧 ``` --- #### 二、关键协同机制 1. **MTU与分片机制** - 数据链路层通过**MTU**(最大传输单元,通常1500字节)限制帧大小[^2] - 当IP数据超过MTU时,网络层执行分片: - 设置**16位标识符**保持分片关联性 - **标志位**标记分片状态(第3位=1表示非最后分片) - **片偏移**指示重组顺序[^2] - 接收端数据链路层提交分片给网络层,由网络层重组完整IP 2. **错误处理协同** - 数据链路层通过**CRC校验**检测物理错误,直接丢弃错误帧 - 网络层通过**ICMP协议**(如`traceroute`)反馈路径错误[^1] - 传输层(如TCP)处理数据丢失问题,IP层保证可靠性[^2] 3. **路由与转发** - 网络层决定下一跳IP地址 - 数据链路层通过**交换机MAC表**(存储MAC-端口映射)实现帧转发[^3]: ```python # 交换机自学习伪代码 def switch_learning(frame, in_port): mac_table[frame.src_mac] = in_port # 学习源MAC if frame.dst_mac in mac_table: forward(mac_table[frame.dst_mac]) # 单播转发 else: broadcast() # 未知目标则广播 ``` --- #### 三、协议栈交互实例 **Ping命令执行流程**: 1. 网络层生成**ICMP Echo请求**(类型8) 2. 数据链路层通过ARP获取目标MAC并封装帧 3. 目标主机数据链路层解帧后提交ICMP到网络层 4. 目标网络层生成**ICMP Echo响应**(类型0) 5. 响应帧按相同机制返回源主机[^1] > **关键点**:数据链路层处理**同一局域网**内的设备通信,网络层实现**跨网络**的数据路由,二者通过地址解析(ARP)、分片重组(IP分片)、错误控制(ICMP)实现无缝衔接[^1][^2][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值