一文带你看网络协议之因特网中的转发和编址,内容涉及IPV4/6,子网,NAT等诸多概念

网际协议: 因特网中的转发和编址

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

这是系列博客 计算机网络-自顶向下 中的其中一篇,更多博文请访问专栏 计算机网络 ,如有错误还请各位大佬指正。

0. 导入-因特网的三个重要组件

  1. IP协议

    • IP是主机在网络中的唯一标识符, 且在全网上唯一不可重复, 就像人的身份证一样(更恰当的说是身份证号)。
  2. 路由选择

    • 路由选择决定了数据报从源到目的地所流经的路径,好似我们规划周末与女朋友的散步路线。
  3. 报告数据宝中的差错和对某些网络层信息进行响应的设施

    • 互联网控制报文协议(ICMP)是TCP/IP协议簇的一个子协议,被用来实现在互联网上传递错误以及控制信息。

1. IPV4数据报格式

1) 数据报图例

在这里插入图片描述

2) 关键字段

  • 版本号

    • 长度为4bite
    • 规定了数据报的IP协议版本
  • 首部长度

    • 因为一个IPV4数据报可包含一些可变数量的选项,所以需要首部长度这个字段来确定数据报中数据部分从何开始
    • 大多数IP数据报不包含选项,所以一般IP数据报长度为20字节。
  • 服务类型

    • 用于区分不同类型的数据报
    • 例如实时数据报和非实时数据报
  • 数据报长度

    • IP数据报的总长度
  • 标识, 标志, 总偏移

    • 下面会详细讲解
  • 寿命

    • 数据报每被路由器处理一次则寿命字段减一,减至0时则必须丢弃
    • 这个字段用于确保数据报不会永远在网络中循环
  • 协议

    • 仅在数据报到达最终目的地时才会被使用
    • 指定了该数据报该被交给哪个特定的运输层协议
    • 例如,值为6表示要交给TCP,值为17表示要交给UDP
  • 首部检验和

    • 检验数据报传输过程中是否发生比特错误
  • 源和目的IP地址

  • 选项

    • 可以扩展IP首部
  • 数据

    • 这是数据报存在的根本意义

3) IP数据报分片

  1. 最大传送单元( Max:imum TrallSnnssion lJnil , MTU)

    • 因为并不是所有链路层协议都能承担相同长度的网络层分组,有的协议能承载大数据报,有的协议只能承载小分组
    • 最大传送单元( Max:imum TrallSnnssion lJnil , MTU)指的是一个链路层所能承载的最大数据报
    • 每一个链路的MTU都可能不同
  2. 当IP数据报的长度超过当前链路的最大传送单元MTU时, 就必须将数据报进行分片, 分成几个较小的IP数据报并在到达目的地后重新组装

    • IPV4的设计将重新组装的动作放在端系统中而非网络路由器
    • 较小的数据报就称为片(fragment)
  3. 目的主机与片

    • 当目的主机从网络中收到一系列数据报时就需要判断这些数据报是不是一些原来较大的数据报的的片。
    • 如果是片,那那一片是最后一片,并且如何进行拼装
    • 因此IPv4 的设计者将标识、标志和片偏移字段放在IP数据报首部中 用于解决这一问题。
  4. 标识

    • 当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时再贴上标识号 。
    • 发送主机通常将为它发送的每个数据报的标识号加 1 。
    • 当某路由器需要对一个数据报分片时,形成的每个数据报(即片)具有初始数据报的源地址、目的地址与标识号 。
    • 当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片 。
  5. 标志

    • 由于 lP 是一种不可靠的服务,一个或多个片可能永远到达不了目的地 。
    • 因为这种原因,为了让目的主机绝对地相信它已收到了初始数据报的最后一个片,最后一个片的标志比特被设为 0 ,而所有其他片的标志比特被设为 l 。
  6. 偏移字段

    • 另外,为让目的主机确定是再丢失了一个片(且能按正确的顺序重新组装片) ,使用偏移字段指定该片应放在初始 IP 数据报的哪个位置 。
  7. 当然分片也会产生开销并且可能被利用来攻击

2. lPv4 编址

