一、网络层
1. 网络层功能
网络层是OSI模型中的第三层,它负责在不同网络之间传输数据包。主要功能有以下三种:
- 根据IP协议定义了逻辑地址,也就是IP地址,用于表示网络上的设备。
- 网络层负责连接不同类型的网络媒介,比如以太网、光纤等;还连接交换机和路由器等设备,能够在不同的网络之间转发数据包。
- 网络层使用路由算法来确定数据包从源到目的地的最佳路径。
2. IP数据包
IP数据包是网络层传输数据的基本单元,可以分为两个部分:IP头部和来自上层(传输层)的数据段部分。下面是IP数据包的具体内容:
- 版本(Version):4位,指定IP协议的版本。IPv4是版本4,IPv6是版本6。
- 头部长度(Internet Header Length, IHL):4位,表示数据包IP头部的长度,单位为32bit(4个字节)。由于IP头部的最小长度(固定部分)是20字节,所以IHL的最小值是5;最大长度为15(二进制的1111),也就是60字节。
- 服务类型(Type of Service, ToS):8位,用于指定数据包的服务质量要求,如优先级、延迟、吞吐量和可靠性。
- 总长度(Total Length):16位,表示整个IP数据包的长度,包括IP头部和实际数据的长度,单位是字节。
- 标识(Identification):16位,用于标识主机发送的每一份数据报(也就是用来区分数据),以确保数据报在接收端能正确重组。
- 标志(Flags):3位,用于控制和标识数据包的分段。其中最重要的位是“MF”(More Fragments),如果设置为1,则表示后面还有更多的分段。
- 片偏移(Fragment Offset):13位,表示当前分段在原始数据报中的位置。
- 生命周期(Time to Live, TTL):8位,表示数据包在网络中可以通过的最大路由器数。每经过一个路由器,TTL减1,当TTL为0时,数据包将被丢弃。
- 可以根据TTL数值来判断系统,Windows系统TTL为128,Linux系统为TTL。
- 协议(Protocol):8位,指定携带的数据和哪个高层协议相关,比如TCP、UDP、ICMP(实际是三层协议,但会被封装到该部分)等。
- 首部校验和(Header Checksum):16位,用于检测IP头部信息在传输过程中是否出现错误,只能进行有限的数据检测。
- 源IP地址(Source Address):32位,发送数据包的设备的IP地址。
- 目的IP地址(Destination Address):32位,接收数据包的设备的IP地址。
- 选项(Options):长度可变,用于支持网络测试、调试和特殊处理,如安全和严格源路由。最大长度是40字节。
- 数据(Data):实际要传输的数据内容,也就是来自上层的数据段,其长度由总长度字段决定。
二、网络层常见协议
网络层常见协议包括IP协议、ICMP协议、ARP协议等。
1. ICMP协议
ICMP协议主要用于在网络设备和路由器之间传递控制消息,包括网络是否通畅、主机是否可达、路由是否可用等信息。虽然ICMP消息不传输用户数据,但它对用户数据的传输起着至关重要的作用用于传输出错报告和控制信息。该协议主要有两个功能:
- 确认IP数据包是否成功到达目标地址。
- 通知在发送过程中IP数据包被丢弃的原因。
常见的 ICMP报文格式 :
Type | Code | 说明 |
---|---|---|
0 | 0 | 回显应答 |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
8 | 0 | 回显请求 |
11 | 0 | 生命周期为0 |
在网络中,ICMP协议是通过各种程序命令来实现,遵循该协议的最为常见命令程序是ping,常用于探测到达目的节点的网络可达性。
ping命令的基本使用:
1. ping 主机(IP或域名)
2. ping -t 主机 # 不断探测网络是否可达
3. ping -a 主机 # 解析地址为主机名
4. ping -n 测试包数目 主机
5. ping -l 测试包大小 主机
除了上面的ping命令,还有一个实现ICMP协议的命令,tracert,主要依赖于ICMP协议来发现数据包从源到目的地的路径。当执行tracert命令时,它会发送一系列的ICMP回显请求(echo request)消息到目标主机。这些ICMP回显请求消息被沿途的每个路由器和网关处理,并且每个路由器都会返回一个ICMP回显应答(echo reply)消息,其中包含了路由器的IP地址和一些其他信息,如时间戳。
2. ARP协议
ARP协议(地址解析协议)是一种解决地址问题的协议,会根据目的IP地址来获取目的MAC地址。ARP会通过ARP请求与ARP响应两种类型的包(报文)确定 MAC地址的。
假设电脑甲和电脑乙是同一个链路上的两台电脑,这两台电脑不知道对方的MAC地址。
- 电脑甲想和电脑乙通信,首先会在本地的ARP缓存表中查看乙的MAC地址是否存在。
- 如果没有在缓存表中找到,那么会将ARP请求包广播到本地所有电脑,从而来寻找电脑乙的MAC。ARP请求包中主要包括:源MAC地址、源IP地址,目的MAC地址(请求时通常填充为0,因为在广播查找)和目的IP地址。
- 本地所有电脑都会收到这个请求包,会将请求包中的目的IP地址和自己的IP地址进行比较,如果地址不匹配就会丢弃这个请求包。
- 电脑乙确定请求包中的目的IP地址和自己IP地址匹配,就会将电脑甲的IP地址和MAC地址存入自己的ARP缓存表。再将自己的MAC地址存入ARP响应包,然后发回给电脑甲。
- 电脑甲收到ARP响应包后会将其中的电脑乙MAC地址和IP地址存入自己的ARP缓存表。
ARP除了可以将IP地址转换为MAC地址外,还能够检测IP地址是否存在冲突。
- ARP探测:主机在配置IP地址前,会发送ARP探测包来测试该IP地址是否已在使用中。这些ARP请求的发送方IP地址字段被设置为0,以避免对其他设备的ARP缓存造成污染。
- 免费ARP:这是一种特殊的ARP请求,当主机启动时,它会发送一个免费ARP请求,请求自己的IP地址的MAC地址。如果网络上有其他主机使用了相同的IP地址,发送免费ARP的主机就会收到ARP响应,从而检测到IP地址冲突。