计算机网络浓缩笔记(4)----IP

 文章笔记主要引用:

阿秀的学习笔记 (interviewguide.cn)

小林coding (xiaolincoding.com)

一、IP的基本认识

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

实现主机与主机之间的通信,也叫点对点(end to end)通信。

MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

在网络中数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。

二、 IP 地址的基础知识

IP数据报的报头有哪些字段?

图片

IP数据报的报头包含以下字段:

  1. 版本(Version):指定IP协议的版本,通常为IPv4或IPv6。

  2. 首部长度(Header Length):指定IP报头的长度,以32位字(4字节)为单位。

  3. 服务类型(Type of Service):用于指定数据报的服务质量要求,如优先级、延迟、吞吐量等。

  4. 总长度(Total Length):指定整个IP数据报的长度,包括报头和数据部分。

  5. 标识(Identification):用于唯一标识一个IP数据报,通常由发送方设置,接收方用于重组分片。

  6. 标志(Flags):包含3个标志位,分别是DF(Don't Fragment,不分片)、MF(More Fragments,更多分片)、和保留位。

  7. 分片偏移(Fragment Offset):用于指示当前分片相对于原始数据报的偏移量,以8字节为单位。

  8. 生存时间(Time to Live):指定数据报在网络中可以经过的最大路由器跳数,每经过一个路由器,该值减1,为0时数据报被丢弃。

  9. 协议(Protocol):指定IP数据报中承载的上层协议,如TCP、UDP、ICMP等。

  10. 头部校验和(Header Checksum):用于检验IP报头的完整性,接收方使用该字段来验证报头是否正确。

  11. 源IP地址(Source IP Address):指定发送方的IP地址。

  12. 目标IP地址(Destination IP Address):指定接收方的IP地址。

IP 报文的TTL是什么意思?

指定数据报在网络中可以经过的最大路由器跳数。每当数据报经过一个路由器时,该字段的值会减少1。当TTL的值为0时,路由器将丢弃该数据报并发送ICMP的时间超过消息给源主机。

TTL的主要目的是防止数据报在网络中无限循环,避免由于路由环路或其他问题导致的数据报无法正常到达目的地。通过限制数据报的最大跳数,TTL可以确保数据报在有限的时间内能够到达目标主机或被丢弃,以避免网络资源的浪费和延迟。

点分十进制?

IPv4 地址由 32 位正整数来表示,IPv6由 128 位正整数来表示, IP 地址在计算机是以二进制的方式处理的。

而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。

 最大允许 43 亿台计算机连接到网络。实际上,IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。

IP地址的分类

ABCDE类

 A、B、C 类主要分为两个部分,分别是网络号和主机号。最大主机个数:2^主机位数 - 2

-2原因:

  • 主机号全为 1 指定某个网络下的所有主机,用于广播
  • 主机号全为 0 指定某个网络

广播地址可以分为本地广播和直接广播两种。

  • 在本网络内广播的叫做本地广播。例如网络地址为 192.168.0.0/24 的情况下,广播地址是 192.168.0.255 。因为这个广播地址的 IP 包会被路由器屏蔽,所以不会到达 192.168.0.0/24 以外的其他链路上。
  • 在不同网络之间的广播叫做直接广播。例如网络地址为 192.168.0.0/24 的主机向 192.168.1.255/24 的目标地址发送 IP 包。收到这个包的路由器,将数据转发给 192.168.1.0/24,从而使得所有 192.168.1.1~192.168.1.254 的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发。) 。

D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。多播用于将包发送给特定组内的所有主机。广播无法穿透路由,若想给其他网段发送同样的包,就可以使用可以穿透路由的多播。

从 224.0.0.0 ~ 239.255.255.255 都是多播的可用范围,其划分为以下三类:

  • 224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能在局域网中,路由器是不会进行转发的。
  • 224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上。
  • 239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。

 IP 分类的优缺点

优点

简单明了、选路(基于网络地址)简单

缺点一

同一网络下没有地址层次,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性

缺点二

A、B、C类有个尴尬处境,就是不能很好的与现实网络匹配

  • C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
  • 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。

这两个缺点,都可以在 CIDR 无分类地址解决。

无分类地址 CIDR

有两种方式划分主机号和网络号,

a.b.c.d/x

前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。

10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。

