首页 > 其他分享 >04.网络层协议以及IP编址

04.网络层协议以及IP编址

时间:2024-07-03 18:59:38浏览次数:16  
标签:编址 字节 04 IP 报文 分片 地址 IP地址

网络层协议以及IP编址

一、网络协议

IPX很难见到了,当初星际争霸就需要 有一个IPX协议支持才可以。

IP协议

  1. 本身是一个协议文件的名称,主要阐述的IP报文的格式
  2. 一般指的的IP,一般指的是IP地址(IP报文中很重要的一个元素),或者是基于IP的网络,例如IToIP

  1. IP协议有版本之分,目前分为IPv4和IPv6,现在主用是IPv4,但是往IPv6发展(就像智能手机发展过程)

9

9

  1. IP协议是不可靠的,尽力而为的,不负责任的。
  2. IP地址用于标识某个设备,结合路由表可以完成相应的数据传递工作。

关于头部(首部)的概念

英文叫header,然后就机翻成头部,实际上就是增加在数据外面的包装盒,然后正常书写或者标识过程就是在数据的左边。

但是wireshark的呈现形式是叠罗汉式的,也算是头部。

IPv4报文格式

版本号(Version) 4bit

IPv4,因此就是4,二进制表示为0100

头部长度(Header Length) 4bit

首部长度表示整个IP头部包含多少个4字节,而不是首部长度为多少首部就多长。

例如下面的首部长度为5(二进制为0101),那么就表示IP首部包含5个四字节,因为IP首部长度为20字节。

由于首部长度总共只有4bit(最大为1111),因此IP首部最大就是15x4=60字节,换言之,IP选项字段最大40字节。

服务类型(TOS) 8bit

(现阶段仅作了解)

传统用法

一共8bit,前3bit叫做IP precedence,由于是3bit,因此取值范围是0~7。

紧接着4bit为TOS位。

这四个bit要么全部置零,表示一般服务,要么就只有一个bit是置一的。当第一bit置一,表示最小延迟,接着依次是最大吞吐量,最高可用性,最小费用。

最后一bit不用。

现代用法

前六位作为DSCP位,后面两位没用。

总长度(Total Length) 16bit

表示整个IP报文(头部+数据)的长度,由于是16bit,因此决定了IP报文最大不能超过65536字节。

针对这个不能超过65535字节的特性,有一种很老的攻击叫做ping of death。当98系统收到超过65535字节的报文的时候,就会挂掉。

可以使用分片技术,让超过65535的IP报文在途中进行分片,到了目的98系统之后,让系统进行重新组装。

标识字段identification(16bit)

发送出IP报文的设备都会对每一个报文进行标识,也就是表示字段,标识字段是各不相同的,发一个包标识字段增加1。

例如1.1.1.1 ping 1.1.1.2

9

标志位flags 3bit

第1bit:预留不用

Don’t fragment:置位(set,值为1)则标识任何情况下都不分片

MF(More Fragment):置位(set,值为1)表示后面还有分片,不置位(not set,值为0)表示后面没有分片,这个报文是最后一个分片了

片偏移fragment Offset 12bit

发送数据前,把出接口MTU(太网上能够传输的最大DATA字节数为1500)与即将发送数据包(除了以太网帧以外)的长度进行比较。

如果发送数据包大于出接口MTU那么就进行分片。

分片可以发生在原始发送端主机上,也可以在中间路由器上。

片偏移量:被分片的数据和原始数据相比,偏了多少。

如果一个IP报文出现了分片,无论分成多少片,标识位都是一样的。

eg.1  MTU的极限试探

MTU以太网最大的传输单元,数值为1500字节

EthernetII 18字节(6字节DMAC+6字节的SMAC+2字节的type+4字节的FCS校验)

以太网的报文大小最大1518字节

1500字节包含:IP头部(20字节)+ICMP头部(8字节)+数据(1472字节)!!!

构造PING报文

Step 1 配置IP地址

Step 2 保证路由全通

system-view

ospf  1

area 0

 network 0.0.0.0 255.255.255.255

Step  3 联通性测试

Step  4 端口MTU观察

在AR2的G0/0/0端口通过命令display interface g0/0/0

Step 5 不分片发送

AR1上使用命令

ping -s 3000 -f 1.1.1.1

其中-s 表示发送的ICMP数据的字节数

-s  Specify the number of data bytes to be sent, the default is 56bytes

-f表示誓死不分片

-f   Set Don't Fragment flag in packet (IPv4-only)

说明这个吃不消

Q:在不做任何干预的情况下,请问-s最大配置多少?

A:1472字节

由于MTU=1500字节,这就决定了IP头部(20字节)+ICMP头部(8字节)+ICMP承载的数据(1472字节)≤1500字节

9

eg.2  分片观察

AR1上允许分片,并且发送ICMP 3500字节,即

ping -s 3500 -c 1  1.1.1.1

-c 1 表示发送1个ICMP报文,默认5个

-c  Specify the number of echo requests to be sent, the default is 5

从抓包可以看出,ICMP request报文被分成了三个片

第1片

第二片

第三片

