对于IPv4协议,寻址和路由有什么区别呢?

2023-03-01 23:22:55 浏览数 (1)

IPv4协议是IP协议的第4个版本,IPv4为传输层提供Host-To-Host,同时IPv4需要底层的数据链路层的支持。

IP协议不负责数据的可靠性,传输数据时,数据被切分为一个个数据封包,IP协议上层的传输层协议会对数据进行一层拆分,然后再IP协议会在一次拆分,两次拆分是为了适合底层的设备。

数据在网络中传输,不需要建立连接,任由数据在网络中传输,每个节点由路由算法来控制数据选择下一个目的地。IP协议自身不能保证可靠性。

例如IP协议可能会遇到以下问题:

封包损坏(数据传输过程中被损坏)

丢包(数据发送过程中丢失)

重发(数据被重发,比如中间设备通过2个路径传递数据)

乱序(达到目的地时数据和发送数据不一致)

对于网络层主要解决这个层面的问题,主要包括:

延迟

吞吐量

丢包率

并且这三个问题,一般是不能同时满足的。

IP协议的工作原理,IP协议接收IP协议上方的Host-To-Host协议传来的数据,然后进行拆分,这个过程叫做分片。然后IP协议为每个片段增加一个IP头(Header),组成一个IP封包,之后,IP协议调用底层的局域网(数据链路层)传输数据。最后IP协议通过寻址和路由把封包送达到目的地。

分片,是把数据切分成片,IP协议通过它下层的链路层传输数据,因此需要适配底层的传输网络的传输能力。数据太大不适合底层的网络传输,就需要把数据进行切片。有的时候也有可能不分片,当数据链路层看到不分片的封包,又没有能力传输的时候,就会丢弃这个封包。

增加协议头

切片完成后,IP协议会对每个切片增加一个协议头,协议头的格式如下:

在这里插入图片描述在这里插入图片描述

其中重要的部分是,原地址和目标地址,IPv4的地址是4组8位的数字,总共32位。

Type Of Service 服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。

IHL(Internet Header Length)用来描述IP协议头的大小。所以IP协议头的大小是可变的。

Total Length定义报文的长度。

Identification(报文ID),发送方分配,代表顺序。

Fragment offset描述要不要分包(拆分),以及如何拆分。

Time To Live 描述封包存活的时间,因此每个IP封包发送出去后,就开始销毁倒计时。

Protocol描述上层的协议

Options代表可选项

Checksum用来检验封包的正确性。

对于Type Of Service 字段,这个字段是选择延迟、吞吐量、丢包率三者之间的选择。

延迟

延迟指的是1bit的数据从网络的一个终端传送到另一个终端需要的时间,这个时间包括在发送端准备发送的时间、排队发送的时间、发送数据的时间、数据传输的时间。

吞吐量

吞吐量是指单位时间内可以传输的平均数据量。比如用bit/s作为单位,就是bps。吞吐量和延迟没有联系。延迟高,但是吞吐量有可能高。

丢包率

丢包率指发送出去的封包没有达到目的地的比例。在最大流速确定的网络中,丢包率影响吞吐量。

寻址就是根据IP地质查找设备。因为IPv4的网络是一个树状模型,顶层有多个平行的网络,每个网络有自己的网络号。然后顶层网络下方又有多个子网,子网下方还有子网,最后是设备。IP协议寻址过程就是逐级找到网络,最后定位设备。详细寻址情况如下:

步骤1、找到顶层网络

比如103.16.3.1最顶层的网络可以和255.0.0.0(子网掩码)做位与运算

代码语言:java复制
103.16.3.1&255.0.0.0 =103.0.0.0

因此103.0.0.0就是103.16.3.1所在的顶层网络,255.0.0.0叫做子网掩码。子网掩码的作用就是帮助根据IP地址找到对应的子网,

步骤2:找二级的网络

找下一层的网络,就是需要要IP地址和下一级的子网掩码进行位与运算。

代码语言:java复制
103.16.3.1&255.255.0.0 =103.16.0.0

其中103.16.0.0就是下一级的网络号。

步骤3,:找三级的网络

找三级的网络,就是需要把IP地址和三级的子网掩码进行位与运算。

代码语言:java复制
103.16.3.1&255.255.255.0=103.16.3.0

步骤4:定位设备

设备在子网103.16.3.0中,最终找到的设备是1。

子网掩码也不一定是255,子网掩码也可以是255.244.0.0。IPv4的网络是分成这样的4层。

路由

在寻址过程中,数据总是存在于某一个局域网内,如果目的地在局域网中,就可以直接定位到设备,如果目的地不在局域网中,这个时候,就需要去其他网络寻找。

由于网络和网络之间是网关在连接,因此如果目的地的IP不在局域网中,就需要为IP封包选择下一个网络的途径。其实就是选择其中的一个网关。

假设,需要为IP地址14.215.177.38进行寻址,当前路由所在的网络号是16.0.0.0。那么我们就需要知道去往14.0.0.0网络的Gateway IP地址。在当前网络中用route查看路由表

Destination:14.0.0.0

Gateway:16.12.1.100

Mask:255.0.0.0

Iface:16.12.1.1

如果要去14.0.0.0网络,IP地址14.215.177.38先要和255.0.0.0进行位运算,然后再查路由表,可知目标是14.0.0.0,得知去往Gateway的网卡(IFace)是16.12.1.1。

当封包去向下一个节点后,会进入新的路由节点,然后会继续路由,直到定位到设备。

总结,首先IP协议会进行分片,将上游数据拆成一个个的封包(Datagram),然后为封包增加IP头。封包发送出去后,就开始寻址。寻址的过程就是找到IP地址对应的设备。在局域网内,如果找不到设备,就需要路由。路由就是找到数据应该往哪里发送,最后通过层层路由定位到具体的设备。寻址就是通过地址查找到设备,和我们生活中的寻址差不多,比如根据一个地址查找到一个大厦,在IPv4协议中,寻址找到的就是一个设备所在的位置。路由本质是路径的选择,就好像知道地址,但是到了一个十字路口,还需要选择具体的路径。寻址找到最终的设备,同时借助路由在每个节点选择数据传输的线路,因此寻址和路由是相辅相成的关系。

0 人点赞