1) IP与接口的关系

  • 我们将主机与物理链路之间的边界叫做接口(interface) 。
  • 因为路由器的任务是从链路上接收数据报并从某些其他链路转发出去,路由器必须拥有两条或更多条链路与它连接。所以路由器与它的任意一条链路之间的边界也叫做接口 。
  • 因此一台路由器有多个接口,每个接口有其链路。
  • 因为每台主机与路由器都能发送和接收IP数据报, IP 协议要求每台主机和路由器接口拥有自己的IP地址。
  • 因此, 一个IP地址技术上是与一个接口相关联的,而不是与包括该接口的主机或路由器相关联的。

2) IP地址

  • 每个IP 地址长度为 32 比特(等价为 4 字节) ,因此总共有 2^32个可能的 IP 地址

  • 由于210近似于103, 因此可以看出IP地址大约有40亿个.

  • IP地址采用分十进制记法书写, 即每个字节以其的十进制形式书写, 并以句号隔开,例如127.0.0.1(这其中127,0,0,1实际上在电脑中都是一个8位二进制数)。

  • 在因特网上的每个接口必须有唯一的IP地址与之对应(暂不考虑NAT,这多用于子网)。

  • 这些地址不能随意地自由选择。一个接口的IP地址的一部分需要由其连接的子网来决定 。

  • IP 广播地址 255. 255. 255. 255

    • 当一台主机发出一个目的地址为 255.255.255.255 的数据报时,这段报文会交付给同一个网络中的所有主机 。 路由器也会有选择地向邻近的子网转发该报文(虽然它们通常不这样做) 。

3) 子网

  • 多个主机接口和多个路由器接口的网络形成一个子网
  • 形式为 α. b. c. d/x 的地址的 x 最高比特构成了 IP 地址的网络部分,并且经常被称为该地址的前缀(prefix) (或网络前缀)。
  • 其中/x有时被称为子网掩码, 因为也因此在同一个子网中的前X位都是一致的。
  • 为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口揣接这些隔离的网络的端点。 这些隔离的网络中的每一个都叫做一个子网( suhnet) 。
  • 一个地址的剩余 32 - x 比特可认为是用于区分该组织内部设备的, 只有在组织内部的路由器转发分组时才会考虑这些分组
  • CIDR采用以前, IP的网络部分只能固定的8. 16. 24位, 但是后来由于中小规模的迅速增加, 取消了这一限制

4) 获取一个IP地址

  • 网络管理员可以向其ISP索取一个或一些地址, 单这不是唯一的方式

