• IP / 网络层 —— 摘自小林图解 / LeetBook


    IP / 网络层 —— 摘自小林图解 / LeetBook

    IP 在 TCP/IP 参考模型中处于第三层,也就是网络层

    网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

    运输层协议和网络层协议的区别?

    网络层协议负责提供主机间的逻辑通信;运输层协议负责提供进程间的逻辑通信。

    网络层点到点,传输层端到端。

    网络层与数据链路层有什么关系?

    IP(网络层) 和 MAC (数据链路层)之间的区别和关系:IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

    IP 的作用与 MAC 的作用

    源IP地址和目标IP地址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化。

    MAC 地址和 IP 地址分别有什么作用?

    MAC 地址是数据链路层和物理层使用的地址,是写在网卡上的物理地址。MAC 地址用来定义网络设备的位置。

    IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。IP 地址用来区别网络上的计算机。

    为什么有了 MAC 地址还需要 IP 地址?

    如果我们只使用 MAC 地址进行寻址的话,我们需要路由器记住每个 MAC 地址属于哪一个子网,不然每一次路由器收到数据包时都要满世界寻找目的 MAC 地址。而我们知道 MAC 地址的长度为 48 位,也就是说最多总共有 2 的 48 次方个 MAC 地址,这就意味着每个路由器需要 256 T 的内存,这显然是不现实的。

    IP 地址是和地域相关的,在一个子网中的设备,我们给其分配的 IP 地址前缀都是一样的,这样路由器就能根据 IP 地址的前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。

    为什么有了 IP 地址还需要 MAC 地址?

    只有当设备连入网络时,才能根据他进入了哪个子网来为其分配 IP 地址,在设备还没有 IP 地址的时候或者在分配 IP 地址的过程中,我们需要 MAC 地址来区分不同的设备。

    IP 协议的定义和作用

    IP 协议,是支持网间互联的数据包协议。该协议工作在网络层,主要目的就是为了提高网络的可扩展性。与传输层 TCP 相比,IP 协议提供一种无连接/不可靠、尽力而为的数据包传输服务,其与TCP协议(传输控制协议)一起构成了TCP/IP 协议的核心。

    简述作用:寻址和路由是通过将目的IP和路由表进行匹配,按照最长匹配原则选择传输路径,分段与重组指各个网络段传输的最大传输数据报长度不同,需要为ip数据包进行分段,在目的地进行重组。

    最长匹配原则:如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址。

    详细说明:

    • 寻址和路由:

      在IP 数据包中会携带源 IP 地址和目的 IP 地址来标识该数据包的源主机和目的主机。

      IP 数据报在传输过程中,每个中间节点(IP 网关、路由器)只根据网络地址进行转发,如果中间节点是路由器,则路由器会根据路由表选择合适的路径。

      IP 协议根据路由选择协议提供的路由信息对 IP 数据报进行转发,直至抵达目的主机。

    • 分段与重组:

      IP 数据包在传输过程中可能会经过不同的网络,在不同的网络中数据包的最大长度限制是不同的。

      IP 协议通过给每个 IP 数据包分配一个标识符以及分段与组装的相关信息,使得数据包在不同的网络中能够传输,被分段后的 IP 数据报可以独立地在网络中进行转发,在到达目的主机后由目的主机完成重组工作,恢复出原来的 IP 数据包。

    IPV4 地址不够如何解决?

    • DHCP:动态主机配置协议。动态分配 IP 地址,只给接入网络的设备分配IP地址,因此同一个 MAC 地址的设备,每次接入互联网时,得到的IP地址不一定是相同的,该协议使得空闲的 IP 地址可以得到充分利用
    • CIDR:无类别域间路由。CIDR 消除了传统的 A 类、B 类、C 类地址以及划分子网的概念,因而更加有效的分配 IPv4 的地址空间,但无法从根本上解决地址耗尽问题。
    • **NAT:网络地址转换协议。**我们知道属于不同局域网的主机可以使用相同的 IP 地址,从而一定程度上缓解了 IP 资源枯竭的问题。然而主机在局域网中使用的 IP 地址是不能在公网中使用的,当局域网主机想要与公网进行通信时, NAT 方法可以将该主机 IP 地址转换成全球 IP 地址。该协议能够有效解决 IP 地址不足的问题。
    • IPv6 :作为接替 IPv4 的下一代互联网协议,其可以实现 2 的 128 次方个地址,这个数量级甚至可以给地球上每一颗沙子都分配一个IP地址,该协议能够从根本上解决 IPv4 地址不够用的问题。

    路由器和交换机的区别?

    • 路由器:寻址,转发(依靠 IP 地址),交换机:过滤,转发(依靠 MAC 地址)
    • 交换机用于连接局域网,数据包在局域网内网的数据转发,路由器用于连接局域网和外网,数据包可以在不同局域网转发。
    • 交换机工作于TCP/IP协议的最后一层数据链路层(物理层),路由器工作于网络层
    • 交换机负责具体的数据包传输,路由器不负责包的实际传输,路由器只封装好要传输的数据包,然后交给交换机去传输(不一定是交换机,可能是其他传输技术)
    • 交换机没有MAC地址和IP地址,路由器有MAC地址和IP地址(指纯碎的交换机和路由器,不存粹的话:三层交换机是可以有IP地址的,市面很多路由器也有内置交换机功能的)

    路由器的分组转发流程?

    ① 从 IP 数据包中提取出目的主机的 IP 地址,找到其所在的网络;

    ② 判断目的 IP 地址所在网络是否与本路由器直接相连,如果是则不需要经过其它路由器直接交付,否则 ③;

    ③ 检查路由表中是否有目的 IP 地址的特定主机路由。如果有则按照路由表传送到下一跳路由器中,否则 ④;

    ④ 逐条检查路由表使用每一行的子网掩码与目的IP匹配。若找到匹配路由,则按照路由表转发到下一跳路由器中,否则 ⑤;

    ⑤ 若路由表中设置有默认路由,则按照默认路由转发到默认路由器中,否则 ⑥;

    ⑥ 无法找到合适路由,向源主机报错。

    IP 协议相关技术

    • DNS 域名解析

    • ARP 与 RARP 协议

    • DHCP 动态获取 IP 地址

    • NAT 网络地址转换

    • ICMP 互联网控制报文协议

    • IGMP 因特网组管理协议

    ARP协议

    流程
    • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
    • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

    操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。不过,MAC 地址的缓存是有一定期限的,超过这个期限,缓存的内容将被清除。

    应用

    使用ARP的4种情况如下:

    ① 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
    ② 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。

    ③ 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
    ④ 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

    RARP 协议

    ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址

    通常这需要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,接着:

    • 该设备会发送一条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。
    • RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。

    最后,设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。

    DHCP 动态获取 IP 地址

    DHCP 工作流程

    先说明一点,DHCP 客户端进程监听的是 68 端口号,DHCP 服务端进程监听的是 67 端口号。

    这 4 个步骤:

    • 客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
    • DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
    • 客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 **DHCP 请求报文(DHCP REQUEST)**进行响应,回显配置的参数。
    • 最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。

    一旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。

    如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报文:

    • 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
    • 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。

    可以发现,DHCP 交互中,全程都是使用 UDP 广播通信

    那如果 DHCP 服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,是不是每个网络都要配一个 DHCP 服务器?

    所以,为了解决这一问题,就出现了 DHCP 中继代理。有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。

     DHCP 中继代理
    • DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。
    • 服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包广播给 DHCP 客户端 。

    因此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

    NAT 网络地址转换

    一种把内部私有网络地址翻译成公有网络 IP 地址的技术。该技术不仅能解决 IP 地址不足的问题,而且还能隐藏和保护网络内部主机,从而避免来自外部网络的攻击。实现方式主要有三种:

    静态转换

    内部私有 IP 地址和公有 IP 地址是一对一的关系,并且不会发生改变。通过静态转换,可以实现外部网络对内部网络特定设备的访问,这种方式原理简单,但当某一共有 IP 地址被占用时,跟这个 IP 绑定的内部主机将无法访问 Internet。

    动态转换

    采用动态转换的方式时,私有 IP 地址每次转化成的公有 IP 地址是不唯一的。当私有 IP 地址被授权访问 Internet 时会被随机转换成一个合法的公有 IP 地址。当 ISP 通过的合法 IP 地址数量略少于网络内部计算机数量时,可以采用这种方式。

    网络地址与端口转换 NAPT

    **端口多路复用:将外出数据包的源端口进行端口转换,通过端口多路复用的方式,实现内部网络所有主机共享一个合法的外部 IP 地址进行 Internet 访问,从而最大限度地节约 IP 地址资源。**同时,该方案可以隐藏内部网络中的主机,从而有效避免来自 Internet 的攻击。

    私网地址和公网地址之间进行转换:同一个局域网内的两个私网地址,经过转换之后外面看到的一样吗?

    私网地址和公网地址之间进行转换:同一个局域网内的两个私网地址,经过转换之后外面看到的一样吗

    ICMP 互联网控制报文协议

    主要是实现 IP 协议中未实现的部分功能,是一种网络层协议。该协议并不传输数据,只传输控制信息来辅助网络层通信ICMP 主要的功能包括:验证网络是否畅通、确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知

    ICMP 包头的类型字段,大致可以分为两大类:

    • 一类是用于诊断的查询消息,也就是「查询报文类型
    • 另一类是通知出错原因的错误消息,也就是「差错报文类型
    常见的 ICMP 类型
    ping —— 查询报文类型的使用

    ping 是基于 ICMP 协议工作的。即因特网包探测器,是一种工作在网络层的服务命令,主要用于测试网络连接量。本地主机通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 响应报文,Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率从而推断网络是否通畅、运行是否正常等。

    ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY (类型为 0)

    两台电脑连起来后 ping 不通,你觉得可能存在哪些问题?

    1、看网络是否连接正常,检查网卡驱动是否正确安装。
    2、局域网设置问题,检查 IP 地址是否设置正确。
    3、是否被防火墙阻拦(有些设置中防火墙会对 ICMP 报文进行过滤),如果是的话,尝试关闭防火墙 。
    4、是否被第三方软件拦截。
    5、两台设备间的网络延迟是否过大(例如路由设置不合理),导致 ICMP 报文无法在规定的时间内收到。

    traceroute —— 差错报文类型的使用

    traceroute (在UNIX、MacOS中是这个命令,而在Windows中对等的命令叫做 tracert )。

    • 故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。

      工作原理:

      利用 IP 包的生存期限1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息

      发送方如何知道发出的 UDP 包是否到达了目的主机呢?

      traceroute 在发送 UDP 包时,会填入一个不可能的端口号值作为 UDP 目标端口号(大于 3000 )。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是「端口不可达」。

      所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。

    • 故意设置不分片,从而确定路径的 MTU。这样做的目的是为了路径MTU发现

      工作原理:

      首先在发送端主机发送 IP 数据报时,将 IP 包首部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。随后,通过一个 ICMP 的不可达消息将数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU 值,以便能到达目标主机。

  • 相关阅读:
    掌握Go语言:深入理解Go语言中的数组和切片,灵活处理数据的利器(16)
    设计模式-代理模式(Proxy)
    javascript的AMD模式
    【数据结构】图的实现
    杂篇(一)
    JDBC从入门到成神
    (二十九)加油站:面向对象重难点深入讲解【重点是元类】
    P4316 绿豆蛙的归宿 ( 拓扑 + 期望dp
    SQL注入漏洞及五大手法
    CIPU落地专有云:是“小众需求”还是“机会之门”?
  • 原文地址:https://blog.csdn.net/h0327x/article/details/125540267