网络层协议介绍
1. IP数据包格式
网络层的功能:
- 定义了基于IP协议的逻辑地址;
- 连接不同的媒介类型;
- 选择数据通过网络的最佳路径。
1.1 IP数据包头部的格式
IP数据包的格式如下图所示:
IP字段包括:
- 版本(Version):该字段包含的是IP的版本号,4bit。目前IP的版本为4(即IPv4);
- 首部长度(Header Length):该字段用于表示IP数据包头长度,4bit。IP数据包头最短为20字节,但是其长度是可变的,具体长度取决于可选字段的长度;
- 优先级和服务类型(Priority&Type of Service):该字段用于表示数据包的优先级和服务类型,8bit。通过在数据包中划分一定的优先级,用于实现QoS(服务质量)的要求。
- 总长度(Total Length):该字段用以指示整个IP数据包的长度,16bit。最长为65535字节,包括包头和数据;
- 标识符(Identification):该字段用于表示IP数据包的标识符,16bit。当IP对上层数据进行分片时,它将给所有的分片分配同一组编号。然后将这些编号放入标识符字段中,保证分片不会被错误的重组;
- 标志(Flags):标志字段,3bit。对当前的包不能进行分片(当该包从一个以太网发送到另一个以太网时),或当一个包被分片后用以指示在一系列的分片中,最后一个分片是否已发出;
- 段偏移量(Fragment Offset):该字段用于表示段偏移量,3bit。段偏移量中包含的信息是指在一个分片序列中如何将各分片重新连接起来;
- TTL(Time to Live):该字段用于表示IP数据包的生命周期,8bit。一个数据包每经过一个路由器,TTL将减去1.当TTL的值为0时,该数据包将被丢弃。可以防止一个数据包在网络中无限循环的转发下去;
- 协议号(Protocol):协议字段,8bit。该字段用以指示在IP数据包中封装的是哪一个协议,是TCP还是UDP,TCP的协议号为6,UDP的协议号为17;
- 首部校验和(Header Checksum):该字段用于表示校验和,16bit。接受方和网格用来校验数据有没有被改动过;
- 源IP地址(Source IP Address):该字段用于表示数据包的源地址,32bit;
- 目标IP地址(Destination IPAdress):该字段用于表示数据包的目的地址,32bit;
- 可选项(Options):可选项字段根据实际情况可变长,可以和IP一起使用的选项有多个。
2. ICMP协议(Internet控制报文协议)
ICMP是一种来检测或通知网络设备之间可能发生各种情况的机制,主要用于在IP网络中发送控制消息,提供在通信环境中可能发生的各种问题的反馈。通过这些反馈信息管理员就可以对所发生的问题作出判断,然后才去适当的措施去解决问题。
2.1 ICMP的主要功能介绍
2.1.1 ICMP功能
ICMP采取的“错误侦测与回馈机制”,通过IP数据包封装,用来发生错误和控制在消息。其目的是使管理员能够掌握网络的连通状况。例如下图中,当路由器收到一个不能被送达最终目的地的数据包时,路由器会向源主机发送一个主机不可达的ICMP消息。
2.1.2 ICMP的封装
ICMP属于网络层协议,因为传输ICMP信息时,要先封装网络层的IP报头,再交给数据链路层,即ICMP报文对应IP层的数据。如下图所示:
2.2 ICMP的的基本使用
在网络中,ICMP协议的使用是靠各种命令来实现的,下面我将以ping命令为例,介绍ping命令的使用以及返回信息。
在Windows上使用的方法:window徽标键+R 调出运行窗口后输入cmd即可。
ping命令的基本格式如下:
C:\>ping [-t][-l字节数][-a][-i]IP_Address|target_name
2.2.1 ping命令的常用参数
- -t :参数会一直不停的执行ping(使用Ctrl+C停止)
C:\>ping 127.0.0.1 -t

- -a :参数可以显示主机名称
C:\>ping 127.0.0.1 -a
- -l :参数可以设定ping包的大小(在Linux系统中为-s)
C:\>ping 127.0.0.1 -l 1000

- -n :指定发送包的个数(在Linux系统中为-c)
C:\>ping 127.0.0.1 -n 5

