网络层的协议与应用

一、IP数据包的格式

TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram).这是一个与硬件无关的虚拟包,由首部和数据两部分组成.首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的.在首部的固定部分的后面是一些可选字段,其长度是可变的.

网络层负责定义数据通过网络流动所经过的路径。

  • 网络层的功能 1定义了基于IP协议的逻辑地址 2选择数据通过网络的最佳路径 3连接不同的媒介类型 数据包.jpg

IP 报头的最小长度为 20 字节,上图中每个字段的含义如下:

  1. 版本(version)

占 4 位,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4。 2) 首部长度(网际报头长度IHL)

占 4 位,可表示的最大十进制数值是 15。这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。

数据部分永远在 4 字节的整数倍开始,这样在实现 IP 协议时较为方便。首部长度限制为 60 字节的缺点是,长度有时可能不够用,之所以限制长度为 60 字节,是希望用户尽量减少开销。最常用的首部长度就是 20 字节(即首部长度为 0101),这时不使用任何选项。 3) 区分服务(tos)

也被称为服务类型,占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998 年 IETF 把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。 4) 总长度(totlen)

首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。 5) 标识(identification)

用来标识数据报,占 16 位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。 6) 标志(flag)

占 3 位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。 7) 片偏移(offsetfrag)

占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。 8) 生存时间(TTL)

表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。

路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。 9) 协议

表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。

例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。 10) 首部检验和(checksum)

用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。 11) 源地址

表示数据报的源 IP 地址,占 32 位。 12) 目的地址

表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。 13) 可选字段

该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。 14) 填充

由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。 15) 数据部分

表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。

二、ICMP协议

1ICMP

ICMP协议是Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

2、ping

在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:

(1)用来检测网络的连通情况和分析网络速度;

(2)根据域名得到服务器IP;

(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

三、ARP协议

ARP协议

**ARP协议(Address Resolution Protocol)**中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。

ARP协议的解析过程

PC1首先查看自己的ARP缓存表。(ARP缓存表是主机储存在内存中的一个IP地址和MAC地址对应表)如果查找的MAC不在表中,PC1的ARP会发一个广播(源IP地址,源MAC地址,目的IP地址和广播地址)到交换机,交换机会记录并学习PC1的IP地址及对应的端口。路由器会广播泛洪除了PC1 所有连接在交换机的主机都会收到,只有对应的目的IP主机PC2会回应,PC2收到数据后记录学并习PC1的源IP地址和源MAC地址到对应的MAC缓存表中PC2将发包《(PC2源IP地址和源MAC地址)和(PC1目的IP地址和目的MAC地址)》给交换机,交换机首先学习PC2的IP及对应的端口PC1收到信息将PC2的IP地址和MAC地址记录在ARP缓存表中。这时PC1和PC2可以实现单播通信。

ARP的协议欺骗

通过伪造ARP应答来实现的。

Windows系统中的ARP命令

arp -a [inet_addr] [-N if_addr]:显示IP地址和物理地址映射表。其中inet_addr指明只显示这个IP地址的物理地址,if_addr指明只显示这个网络接口的物理地址(一个网卡可能有多个IP地址,一个物理网络上可以有多个逻辑网络,主机可能有多个网卡)。

arp -d inet_addr [if_addr] : 删除给定IP地址的ARP映射关系,inet_addr如果是“*”,将删除全部映射关系,if_addr指明哪个网络接口。

arp -s inet_addr eth_addr [if_addr] : 增加一条静态的IP地址和物理地址的映射关系,inet_addr给出IP地址,eth_addr给出对应的物理地址,if_addr给出网络接口。

例如:arp -a 显示全部IP地址和物理地址的映射关系;arp -s 157.55.85.212 00-aa-00-62-c6-09 增加一条静态的IP地址和物理地址的映射关系。

华为系统中的ARP命令

[Huawei]dis mac-address 查看mac地址信息 [Huawei]arp static 绑定ARP [Huawei]undo arp static 解除绑定 < Huawei > reset arp all 清楚mac地址表