5) 如何获取主机地址

  • 动态主机配置协议((Dynamic Host Configuration , DHCP)允许主机自动获取(被分配)一个IP地址

  • 管理可以配置使一台机器每次获得的是同一个地址还是一个临时地址

  • 除了主机 IP 地址分配外, DHCP 还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地 DNS 服务器的地址 。

  • 即插即用协议-DHCP能够将一台主机连入网络

  • 从DHCP服务器获取IP地址的过程

    • 在最简单场合下,每个子网将具有一台 DHCP 服务器或一个DHCP中继器。

    • 对于一台新到达的主机而言, DHCP 协议是一个 4 个步骤的过程:

      • 第一步:DHCP服务器发现

        • 新来的主机需要首先发现一个在当前网络中的DCHP服务器
        • 所以新来的主机向网络的广播地址255.255.2555.255(广播地址) 发送一个DHCP发现报文,中间包含自己的源地址0.0.0.0。
        • 这一发现报文将被广播给所有与该子网连接的主机。
      • 第二步:DHCP服务器提供

        • DHCP服务器收到一个发现报文则回复一个DHCP提供报文
        • 提供报文中包含有收到的发现报文的事务、向客户推荐的 IP地址、网络掩码以及 IP 地址租用期 (address lease time) ,即 IP 地址有效的时间量 。服务器租用期通常设置为几小时或几天
        • 这一消息依旧是通过全局广播进行发送。
        • 注意:一个子网可能有多个DHCP服务器,所以该客户也许能进行选择。
      • 第三步:DHCP请求

        • 新客户从一个或多个提供报文中选择一个,并向选定的DHCP服务器提供一个DHCP请求报文进行响应,同时配置一些参数
      • 第四步"DHCP ACK

        • 服务器用 DHCP ACK 报文 (DHCP ACK message) 对 DHCP 请求报文进行响应,证实所要求的参数 。
        • 一旦客户收到这个ACK报文则交互就完成了,客户能够在租用期间内使用DHCP分配的IP地址
  • DHCP的不足

    • 当移动节点在子网之间移动时就不能保证其IP是一致的,就不能维持与远程应用之间的TCP连接

6) 网络地址转换

  • 网络地址转换 (Network Address Translation )简称NAT

  • NAT 使能路由器对于外部世界来说甚至不像一台路由器 。 NAT 路由器对外界的行为反过来就如同一个具有单一 IP 地址的单一设备。

  • 所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址 138. 76. 29. 7 ,且所有进入家庭的报文都拥有同一个目的回地址 138. 76. 29. 7 。(从本质上讲, NAT 使能路由器对外界隐藏了家庭网络的细节。)

  • 家庭网络中分配的都是专用地址, 即其地址只在当前子网内有意义, 在因特网上找不到这个地址

  • 路由器从ISP的DHCP获取IP, 而家庭网内的主机从子网内的DHCP获取IP

  • 在NAT路由器上维护一张NAT转换表, 表中有端口与子网内某台主机IP以及其端口的对应关系。

  • 但是这种使用端口对应主机及其端口的形式受人诟病

    • 有人认为端口号是用于进程编址的,而不是用于主机编址的 。 而这种违规用法对于运行在家庭网络中的服务器来说确实会引起问题。
    • 他们认为路由器通常仅应当处理高达第三层的分组。
    • 他们认为 NAT 协议违反了所谓端到端原则,即主机彼此应相互直接对话,结点不应介入修改 IP 地址与端口号。
    • 他们认为应使用IPv6 来解决 IP 地址短缺问题,而不是不计后果地用一种如 NAT 之类的权宜之计来修补存在的问题 。
  • NAT访问与P2P应用

    • 在一个P2P 应用程序中,任何参与对等方 A 应当能够对任何其他参与对等方 B 发起一条 TCP 连接 。 该问题的实质在于如果对等方 B 在一个 NAT 后面,它不能充当服务器并接收 TCP 连接。
    • 如果对等方 A 不在一个 NAT 的后面,则该 NAT 问题能够绕过去 。 在这种情况下,对等方 A 能够首先通过一个中间对等方 C 与对等方 B 联系
    • 如果双方都在NAT之后则能够使用一些NAT穿越(比如下面的UPnP)的技术克服。

7) UPnP

  • NAT 穿越正越来越多地由通用即插即用( UPnP) 提供
  • UPnP是一种允许主机发现并配置邻近 NAT 的协议 。 UPnP要求主机和 NAT 都是 UPnP兼容的。
  • 使用 UPnP , 在主机上运行的应用程序能够为某些请求的公共端口号请求一个 NAT 映射,该映射位于其(专用 IP地址,专用端口号)和(公共 IP 地址,公共端口号)之间 。
  • 映射的公共部分对于所有主机都是可见的, 外部的主机可对次发起连接, 内部主机可以通过此部分向外部通告它的存在
  • 总而言之, UPnP 允许外部主机使用 TCP 或 UDP 向 NAT 化的主机发起通信会话 。 长期以来 NAT 一直对P2P 应用程序十分不利; UPnP由于提供了有效和健壮的 NAT 穿越解决方案,可能成为了P2P 应用程序的救世主。

3. 因特网控制报文协议

  • ICMP被主机和路由器用来彼此沟通网络层的信息 。

  • ICMP最典型的用途是差错报告, 例如目的网络不可达之类的错误。

  • ICMP与IP

    • ICMP 通常被认为是 IP的一部分,但从体系结构上讲它是位于 IP 之上的,因为其承载在IP分组中就像TCP和UDP
    • 当一台主机收到一个指明上层协议为 ICMP 的 IP数据报时,它分解出该数据报的内容给 ICMP ,就像分解出一个数据报的内容给 TCP 或 UDP 一样 。
  • ICMP报文

    • ICMP 报文有一个类型字段和一个编码字段,并且包含引起该 ICMP 报文首次生成的E 数据报的首部和前 8 字节内容(以便发送方能确定引发该差错的数据报)。
  • ICMP报文类型(图例)

    • 里面源抑制很少用到因为TCP已经有了

