IP协议,卫冕之王

举报
莫逸风 发表于 2022/07/21 12:42:11 2022/07/21
【摘要】 IP协议,卫冕之王

2. 网络层协议

TCP:UDP我们合作一统天下。

IP:切,还需要合作,合作你们也得听我的。

UDP:…。

在网络层,IP 协议几乎一统天下。IP 协议目前主要有两个版本 IPv4 和 IPv6。

2.1 路由和寻址、IPv4

2.1.1 概念

  1. IP 协议(Internet Protocol):是一个处于垄断地位的网络层协议。IPv4 就是 IP 协议的第 4 个版本,是目前互联网的主要网络层协议。IPv4 为传输层提供 Host-To-Host 的能力,IPv4 需要底层数据链路层的支持。

  2. 延迟、吞吐量、丢包率:这三个是鱼和熊掌不能兼得

  3. IP 协议的工作原理:IP协议接收传输层的数据,进行分片,封包,然后通过寻址和路由能力最终把封包送达目的地。

    1. 分片(Fragmentation):分片就是把数据切分成片。 需要适配底层传输网络的传输能力。这就需要把大的数据切片。 当然也可能选择不切片,IP 协议提供了一个能力就是把封包标记为不切片,当底层网络看到不切片的封包,又没有能力传输的时候,就会丢弃这个封包。

    2. 封包(Datagram):IP 协议为每个片段(Fragment)增加一个 IP 头(Header),组成一个IP 封包(Datagram)

    3. 协议头(IP Header)

在这里插入图片描述

  1. Type Of Service 服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。
  2. IHL(Internet Header Length)用来描述 IP 协议头的大小。IHL 只有 4 位,最大值 1111 = 15。协议头最大是 15 个双字(15*4 字节 = 60 字节)。
  3. Total Length 定义报文(封包 Datagram)的长度。
  4. Identification(报文的 ID),发送方分配,代表顺序。
  5. Fragment offset 描述要不要分包(拆分),以及如何拆分。
  6. Time To Live 描述封包存活的时间。因此每个 IP 封包发送出去后,就开始销毁倒计时。如果倒计时为 0,就会销毁。比如中间的路由器看到一个 TTL 为 0 的封包,就直接丢弃。
  7. Protocol 是描述上层的协议,比如 TCP = 6,UDP = 17。
  8. Options 代表可选项。
  9. Checksum 用来检验封包的正确性。
  1. “鱼和熊掌”不能兼得——延迟、吞吐量、丢包率:Type of Service(服务类型)就是为了在延迟、吞吐量和丢包率三者间选择。

    1. 延迟(latency):延迟指的是 1 bit 的数据从网络的一个终端传送到另一个终端需要的时间。
    2. 吞吐量(Throughput):吞吐量指单位时间内可以传输的平均数据量。比如用 bit/s 作为单位,就是 bps。
    3. 丢包率(Packet loss):丢表率指发送出去的封包没有到达目的地的比例。
    4. Type of Service 字段里,有以下 4 种主要的类型可以选择:低延迟、高吞吐、低丢包率、低成本。

2.1.2 寻址(Addressing)

给一个地址,然后找到这个东西。IPv4 协议的寻址过程是逐级寻址。

子网掩码:子网掩码的作用就是帮助根据 IP 地址找到对应子网。子网掩码是很多个1接着很多个0,和 IP 地址一起使用。

寻址过程

  1. 步骤 1:找到顶层网络:比如103.16.3.1最顶层的网络号可以和255.0.0.0(子网掩码)做位与运算得到103.16.3.1 & 255.0.0.0 = 103.0.0.0
  2. 步骤 2:找到下一层网络:找到下一级网络,就需要用 IP 地址和下一级的子网掩码做位与运算。103.16.3.1 & 255.255.0.0 = 103.16.0.0
  3. 步骤 3:找到再下一级网络:接下来使用255.255.255.0子网掩码找到下一级网络是103.16.3.0。
  4. 步骤 4:定位设备:设备就在子网103.16.3.0中,最终找到的设备号是1。

当然子网掩码也不一定都是255,比如这个子网掩码255.240.0.0也是可以的。但通常我们把 IPv4 的网络分成这样 4 层。

2.1.3 路由(Routing)

假如,我们要为 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。

2.1.4 总结

