IP数据报的格式说明IP协议都具有什么功能。在协议IP的标准中,描述首部格式的宽度是32位(即4字节)。IP数据报的完整格式如下图所示:
从上图可看出,一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的,共20字节,是所有IP数据报必须具有的。在首部固定部分的后面是一些可选字段,其长度是可变的。部各字段的意义。
IP数据报首部固定部分中各字段的意义如下所示:
版本:占4位,指IP协议的版本。通信双方使用IP协议的版本必须一致。
两种版本:IPv4和IPv6。
首部长度:占4位,可表示的最大十进制数值是15(1111)。
请注意,首部长度字段所表示数的单位是32位字长(1个32位字长是4字节)。
由于IP首部的固定部分是20字节,因此首部长度字段的最小值是5,(20/4=5)即二进制表示的首部长度是0101。而当首部长度字段为最大值1111时(即十进制的15),就表明首部长度达到最大值:15个32位字长,即15*4=60字节。IP头部最少20个字节,最多60个字节。
区分服务:占8位,用来获得更好的服务。只有在使用区分服务时,这个字段才起作用。
总长度:总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为2[^16]− 1 = 65535 字节。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。
例如,最常用的以太网就规定其MTU值是1500字节。
若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
虽然使用尽可能长的IP数据报会使传输效率得到提高,但数据报短些也有好处。IP数据报越短,路由器转发的速度就越快。为此,协议IP规定,在互联网中所有的主机和路由器必须能够接受长度不超过576字节的数据报。当主机需要发送长度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。否则,就要进行分片。
这是假定上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加上4字节的富余量,就得到576字节。
在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
标识(identification):占16位。
IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flag):占3位,但目前只有两位有意义。
标志字段中的最低位记为MF(More Fragment)。
MF=1即表示后面“还有分片”的数据报。
MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。
只有当DF=0时才允许分片。
**片偏移:**占13位。
片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除最后一个数据报片外,其他每个分片的长度一定是8字节(64位)的整数倍。
【例】一个数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分的长度分别为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。下图给出分片后得出的结果。
下表是本例中数据报首部与分片有关的字段中的数值,其中标识字段的值是任意给定的。具有相同标识的数据报片在目的站就可无误地重装成原来的数据报。
现在假定数据报片2经过某个网络时还需要再进行分片,即划分为数据报片2-1(携带数据800字节)和数据报片2-2(携带数据600字节)。那么这两个数据报片的总长度、标识、MF、DF和片偏移分别为:820,12345,1,0,1400/8=175;620,12345,1,0,(1400+800)/8=275。
生存时间:占8位,生存时间字段常用的英文缩写是TTL(Time To Live)
表明这是数据报在网络中的寿命。
由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子,因而白白消耗网络资源。
TTL的意义是指明数据报在互联网中至多可经过多少个路由器。
路由器在每次转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃这个数据报,不再转发。因此,TTL的单位是跳数。
数据报能在互联网中经过的路由器的最大数值是255。
若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。
协议:占8位
协议字段指出此数据报携带的数据使用何种协议,以便使目的主机的IP层知道应将数据部分交给哪个协议进行处理。
常用的一些协议和相应的协议字段值如下:
首部检验和:占16 位。
这个字段只检验数据报的首部,不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和,所以首部需要检验。不检验数据部分可减少计算的工作量。
IP数据报格式总结图如下所示:
IP数据报各字段意义总结:
数据报字段 | 位数/bit | 意义 |
---|---|---|
版本(Version) | 4 | IP 的版本号(IPv4 的版本为 4) |
首部长度(Header Length) | 4 | IP数据包头长度,最短为20字节,最长为60字节,但是其长度是可变的,具体长度取决于选项字段的长度 |
优先级与服务类型(Priority & Type of Service) | 8 | 数据包的优先级和服务类型,通过在数据包中划分一定的优先级,用于实现 服务质量的要求 |
总长度(Total Length) | 16 | 指示整个 IP数据包的长度,最长为2[^16]-1=65535字节,包括数据首部和数据 |
标识符(Identification) | 16 | IP数据包的标识符,当IP对上层数据进行分片时,它将给所有的分片分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误地重组。 |
标志(Flags) | 3 | 标志字段,对当前的包不能进行分片(当该包从一个以太网发送到另一个以太网时),或当一个包被分片后用以指示在一系列的分片中,最后一个分片是否已发出。 |
段偏移量(Fragment Offset) | 13 | 段偏移量中包含的信息是指在一个分片序列中如何将各分片重新连接起来。 |
TTL(Time to Live) | 8 | IP数据包的生命周期,一个数据包每经过一个路由器,TTL将减去 1。当 TTL 的值为 0 时,该数据包将被丢弃。可以防止一个数据包在网络中无限循环地转发下去. |
协议号(Protocol) | 8 | 指示在 IP数据包中封装的是哪一个协议,是 TCP还是 UDP,TCP 的协议号为 6,UDP的协议号为 17。 |
首部校验和(Header Checksum) | 16 | 接收方和网关用来校验数据有没有被改动过。 |
源 IP 地址(Source IP Address | 32 | 数据包的源地址 |
目标 IP地址(Destination IP Address) | 32 | 数据包的目的地址 |
可选项(Options) | 0-40字节 | 选项字段根据实际情况可变长,可以和IP一起使用的选项有多个。例如,可以输入创建该数据包的时间等。在可选项之后,就是上层数据。 |
(1)源IP地址为192.168.1.49并且是TCP数据报协议的数据包,抓包结果截图如下所示:
(2)目的IP地址为192.168.1.49并且是UDP数据报协议的数据包,抓包结果截图如下所示:
(3)源主机地址为101.91.22.103,并且目的IP地址为192.168.1.49,且是UDP数据报协议的数据包,抓包结果截图如下所示:
ICMP协议属于网络层协议
ICMP数据的封装过程
Windows系统中ping命令常用参数汇总,如下所示:
操作步骤 | 功能作用 |
---|---|
- t | 参数会一直不停的执行ping |
- a | 参数可以显示主机名称 |
- l | 参数可以设定ping包的大小 |
- n | 指定发送包的个数 |
- S | 指定源IP去ping |
Linux系统中ping命令常用参数汇总,如下所示:
操作步骤 | 功能作用 |
---|---|
- s | 参数可以设定ping包的大小 |
- c | 指定发送包的个数 |
- I | 指定源IP去ping |
跟踪路由路径命令汇总,如下所示:
系统类别 | 操作步骤 |
---|---|
WIN | tracert IP/域名 |
Linux | traceroute IP/域名 |
Windows系统中ARP命令汇总,如下所示:
操作步骤 | 功能作用 |
---|---|
ARP -a | 查看ARP缓存表 |
ARP -d [IP] | 清除ARP缓存 |
ARP -s [IP] [MAC] | ARP静态绑定 |
ping baidu.com返回信息,如下所示:
指定IP地址192.168.45.136 ping www.baidu.com返回结果信息,如下所示:
ARP(Address Resolution Protocol),地址解析协议,将一个已知的IP地址解析成MAC地址
局域网中主机的通信——IP地址与MAC地址(IP地址是逻辑寻址,MAC地址是物理寻址)。
(1)PC1发送数据给PC2,查看缓存没有PC2的MAC地址
(2)PC1发送ARP请求消息广播
(3)所有主机收到ARP请求消息,只有PC2会回复ARP应答(单播),其他主机将丢弃数据报文
(4)PC1将PC2的MAC地址保存到缓存中,发送数据
ARP地址解析协议工作原理总结,如下所示:
1) PC1发送数据给PC2前,会先查询自己ARP缓存表中,有没有对方主机的P地址与MAC地址的对应记录,如果有相应记录信息,就直接进行单播通信;
2)若PC1的ARP缓存表中没有相关记录,则会通过广播的方式发送ARP请求消息(目的MAC地址为广播地址FF-FF-FF-FF-FF-FF),交换机接收到消息后会进行广播泛洪;
(3)只有拥有对应的IP地址的主机会接收ARP请求消息,其它主机则会丢弃ARP消息,目的主机会先根据ARP消息将源主机的IP和MAC地址对应信息,保存到自己的ARP缓存表中;
4)目的主机通过单播的方式回复ARP应答消息,交换机会根据MAC地址表进行转发;
5)PC1将PC2的IP与MAC地址保存到ARP缓存表中,之后通过单播发送数据给PC2;
注意:动态学习到的ARP的老化时间是120s,并且静态绑定的ARP条目在计算机关机或重启后会消失。
通过长角牛网络监控机软件管理网络
ARP协议的两种包类型:
(1)ARP request 请求包
(2)ARP reply回应包
利用ARP协议的漏洞(无分辨接受任何主机的ARP回应包),伪造任何主机的MC地址实现。
ARP攻击实现方式:
**欺骗其他所有计算机:**制造假的ARP应答,并发送给局域网中除了被攻击主机以外的计算机,应答包中包含被攻击者的ip和虚假mac地址
假如PC1发送信息给PC2,ARP攻击详解如下所示:
欺骗被攻击计算机: 制造假的ARP应答,并发送给被攻击的计算机,应答包中包含其它计算机的IP和虚假的MAC地址
ARP欺骗的实现方式:
**ARP欺骗网关(冒充网关)*ARP应答包中包含网关的IP地址和攻击者的MAC地址
**ARP欺骗网关(冒充主机)*ARP应答包中包含目的主机的IP地址和虚假的MAC地址
ARP包内容展示如下所示:
ARP请求包:谁有IP地址192.168.1.49的MAC地址,请告诉 IP地址192.168.1.1。
ARP应答包:IP地址192.168.1.49的MAC地址是d4:93:90:0d:f5:89.
知识点总结如下所示: