文章目录
网络层的IP 协议目前主要有两个版本
IPv4
和IPv6
。
IPV4
IP 协议
- IP 协议(Internet Protocol)是一个处于垄断地位的网络层协议。 IPv4 就是 IP 协议的第 4 个版本, 是目前互联网的主要网络层协议。IPv4 为传输层提供 Host-To-Host 的能力,IPv4 需要底层数据链路层 的支持。
- IP 协议并不负责数据的可靠性。传输数据时,数据被切分成一个个数据封包。IP 协议上层的传输层协议 会对数据进行一次拆分,IP 协议还会进一步进行拆分。进行两次拆分是为了适配底层的设备。可靠性:保证数据无损地到达目的地。可靠性是 IP 协议上方的 Host-To-Host 协 议保证的
- IP 协议可能会遇到下面这几个问题:
- 封包损坏(数据传输过程中被损坏);
- 丢包(数据发送过程中丢失);
- 重发(数据被重发,比如中间设备通过 2 个路径传递数据);
- 乱序(到达目的地时数据和发送数据不一致)。
- 对于网络层来说,需要解决延迟 吞吐量 丢包率 方面的问题
IP 协议的工作原理
IP 协议接收 IP 协议上方的 Host-To-Host 协议传来的数据,然后进行拆分,在每个切片增加协议头,最后 IP 协议通过寻址 和路由能力最终把封包送达目的地。
- 分片(Fragmentation): 分片就是把数据切分成片。 IP 协议通过它下层的局域网(链路层)协议传输数据,因此需要适配底层传 输网络的传输能力。数据太大通常就不适合底层网络传输,这就需要把大的数据切片。 当然也可能选择不切片,IP 协议提供了一个能力就是把封包标记为不切片,当底层网络看到不切片的封包,又没有能力 传输的时候,就会丢弃这个封包。你要注意,在网络环境中往往存在多条路径,一条路径断了,说不定 其他路径可以连通。
- 增加协议头(IP Header):切片完成之后,IP 协议会为每个切片(数据封包 Datagram)增加一个协议头。
- 最重要的是原地址和目标地址。IPv4 的地址是 4 组 8 位的数字,总共是 32 位。
- Type Of Service 服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间 的关系。
- IHL(Internet Header Length)用来描述 IP 协议头的大小。所以 IP 协议头的大小是可变的。IHL 只有 4 位,最大值 1111 = 15。最大是 15 个双字(15*4 字节 = 60 字节)。
- Total Length 定义报文(封包 Datagram)的长度。
- Identification(报文的 ID),发送方分配,代表顺序。 Fragment offset 描述要不要分包(拆分),以及如何拆分。
- Time To Live 描述封包存活的时间。因此每个 IP 封包发送出去后,就开始销毁倒计时。如果倒计 时为 0,就会销毁。比如中间的路由器看到一个 TTL 为 0 的封包,就直接丢弃。
- Protocol 是描述上层的协议,比如 TCP = 6,UDP = 17。 Options 代表可选项。
- Checksum 用来检验封包的正确性,
延迟、吞吐量、丢包率
IPv4
协议中提供了一个叫作Type of Service
(服务类型)的字段。这个字段是为了在延 迟、吞吐量和丢包率三者间选择。- 延迟(latency):指的是 1 bit 的数据从网络的一个终端传送到另一个终端需要的时间。这个时间包括在发送端准备发 送的时间、排队发送的时间、发送数据的时间、数据传输的时间等。
- 吞吐量(Throughput):指单位时间内可以传输的平均数据量。比如用 bit/s 作为单位,就是 bps。吞吐量和延迟没有联系,比如延迟很高的网络,有可能吞吐量很高。可以类比成水管很大流速很慢,对比水管很细流速很快,这两种情况,最终流量可以是相等的。
- 丢包率(Packet loss ):指发送出去的封包没有到达目的地的比例。 在最大流速确定的网络中,丢表率会直接影响吞吐 量。
- 还有一个追求就是低成本
寻址(Addressing)
- IPv4 协议的寻 址过程是逐级寻址
- IPV4地址: 4 个 8 位(Octet)排列而成,总共可以编址 43 亿个地址,4 组数字用.分开,实际上在内存和传 输过程中,就是直接用 32 位。
- 寻址过程:
路由(Routing)
- 在寻址过程中,数据总是存于某个局域网中。如果目的地在局域网中,就可以直接定位到设备了。如果 目的地不在局域网中,这个时候,就需再去往其他网络。
- 由于网络和网络间是网关在连接,因此如果目的地 IP 不在局域网中,就需要为 IP 封包选择通往下一个 网络的路径,其实就是选择其中一个网关。如果一个网络和多个网络接壤,那自然需要多个网关了。如图,路由器在选择 IP 封包下一个应该是去往哪个 Gateway(网关)?
- 目前IP地址为14.215.177.3,如果你要去往 14.0.0.0 网络,IP 地址 14.215.177.38 先要和 255.0.0.0 进行位运算,然 后再查表,看到 14.0.0.0,得知去往 Gateway 的网卡(IFace)是 16.12.1.1。
IPv6
IPv4 和 IPv6 相似点
比如一个 TCP 段 (Segment),然后将 TCP 段再次切片做成一个个的 IPv6 封包(Datagram or Packet),再调用底层 局域网能力(数据链路层)传输数据。具体的过程如下图所示:
- IPv6 的工作原理和 IPv4 类似,分成切片(Segmentation)、增加封包头、路由(寻址)这样几个阶段 去工作。IPv6 同样接收上方主机到主机(Host-to-Host)协议传递来的数据.
- 作为网络层协议的 IPv6,最核心的能力是确保数据可以从发送主机到达接收主机
IPv6 地址
- IPv4 的地址是 4 个 8 位(octet),总共 32 位。 IPv6 的地址是 8 个 16 位(hextet),总共 128 位。IPv6 的地址用:分割,如0123:4567:89ab:cdef:0123:4567:89ab:cdef(
完全态
),总共 8 个 16 位的数字,通 常用 16 进制表示。
- 简写的方式。比如: 0123:4567:0000:0000:0123:4567:0000:cdef 可以省略前 64 字节的0000:0000简写为: 0123:4567::0123:4567:0000:cdef。::只能出现一次,相当于省略了若干组0000。
IPv6 的寻址
四种类型寻址类型:
全局单播寻址
- (和 IPv4 地址作用差不多,在互联网中通过地址查找一个设备,简单来说,单播就 是 1 对 1);
- IPv6 地址太多,因此不再需要子网掩码,而是直接将 IPv6 的地址分区即可。
在实现全局单播时,IPv6 地址通常分成 3 个部分: - 站点前缀(Site Prefix)48bit,一般是由 ISP(Internet Service Providor,运营商)或者RIR (Regional Internet Registry, 地区性互联网注册机构),RIR 将 IP 地址分配给运营商;
- 子网号(Subnet ID),16bit,用于站点内部区分子网;
- 接口号(Interface ID), 64bit,用于站点内部区分设备。
- 因此 IPv6 也是一个树状结构,站点前缀需要一定资质,子网号和接口号内部定义。IPv6 的寻址过程就 是先通过站点前缀找到站点,然后追踪子网,再找到接口(也就是设备的网卡)。
本地单播
- IPv4 里的一个内部网络,要求地址必须以fe80开头,类似我们 IPv4 中127开头 的地址);
- 本地单播地址必须以fe80开头,后面 64 位的 0,然后接上 54 位的设备编号。上 图中的 Interface 可以理解成网络接口,其实就是网卡。
分组多播(Group Multicast)
- 类似今天我们说的广播,将消息发送给多个接收者;
- IPv6 中设计了分组多播,来实现广播的能力。当 IP 地址以 8 个 1 开头,也就是ff00开头,后面会跟上 一个分组的编号时,就是在进行分组多播。
任意播(Anycast)
- 本质是将消息发送给多个接收方,并选择一条最优的路径。这样说有点抽象,接下来我具体解 释一下。
- 比如说在一个网络中有多个授时服务,这些授时服务都共享了一个任播地址。当一个客户端想要获取时间,就可以将请求发送到这个任播地址。客户端的请求扩散出去后,可能会找到授时服务中的一个或者多个,但是距离最近的往往会先被发现。这个时候,客户端就使用它第一次收到的授时信息修正自己的时间。
IPv6 和 IPv4 的兼容
情况 1:IPv4 网络和 IPv6 网络通信
- 1、客户端通过 DNS64 服务器查询 AAAA 记录。DNS64 是国际互联网工程任务组(IETF)提供的一种 解决 IPv4 和 IPv6 兼容问题的 DNS 服务。这个 DNS 查询服务会把 IPv4 地址和 IPv6 地址同时返回。
- DNS64 服务器返回含 IPv4 地址的 AAAA 记录。
- 客户端将对应的 IPv4 地址请求发送给一个 NAT64 路由器 4. 由这个 NAT64 路由器将 IPv6 地址转换为 IPv4 地址,从而访问 IPv4 网络,并收集结果。 5. 消息返回到客户端。
情况 2:两个 IPv6 网络被 IPv4 隔离
- 隧道的本质就是在两个 IPv6 的网络出口网关处,实现一段地址转换的程序。
局域网
- 广域网是由很多的局域网组成的,比如公司网络、家庭网络、校园网络等。
内部网络和外部网络
- 广域网是由很多的局域网组成的,比如公司网络、家庭网络、校园网络等。
- 交换机(链路层交换机):通常工作在链路层;而路由器通常也具有交换机的能力,工作在网络层和链路层。
- 光纤是一种透明的导光介质,多束光可以在一个介质中并行传播,不仅信号容量大,重量轻,并行度高 而且传播距离远,不能弯曲,因此办公室里用来连接交换机和个人电脑的线路肯定不能是光 纤,光线通常都用于主干网络
局域网数据交换(MAC 地址)
- 设备间通信的本质其实是设备拥有的网络接口(网卡)间的通信。为了区 别每个网络接口,互联网工程任务组(IETF)要求每个设备拥有一个唯一的编号,这个就是
MAC
地 址。 - 更改地址 IP会改变 , 但是MAC并不会改变。
- 在一个局域网中,我们不可以将消息从一个接口(网卡)发送到 另一个接口(网卡),而是要通过交换机(进行数据交互).
- 数据的发送方,将自己的 MAC 地址、目的地 MAC 地址,以及数据作为一个分组(Packet) 也称作
Frame
或者封包,发送给交换机。交换机再根据目的地 MAC 地址,将数据转发到目的地的网络接口(网卡)。 - 这个分组或者 Frame,是不是 IP 协议的分组呢?——不是,这里提到的是链路层的数据交换,它支持 IP 协议工作,是网络层的底层。所以,如果 IP 协议要传输数据,就要将数 据转换成为链路层的分组,然后才可以在链路层传输。
- Maximun Transmission Unit,最大传输单元,意思是链路层网络允许的 最大传输数据分组的大小。因此 IP 协议要根据 MTU 拆分封包。
MSS(Maximun Segment Size,最大段大小)
是TCP
段,或 者称为TCP
分组(TCP Packet
)的最大大小。MSS
是传输层概念,MTU
是链路层概念。- 因为 TCP 解决的是广域网 的问题,MTU 是一个链路层的概念,要知道不同网络 MTU 是不同的,所以二者不可能产生关联
地址解析协议 (ARP)
- 在一个网络接口向另一个网 络接口发送数据的时候,至少要提供这样 3 个字段:
1.源 MAC 地址 2. 目标 MAC 地址 3. 数据
- 网络接口 得到目标接口的MAC过程 :一个中间服务帮助根据 IP 地址找到 MAC 地址——这就是地址解析协议(Address Resolution Protocol,ARP)。
- 发送接口会发送一个 广播查询给到交换机,交换机将查询转发给所有接口。
- 如果某个接口发现自己就是对方要查询的接口,则会将自己的 MAC 地址回传。接下来,会在交换机和 发送接口的 ARP 表中,增加一个缓存条目。 不在需要广播查询了.这个过程和 DNS 非常相似,采用的是逐级缓存的设计减少 ARP 请求
- 发送接口先查询本地的
ARP
表,如果本地没有数据,然后广播ARP
查询。ARP 表是一种缓存,也要考虑缓存 的设计。 - 家用的路由器,也具备交换机的功能。但是当 ARP 表很大的时候,就需要专门的、能够承载 大量网络接口的交换设备。
连接内网
- 公司内部有多个子网。这个时候一个子网如果要访问另一个子网,就需要通过路由器。
连接外网(网络地址转换技术,NAT)
- IPv4 协议因为存在网络地址耗尽的问题,不能为一个公司提供足够的地址,因此内网 IP 可能会和外网重复。
- NAT 技术转换的是 IP 地址,私有 IP 通过 NAT 转换为公网 IP 发送到服务器。服务器的响应,通过 NAT 转换为私有 IP,返回给客户端。通过这种方式,就解决了内网和外网的通信问题
小结
- 链路层发送数据靠的是 MAC 地址,MAC 地址就好像人的身份证一样。局域网中,数据不可 能从一个终端直达另一个终端,而是必须经过交换机交换。交换机也叫作链路层交换机,它的工作就是 不断接收数据,然后转发数据。通常意义上,交换机不具有路由功能,路由器往往具有交换功能
- 已知 IP 地址,找到 MAC 地址的协议,叫作地址解析协议
- 网络和网络的衔接,必须有路由器(或者等价的设备)。一个网络的设备不能直接发送链路层分组给另 一个网络的设备,而是需要通过 IP 协议让路由器转发。
实战工具 : Wireshark 看文档
思考题
路由和寻址的区别是什么?
- 寻址(Addressing)就是通过地址找设备。在 IPv4 协议中,寻址找到的是一个设备所在的位置。
- 路由(Routing)本质是路径的选择。必须能够理解地址,也就是需要借助寻址的能力。要通过寻址找到最终的设备,又 要借助路由在每个节点选择数据传输的线路。因此,路由和寻址,是相辅相成的关系。
下面这几个地址 127.0.0.1, localhost, 0.0.0.0 有什么不同?
- 1
27.0.0.1
是本地回环地址(loopback
),发送到loopback
的数据会被转发到本地应用。 - l
ocalhost
指代的是本地计算机,用于访问绑定在loopback
上的服务。localhost
是一个主机名,不仅仅可以指向 IPv4 的本地回环地址,也可以指向 IPv6 的本地回环地址 [::1]。 0.0.0.0
是一个特殊目的IP
地址,称作不可路由IP
地址,它的用途会被特殊规定。通常情况下,当我 们把一个服务绑定到0.0.0.0
,相当于把服务绑定到任意的 IP 地址。比如一台服务器上有多个网卡, 不同网卡连接不同的网络,如果服务绑定到0.0.0.0
就可以保证服务在多个IP
地址上都可以用。
Tunnel 技术是什么?
【解析】Tunnel 就是隧道,在两个网络之间,用隧道连接,位于两个网络中的设备通信,都可以使用这个隧道。隧道 是两个网络间用程序定义的一种通道。具体来说,如果两个 IPv6 网络被 IPv4 分隔开,那么两个 IPv6 网 络的出口处(和 IPv4 网络的网关处)就可以用程序(或硬件)实现一个隧道,方便两个网络中设备的通信。
总结下 IPv6 和 IPv4 究竟有哪些区别?
- IPv6 和 IPv4 最核心的区别是地址空间大小不同。 IPv6 用 128 位地址,解决了 IP 地址耗尽问 题。因为地址空间大小不同,它们对地址的定义,对路由寻址策略都有显著的差异。
- 在路由寻址策略上,IPv6 消除了设备间地址冲突的问题,改变了划分子网的方式。在 IPv4 网络中,一 个局域网往往会共享一个公网 IP,因此需要 NAT 协议和外网连接。
- 划分子网,IPv4 地址少,需要子网掩码来处理划分子网。IPv6 有充足的地址,因此不需要局域 网共享外网 IP。也正因为 IPv6 地址多,可以直接将 IPv6 地址划分成站点、子网、设备,每个段都有充 足的 IP 地址。
- IP地址的分配方式:
IPv4
网络中设备分配 IP 地址的方式是中心化的,由 DHCP(动态主机协议)为局域网中的设备分配 IP 地址。而在IPv6
网络中,因为 IP 地址很少发生冲 突,可以由设备自己申请自己的 IP 地址。 - IPv6 中任何一个节点都可以是一个组播节点,节点可以通过向周围节点类似打探 消息的方式,发现更多的节点,叫作邻居发现(ND)。
网络地址转换协议是如何工作的?
解析】网络地址解析协议(
NAT
)解决的是内外网通信的问题。NAT
通常发生在内网和外网衔接的路 由器中,由路由器中的NAT
模块提供网络地址转换能力。从设计上看,NAT
最核心的能力,就是能够 将内网中某个IP
地址映射到外网IP
,然后再把数据发送给外网的服务器。当服务器返回数据的时候,NAT
又能够准确地判断外网服务器的数据返回给哪个内网 IP。
**实现: **
- NAT 需要作为一个中间层替换 IP 地址。 发送的时候,NAT 替换源 IP 地址(也就是将内网 IP 替换 为出口 IP);接收的时候,NAT 替换目标 IP 地址(也就是将出口 IP 替换回内网 IP 地址)。
- 发送的时候,NAT 要为每 个替换的内网 IP 地址分配不同的端口,确保出口 IP 地址+ 端口的唯一性,这样当服务器返回数据 的时候,就可以根据出口 IP 地址 + 端口找到内网 IP
IPv6 协议还需要 NAT 吗?
虽然IPv6解决了IP耗尽的问题,但是
IPv6
网络还没有完全普及。尽管很多公司已经支持自己的互联网产品可以使用 IPv6 访问,但是公司内部员工使用的内部网络还是 IPv4。如果要连接 IPv6 和 IPv4 网络,仍然需要 NAT 协议(NAT64),这个协议可以让多个 IPv6 的设备共享一个 IPv4 的公网地址。