这一讲我们学习了 IP 协议和 IP 协议的工作原理。首先 IP 协议会进行分片,将上游数据拆成一个个的封包(Datagram),然后为封包增加 IP 头部。封包发送出去后,就开始了寻址过程。寻址就是找到 IP 地址对应的设备。在局域网内,如果找不到设备,就需要路由。路由就是找到数据应该往哪里发送。最后通过层层路由定位到具体的设备。

2.1.5 路由和寻址的区别是什么?

寻址(Addressing)就是通过地址找设备。和现实生活中的寻址是一样的,比如根据地址找到一个公寓。在 IPv4 协议中,寻址找到的是一个设备所在的位置。

路由(Routing)本质是路径的选择。就好像知道地址,但是到了每个十字路口,还需要选择具体的路径。

所以,要做路由,就必须能够理解地址,也就是需要借助寻址的能力。要通过寻址找到最终的设备,又要借助路由在每个节点选择数据传输的线路。因此,路由和寻址,是相辅相成的关系。

2.2 Tunnel 技术和IPv6

IPv6 的工作原理和 IPv4 类似,分成切片(Segmentation)、增加封包头、路由(寻址)这样几个阶段去工作。

2.2.1 IPv6地址

IPv4 的地址是 4 个 8 位(octet),总共 32 位。 IPv6 的地址是 8 个 16 位(hextet),总共 128 位。

Pv4 的地址用.分割,如103.28.7.35。每一个是 8 位,用 0-255 的数字表示。

IPv6 的地址用:分割,如0123:4567:89ab:cdef:0123:4567:89ab:cdef,总共 8 个 16 位的数字,通常用 16 进制表示。

以下的IPv6地址可以简写0123:4567:0000:0000:0123:4567:0000:cdef0123:4567::0123:4567:0000:cdef::只能出现一次,相当于省略了若干组0000。不允许出现两个::的省略,会产生歧义。

还有一种情况我们想要后面部分都填0,比如说3c4d::/16,这个代表只有前16位有数据,后面是01234:5878:abcd/64代表只有左边64位有数据,后面是 0;再比如ff00/8,只有左边 8 位是有数据的。

2.2.2 IPv6寻址

IPv6 的寻址分成了几种类型:

  1. 全局单播寻址:(和 IPv4 地址作用差不多,在互联网中通过地址查找一个设备,简单来说,单播就是 1 对 1);
    1. 总的来说,IPv6 地址太多,因此不再需要子网掩码,而是直接将 IPv6 的地址分区即可
    2. 站点前缀(Site Prefix)48bit,一般是由 ISP(Internet Service Providor,运营商)或者RIR(Regional Internet Registry, 地区性互联网注册机构),RIR 将 IP 地址分配给运营商;
    3. 子网号(Subnet ID),16bit,用于站点内部区分子网;
    4. 接口号(Interface ID), 64bit,用于站点内部区分设备。
  2. 本地单播:(类似 IPv4 里的一个内部网络,要求地址必须以fe80开头,类似我们 IPv4 中127开头的地址);
    1. 虽然 IPv6 可以将所有的设备都连入一个网络。但在实际场景中,很多公司还是需要一个内部网络的。
    2. 在局域网络中,实现设备到设备的通信,就是本地单播。
    3. 本地单播地址必须以fe80开头,后面 64 位的 0,然后接上 54 位的设备编号。
  3. 分组多播:(Group Multicast),类似今天我们说的广播,将消息发送给多个接收者;
    1. IPv6 中设计了分组多播,来实现广播的能力。当 IP 地址以 8 个 1 开头,也就是ff00开头,后面会跟上一个分组的编号时,就是在进行分组多播。
    2. 这个时候,我们需要一个广播设备,在这个设备中已经定义了这些分组编号,并且拥有分组下所有设备的清单,这个广播设备会帮助我们将消息发送给对应分组下的所有设备。
  4. 任意播:(Anycast),这个方式比较特殊,接下来我们会详细讲解。
    1. 任意播,本质是将消息发送给多个接收方,并选择一条最优的路径。这样说有点抽象,接下来我具体解释一下。
    2. 比如说在一个网络中有多个授时服务,这些授时服务都共享了一个任播地址。当一个客户端想要获取时间,就可以将请求发送到这个任播地址。客户端的请求扩散出去后,可能会找到授时服务中的一个或者多个,但是距离最近的往往会先被发现。这个时候,客户端就使用它第一次收到的授时信息修正自己的时间。

2.2.3 IPv6和IPv4的兼容

情况 1:IPv4 网络和 IPv6 网络通信