其他:

  1. 三个报文实际上是1个报文的分片,所以id号相同,均为352
  2. 由于只有第三片带有icmp头部信息,因此被识别为ping报文,上面两个只是分片

生存时间TTL (8bit)

主要是为了防止三层环路导致的数据包无线转发。TTL最大255跳,经过一个进行三层处理的设备(就是需要处理到网络层信息,即中转站)减少1。

设备收到减1,当该值为0的时候,还没到目的地就丢弃。

例子

AR1上

ping  -h 10 -c 1 1.1.1.1

在AR1上抓包,

在AR2上抓包

Q:设置成多少正正好无法ping通1.1.1.1

A:3跳

协议号 protocol(8bit)

首部校验和(16bit)

不对数据部分进行校验。

源目IP地址 (64bit)
扩展头部

。。。。

IPv4地址介绍

IP是发件地和收件地,中间的中转站需要通过二层地址来到达。

计算机只能识别01010101的二进制,而人类比较能够接受点分十进制

Q.为什么用点分十进制?

A.如果不用点分十进制,那么IP地址32bit,就会出现2^31这么大的数值,人记不住!

Q.记到什么程度就可以了?

点分后只要能知道2^7即可

2^7   2^6    2^5   2^4   2^3    2^2    2^1    2^0

128     64     32      16      8         4        2        1

然后相应的数字相加也要很敏感

128、192、224、240、258、252、253(几乎不用)、255

Q:如何将二进制转换为点分十进制

10101010  ===>2^7+2^5+2^3+2^1=128+32+8+2=170

Q:十进制如何转换成2进制数

177

128+32+16+1====>10110001

是一个智力游戏

掩码

1.用来来确定IP地址的哪部分是网络号,哪部分是主机位

     10.1.1.1/26

     10.1.1.00000001  

2.也是使用点分十进制来表示

3.掩码一定是连续的1+连续的0(或者全1、全0),且1要在前,不可能出现101010101,或者0000011111

99

包含在自身的主机地址范围内的,在以太网中直接通过ARP请求MAC地址,并封装目的地的MAC地址进行访问。

不包含在自身的主机地址范围内的,在以太网中直接通过ARP请求网关MAC地址,并封装网关的MAC地址进行访问。

Q:192.168.10.1和192.168.20.1是否在一个网段中?

A:不同网段--->192.168.10.1/24   192.168.20.1/24

     相同网段--->192.168.10.1/16   192.168.20.1/16

Q:192.168.10.1/24和192.168.10.129/25是否是同一个网段?

A:

Q:这些范围是怎么计算出来的?

A:

组播地址没有掩码的概念,一般都是作为目的IP使用

掩码的全1部分,对应的IP地址的网络部分,全0部分对应的是IP地址的就是主机部分

192.168.1.1/24

192          .168          .1             .1

11111111.11111111.11111111.00000000

网络地址(网络号)

掩码0对应的IP地址(主机部分)全为0,则是网络地址(网络号)

192        .168        .1             .0

11111111.11111111.11111111.00000000

前缀表示法写成

192.168.1.0/24

这个地址无法在主机上配置

广播地址

掩码0对应的IP地址(主机部分)全为1,则是该网络的广播地址

192        .168        .1             .255

11111111.11111111.11111111.00000000

写成

192.168.1.255/24

这个地址无法在主机配置

主机地址

可以配置在网卡上的

掩码0对应的IP地址(主机部分)既不是全1也不是全0,则是该网段的主机地址

192        .168        .1             .123

11111111.11111111.11111111.00000000

写成

192.168.1.123/24

注意

1.IP地址单独出现其实意义不大,一定要结合掩码一起出现,才会知道哪些是网络位哪些是主机位。

例如:

172.16.16.31/24是主机地址

172.16.16.31/27是广播地址,不能作为主机位

192.168.1.0/24是网络地址

192.168.1.0/16是主机地址

2.一个网段的主机位个数是2^(32-掩码长度)-2(网络地址和广播地址)

   比如192.168.1.0/24,则主机位位2^8-2=254个

私网IP地址

IPv4地址 2^32个地址(大概40亿个)(全球60亿),已经不够用了

IPv4地址已经全部分配完毕

解决方法:

1.IPv6

2.劝诫大家不要用网络

3.NAT

私有地址随便用,共有地址花钱买

Q:我们可以偷偷用共用地址吗?

A:强烈不推荐

Q:公网可以偷偷用私网IP地址吗?

A:可以

9

子网划分

9

不划分子网可能带来的不便

颗粒度太大,浪费

举例,互联地址只要两个IP地址,但是如果有用24位的,则会浪费252个IP地址,Q:能不能一个网段的配置在不同的接口呢?

A:不可以!因为路由器一个接口就必须是一个单独的网段,相同网段进行配置会报错

如何进行子网划分

99

子网划分后,所有的网络号、主机位、广播地址的算法是一样的。

9

ICMP协议

抓包举例

Type 8 code 0

Type 0 code 0

跳ping lag kale

华为tracert (其他厂商是traceroute)