4. 1Pv6

  • 我们知道IPV4定义的IP地址是4个8位的地址 总共只有四十多亿个,在如今的时代已日渐不够用。

1)IPV6数据报格式

  • 新的IPV6定义的IP是4个32位的地址
  • 图例

在这里插入图片描述

  • 格式的变化

    • 扩大的地址容量 。

      • IPv6 将 IP 地址长度从 32 比特增加到 128 比特 。
      • 并多了一个任播地址
    • 简化高效的 40 字节首部 。

    • 增加了流标签与优先级字段。

  • 字段

    • 版本

    • 流量类型

    • 流标签

    • 有效载荷长皮

    • 下 一 个首部

    • 跳限制

      • 转发数据报的每台路由器将对该字段的内容减 1 。 如果跳限制计数到达 0时,则该数据报将被丢弃 。
    • 源地址和目的地址

    • 数据

      • 有效载荷部分

2) 丢弃的IPV4字段

  • 分片/重新组装

    • IPV6而不允许在中间路由器上进行分片与重新组装 。 这种操作只能在源与目的地上执行
    • 如果过大直接丢弃并向发送方发送一个分组过大的ICMP差错报文即可
  • 首部检验和

    • 因为因特网层中的运输层(如 TCP 与 UDP) 和数据链路层(如以太网)协议执行了检验操作, IP 设计者大概觉得在网络层巾具有该项功能实属多余,可以将其去除 。
  • 选项

    • 选项字段不再是标准 IP 首部的一部分了 。 但它并没有消失,而是可能出现在 IPv6 首部中由"下一个首部"指出的位置上 。

3) 从IPV4到IPV6的迁移

  • 我们必须考虑一个非常实际的问题: 基于IPV4的公共因特网如何迁移到IPV6(我们可以在设计IPV6使能系统时设计成向后兼容IPV4, 但已有的IPV4却不能兼容IPV6, 处理其发送的数据报等)

  • 可能的方法

    • 标志日

      • 在某一天同时关机进行升级
      • 不可想象
    • 双线

      • 使用该方法的 IPv6 结点还具有完整的 IPv4 实现。这样的结点被称为 IPv6/IPv4 结点,它有发送和接收 IPv4 与 IPv6 两种数据报的能力。
    • 建隧道

      • 假定两个 IPv6 结点( 要使用 IPv6 数据报进行交互,但它们是经由中间IPV4路由器互联的 。
      • 将IPV6数据报整体包裹在一个IPV4数据报中然后进行发送
      • 达到目的地后确认该IPV4数据报中有IPV6数据报则将其取出读取

5. 涉足 IP 安全性

  • 一个提供各种安全性服务的网络层协议-IPsec, 在VPN中得到广泛部署。

  • IPsec被设计成IPV4和IPV6向后兼容

  • lPsec 的运输模式

    • 使用这种模式,两台主机首先在它们之间创建一个 IPsec 会话 。 (因此 IPsec 是面向连接的 ! )使用适当的会话,在这两台主机之间发送的所有 TCP 和 UDP 报文段都享受 IPsec 提供的安全性服务 。 在发送端,运输层向 IPsee 传递一个报文段 。 I Psec 然后加密该报文段,在报文段上添加 附加的安全性字段,并且在一个普通的 IP 数据报巾封装得到的有效载荷 。
  • lPsec提供的安全服务

    • 密码技术约定

    • lP 数据报有效载荷的加密

    • 数据完整性

      • IPsec 允许接收主机验证数据报的首部字段,保证被加密的有效载荷在其数据报从漉到目的地的路由器中传输时没有被修改过 。
    • 初始鉴别

      • 当 一 台主机从某受信任的源接收到一个 IPsec 数据报时,该主机确信在数据报中的源IP地址是该数据报的实际源 。

都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
更多计算机网络优质博客看这 : 计算机网络专栏博客索引


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106244061