例如一个 IPv6 的客户端,想要访问 IPv4 的服务器,步骤如下图所示:

在这里插入图片描述

  1. 客户端通过 DNS64 服务器查询 AAAA 记录。DNS64 是国际互联网工程任务组(IETF)提供的一种解决 IPv4 和 IPv6 兼容问题的 DNS 服务。这个 DNS 查询服务会把 IPv4 地址和 IPv6 地址同时返回。
  2. DNS64 服务器返回含 IPv4 地址的 AAAA 记录。
  3. 客户端将对应的 IPv4 地址请求发送给一个 NAT64 路由器
  4. 由这个 NAT64 路由器将 IPv6 地址转换为 IPv4 地址,从而访问 IPv4 网络,并收集结果。
  5. 消息返回到客户端。

情况 2:两个 IPv6 网络被 IPv4 隔离

这种情况在普及 IPv6 的过程中比较常见,IPv6 的网络一开始是一个个孤岛,IPv6 网络需要通信,就需要一些特别的手段。

不知道你有没有联想到坐火车穿越隧道的感觉,连接两个孤岛 IPv6 网络,其实就是在 IPv4 网络中建立一条隧道。如下图所示:

在这里插入图片描述

隧道的本质就是在两个 IPv6 的网络出口网关处,实现一段地址转换的程序

2.2.4Tunnel 技术是什么

Tunnel 就是隧道,这和现实中的隧道是很相似的。隧道不是只有一辆车通过,而是每天都有大量的车辆来来往往。两个网络,用隧道连接,位于两个网络中的设备通信,都可以使用这个隧道。隧道是两个网络间用程序定义的一种通道。具体来说,如果两个 IPv6 网络被 IPv4 分隔开,那么两个 IPv6 网络的出口处(和 IPv4 网络的网关处)就可以用程序(或硬件)实现一个隧道,方便两个网络中设备的通信。

2.3 局域网,NAT(网络地址转换)

2.3.1 内部网络和外部网络

我们通常把内部网络称为局域网,外部网络就叫作外网。

2.3.2 局域网数据交换(MAC 地址)

为了区别每个网络接口,互联网工程任务组(IETF)要求每个设备拥有一个唯一的编号,这个就是 MAC 地址

IP 地址更像现实生活中的地址,而 MAC 地址更像你的身份证号。

数据的发送方,将自己的 MAC 地址、目的地 MAC 地址,以及数据作为一个分组(Packet),也称作 Frame 或者封包,发送给交换机。交换机再根据目的地 MAC 地址,将数据转发到目的地的网络接口(网卡)

2.3.3 地址解析协议(ARP)

我们在使用传输层协议的时候,清楚地知道目的地的 IP 地址,但是我们不知道 MAC 地址。这个时候,就需要一个中间服务帮助根据 IP 地址找到 MAC 地址——这就是地址解析协议(Address Resolution Protocol,ARP)。

如果一个网络接口已经知道目标 IP 地址对应的 MAC 地址了,它会将数据直接发送给交换机,交换机将数据转发给目的地

如果网络接口不知道目的地地址呢?这个时候,地址解析协议就开始工作了。发送接口会发送一个广播查询给到交换机,交换机将查询转发给所有接口。如果某个接口发现自己就是对方要查询的接口,则会将自己的 MAC 地址回传。接下来,会在交换机和发送接口的 ARP 表中,增加一个缓存条目。

2.2.4 连接内网

有时候,公司内部有多个子网。这个时候一个子网如果要访问另一个子网,就需要通过路由器。

发送接口需要通过 IP 协议,将数据发送到路由器,再由路由器转发信息到子网 2 的交换机。这里提一个问题,子网 2 的交换机如何根据 IP 地址找到接收接口呢?答案是通过查询 ARP 表。

2.3.5 连接外网(网络地址转换技术,NAT)

跨网络必然会通过多次路由,最终将消息转发到目的地。但是这里存在一个问题,寻找的目标 IP 地址22.22.22.22是一个公网 IP,可以通过正常的寻址 + 路由算法定位。当22.22.22.22寻找192.168.0.1的时候,是寻找一个私网 IP,这个时候是找不到的。解决方案就是网络地址转换技术(Network Address Translation)。

NAT 技术转换的是 IP 地址,私有 IP 通过 NAT 转换为公网 IP 发送到服务器。服务器的响应,通过 NAT 转换为私有 IP,返回给客户端。通过这种方式,就解决了内网和外网的通信问题。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。