首跳AR1路由器发送一个目的UDP端口号以33434开始的TTL(Time to Live)为1的UDP数据包,第二跳路由器收到后,将TTL减1(变成0)就不再往目的传递,但是还没到目的地,而是回复一个Code为11,Type为0的ICMP超时信息。

每发送一个UDP的报文,目的端口号+1,每个下一跳发送三个这样的UDP报文。

收到后首跳路由器会将这源地址打印到出来。

此时首跳路由器再发送一个目的UDP端口号为33437的TTL为2的UDP数据包,第三条路由器收到后,发现TTL为1,就不再往目的传递,而是回复一个Type为11, Code为0的ICMP超时信息。

收到后首跳路由器会将这源地址打印到出来。

以此类推。

到了最后一跳路由器后,最后一跳路由器发现是给自己的,就无所谓TTL为多少,但是发现这个UDP报文是发给自己的,但是一看需要访问的是一个334xx如此高的端口,但是并没有应用程序侦听这个端口,因此会回复一个Type为3, Code为3的ICMP端口不可达的信息给第一跳路由器,第一跳路由器收到之后,就知道已到达目的。就将最后一条路由器打印出来。

总结:

1.前面都是TTL超时,最后一个是端口不可达。

2.将返回的错误信息的源地址打印出来,表示到此一游。

IPv4地址配置

连续性 172.16.0.0/16-172.16.15.0/16

可扩展性:预留若干地址段

关联性:VLAN和IP地址一目了然

标签:编址,字节,04,IP,报文,分片,地址,IP地址
From: https://blog.csdn.net/J_JJD/article/details/140129686

相关文章

  • 洛谷2404 自然数的拆分问题 【搜索】
    自然数的拆分问题题目描述任何一个大于111的自然数nnn,总可以拆......
  • sklearn中的Pipeline:构建无缝机器学习工作流
    sklearn中的Pipeline:构建无缝机器学习工作流在机器学习项目中,数据处理、模型训练和预测往往是一系列复杂且相互依赖的步骤。scikit-learn(简称sklearn)提供了一个强大的工具——Pipeline,用于将这些步骤组织成一个线性的工作流程。本文将详细介绍sklearn中的Pipeline概念、优......
  • 掌握 IPython 中的 %%bash 魔法命令:深入探索与实践
    IPython是一个强大的交互式Python解释器,它提供了丰富的功能来增强开发体验。其中一个非常实用的功能是IPython的“魔法命令”(magiccommands),这些命令以%%开头,用于执行特定的操作或改变IPython的行为。%%bash就是其中之一,它允许用户在IPython环境中执行Bash命......
  • Plugin开发基本知识点 Plugin Pipeline Pre-Validation, Pre-Operation, Post-Operati
    在MicrosoftDynamics365插件开发中,插件可以注册在不同的事件管道阶段,这些阶段决定了插件的执行时机。常见的三个阶段是预验证(Pre-Validation)、预操作(Pre-Operation)和后操作(Post-Operation)。每个阶段都有其特定的用途和执行顺序。以下是对这三个阶段的详细解释及其用法:1.Pre-Va......
  • Plugin开发基本知识点 IPluginExecutionContext, iOrganization Service
    IPluginExecutionContext`IPluginExecutionContext`接口在MicrosoftDynamics365插件开发中用于获取有关当前插件执行上下文的信息。它提供了丰富的属性和方法,帮助开发者在插件执行时获取与当前操作相关的各种数据和元数据。以下是`IPluginExecutionContext`的一些主要功能和属......
  • 修改主机名和IP的映射关系
    1.vim/etc/hosts,输入:127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6192.168.137.131node1192.168.137.132node2192.168.137.133node3然后cat/etc/hos......
  • centos系统构建安装john导致的编译问题error: size of array element is not a multip
    blake2.h:112:5:error:sizeofarrayelementisnotamultipleofitsalignment112|blake2b_stateS[4][1];|^~~~~~~~~~~~~blake2.h:113:5:error:sizeofarrayelementisnotamultipleofitsalignment113|blake2b_stateR[1];......
  • HUAWEI S5720-36C-EI-28S-AC交换机设置IP并开启SSH
      HUAWEIS5720-36C-EI-28S-AC交换机设置IP并开启SSHConsole口连接Console口线连接电脑,用PuTTY或其它终端软件,设置终端参数。参数设置要求如下:波特率:9600数据位:8停止位:1奇偶校验:无流量控制:无查看信息displayinterfacebrief#显示所有接口的概要信息display......
  • 【IP子网划分】
    IP基本概述:开始讲IP的子网划分,首先还是给大家介绍一下什么是IPIP是局域网网络中的唯一身份标识,那么这个身份标识可以用来干什么,最基本的数据传输就是根据寻到对端设备的IP,所有网络中数据包的传输都是根据IP来寻找到对端的那么有人会说MAC地址呢,MAC地址不是全网唯一的吗?MAC......
  • 【JavaScript】聊聊js中关于this的指向
    前言最近在看回JavaScript的面试题,this指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对this问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。什么是JavaScript在了解this指向的问题前,首先得了解一下什么是JavaScript......