- -s :指定源IP去ping(在Linux系统中为-I)
C:\>ping www.baidu.com -S 192.168.1.173

- tracert IP/域名 :跟踪路由器路径命令(Linux系统为traceroute IP/域名)
C:\>tracert www.baidu.com

2.3 广播和广播域
- 广播:将广播地址作为目的地址的数据帧。
- 广播域:网络中能接收到同一个广播的所有节点的集合。
- 广播域地址:FF-FF-FF-FF-FF-FF
3. ARP协议
3.1 ARP概述
在局域网中,交换机通过MAC地址进行通信,要获得目的主机的MAC地址就需要使用ARP协议将目的IP地址解析成目的MAC地址。所以,ARP(Address Resolution Protocol,地址解析协议)的基本功能是负责将一个已知的IP地址解析成MAC地址,以便在交换机上通过MAC地址进行通信。
例如:主机A想要发送数据给主机B
过程如下:
- 主机A想要发数据给主机B,首先检查自己的ARP缓存表中是否有主机B的IP地址以及对应的MAC地址;如果ARP缓存表中存在则直接进行单播通信,此处主要举例没有目的IP和MAC地址的情况。
- 主机A的ARP缓存表中并没有主机B的IP地址以及对应的MAC地址,这个时候主机A会发送ARP请求,以MAC的广播地址(FF-FF-FF-FF-FF-FF)为目的地址的广播帧,请求中包含了主机A的IP地址和MAC地址。
- 交换机在收到请求后,发现MAC地址为广播地址,然后会将数据帧从除了主机A接口之外的所有接口中转发出去。
- 所有主机接受到数据帧后,会进行IP地址的对比,如果目标IP的地址与自己的IP地址不符,则会丢弃这个数据包,而只有主机B会回应交换机,在ARP缓存表中记录主机A的IP地址和MAC地址并发送ARP应答给主机A(这个数据帧是单播)。
- 主机A接受到这个回应的数据帧,会在自己的ARP缓存表中记录主机B的IP地址和MAC地址。在这个过程中,交换机已经学习了主机A和主机B的MAC地址和所在的接口,之后的传输数据,主机A和主机B之间将实现单播。
ARP相关的命令
- Windows系统中的ARP命令
- arp -a:查看ARP缓存表
C:\>arp -a

- arp -d[IP]:清除ARP缓存
C:\>arp -d 192.168.1.101

- arp -s IP MAC:ARP静态绑定
C:\>arp -s 192.168.1.101 28-f1-0e-1b-99-a2
如果提示显示添加ARP失败,解决方案:
a.用管理员模式:电脑左下角“开始”按钮右键,点击“Windows PowerShell(管理员)(A)”或者进入C盘 Windows\system32文件夹找到cmd.exe,右键“以管理员身份运行”,然后再执行arp命令。
b.方案2
(1)netsh interface ipv4 show neighbors 或者 netsh i i show in<查看网卡接口序号>
(2)netsh interface ipv4 set neighbors <接口序号>
4. ARP攻击与ARP欺骗的原理和应用
4.1 ARP攻击原理
- 欺骗其他所有计算机:
- 欺骗被攻击的计算机

如上图: - 攻击主机B向网关发送虚假的ARP应答,当网关收到虚假的ARP应答后会更新ARP条目,然后发送数据给主机A,就会发送到虚假的MAC地址,从而导致通信故障。
- 攻击主机B向局域网中的所有主机发送ARP应答,其中包括了网关的IP地址和和虚假的MAC地址,局域网中的主机收到ARP应答后更新ARP缓存表,然后就会向虚假的MAC地址发送数据,然后就无法与网关正常通信。
4.2 ARP欺骗的原理

如上图所示:
- 欺骗ARP(主机B)发送ARP应答到局域网的所有其他主机,其中包括了网的IP地址和欺骗主机的MAC地址,同时发给了网关ARP应答,其中包括了局域网中所有主机的IP地址和欺骗主机的MAC地址,当局域网中的其他主机和网关收到ARP应答后会更新ARP缓存表中的IP地址和MAC网关,然后局域网中的主机和网关之间的通信就只能通过欺骗主机进行转发了。