还有一种理解就是,24为子网掩码,通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网

 

三、 IP 协议相关技术

网络层常见协议?可以说一下吗?

协议 名称 作用
IP 网际协议 IP协议不但定义了数据传输时的基本单元和格式,还定义了数据报的递交方法和路由选择
ICMP Internet控制报文协议 ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性,是ping和traceroute的工作协议
RIP 路由信息协议 使用“跳数”(即metric)来衡量到达目标地址的路由距离
IGMP Internet组管理协议 用于实现组播、广播等通信

ARP(IP与MAC对应)

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

ICMP

ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。

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

IGMP

IGMP 是因特网组管理协议,工作在主机(组播成员)和最后一跳路由之间

  • IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。
  • IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。

DNS查询方式有哪些?

递归解析

当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。

迭代解析

当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。比如说:baidu.com的服务器ip地址在192.168.4.5这里,你自己去查吧,本人比较忙,只能帮你到这里了。

什么是RARP?工作原理

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP (反向地址转换协议)协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

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

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

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

ICMP

Ping命令基于什么协议?原理是什么?

ping是基于网络层的ICMP查询报文类型协议实现的。通过向对方发送一个ICMP回送请求报文,如果对方主机可达的话会收到该报文,并响应一个ICMP回送回答报文

扩展:ICMP报文的介绍。ICMP报文分为两个种类:

  1. ICMP差错报告报文,常见的有
    1. 目标不可达消息 —— 类型 为 3
      1. 网络不可达代码为 0
      2. 主机不可达代码为 1
      3. 协议不可达代码为 2(禁止 TCP 协议访问)
      4. 端口不可达代码为 3(禁止 TCP 协议访问)
      5. 需要进行分片但设置了不分片位代码为 4(途中的路由器遇到超过 MTU 大小的数据包时,不会进行分片)
    2. 原点抑制消息 —— 类型 4
      1. 当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息

        收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大 IP 包的传输间隔,减少网络拥堵的情况。

    3. 重定向消息 —— 类型 5
      1. ​​​​​如果路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机。

        在这个消息中包含了最合适的路由信息和源数据

    4. 超时消息 —— 类型 11
      1. IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。
  2. ICMP查询报文
    1. 回送请求和回答:用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。向特定主机发出回送请求报文,收到回送请求报文的主机响应回送回答报文
    2. 时间戳请求和回答:询问对方当前的时间,返回的是一个32位的时间戳。

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

利用 ICMP 差错报文类型的应用叫做 traceroute(在UNIX、MacOS中是这个命令,而在Windows中对等的命令叫做 tracert )。

作用:

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

它的原理就是利用 IP 包的生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。

比如,将 TTL 设置 为 1,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是时间超时

接下来将 TTL 设置为 2,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。

这样的过程,traceroute 就可以拿到了所有的路由器 IP。

2、故意设置不分片,从而确定路径的 MTU

路径MTU发现

因为有的时候我们并不知道路由器的 MTU 大小,以太网的数据链路上的 MTU 通常是 1500 字节,但是非以太网的 MTU 值就不一样了,所以我们要知道 MTU 的大小,从而控制发送的包大小。

首先在发送端主机发送 IP 数据报时,将 IP 包首部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。

随后,通过一个 ICMP 的不可达消息将数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。

发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU 值,以便能到达目标主机。

断网了,还能 ping 通 127.0.0.1 吗?

  • 127.0.0.1 是回环地址localhost域名,但默认等于 127.0.0.1
  • ping 回环地址和 ping 本机地址,是一样的,发现目标IP是回环地址时,就会选择本地网卡,走的是 "假网卡",都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯, 将数据插入到一个链表后就软中断通知 ksoftirqd 来进行收数据的逻辑,压根就不出网络。所以断网了也能 ping 通回环地址。
  • 如果服务器 listen 的是 0.0.0.0,那么此时用127.0.0.1和本机地址都可以访问到服务。

在进行UDP编程的时候,一次发送多少bytes好

链路层的MTU:1500字节;IP数据报的首部为20字节;UDP数据报的首部8字节。普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好

进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值. 如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机 制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作.

鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时. 最好将UDP的数据长度控件在548字节(576-8-20)以内

猜你喜欢

转载自blog.csdn.net/shisniend/article/details/131839529