CSNotesCSNotes
TODO
LeetCode
数据结构
计算机组成原理
操作系统
计算机网络
数据库
Java
SSM
React
实用工具
GitHub
TODO
LeetCode
数据结构
计算机组成原理
操作系统
计算机网络
数据库
Java
SSM
React
实用工具
GitHub
  • 第一章 计算机网络体系结构

    • 1.1 计算机网络概述
    • 1.2 计算机网络体系结构与参考模型
  • 第二章 物理层

    • 2.1 通信基础
    • 2.2 传输介质
    • 2.3 物理层设备
  • 第三章 数据链路层

    • 3.1 数据链路层的功能
    • 3.2 组帧
    • 3.3 差错控制
    • 3.4 流量控制与可靠传输机制
    • 3.5 介质访问控制
    • 3.6 局域网
    • 3.7 广域网
    • 3.8 数据链路层设备
  • 第四章 网络层

    • 4.1 网络层的功能
    • 4.2 路由算法
    • 4.3 IPv4
    • 4.4 IPv6
    • 4.5 路由协议
    • 4.6 IP 组播
    • 4.7 移动 IP
    • 4.8 网络层设备
  • 第五章 传输层

    • 5.1 传输层提供的服务
    • 5.2 UDP 协议
    • 5.3 TCP 协议
    • 5.4 TCP 和 UDP 的区别
  • 第六章 应用层

    • 6.1 网络应用模型
    • 6.2 域名系统
    • 6.3 文件传输协议(FTP)
    • 6.4 电子邮件
    • 6.5 万维网 (WWW)
  • HTTP

    • HTTP/1.0
    • HTTP/1.1
    • HTTP/2
    • HTTP/3
    • HTTPS

4.3 IPv4

IPv4 地址由 32 位正整数表示。每一台主机上的每一块网卡都要设置 IP 地址。$2^{23}=4294967296$,所以最多可以允许 43 亿台计算机连接到网络。

4.3.1 IPv4 的格式

1.IPv4 分组的格式

(1)版本(Version)。占 4 位,0100代表 IPv4,0110代表 IPv6。

(2)首部长度(IHL)。占 4 位,可以表示的最大二进制数是 15。以 32 位为单位,最小值为0001,代表 20B,最大值为 1111,代表 60B。

(3)区分服务(Type of Service)。占 8 位,

 Bits 0-2:  Precedence.
      Bit    3:  0 = Normal Delay,      1 = Low Delay.
      Bits   4:  0 = Normal Throughput, 1 = High Throughput.
      Bits   5:  0 = Normal Relibility, 1 = High Relibility.
      Bit  6-7:  Reserved for Future Use.

         0     1     2     3     4     5     6     7
      +-----+-----+-----+-----+-----+-----+-----+-----+
      |                 |     |     |     |     |     |
      |   PRECEDENCE    |  D  |  T  |  R  |  0  |  0  |
      |                 |     |     |     |     |     |
      +-----+-----+-----+-----+-----+-----+-----+-----+

        Precedence

          111 - Network Control
          110 - Internetwork Control
          101 - CRITIC/ECP
          100 - Flash Override
          011 - Flash
          010 - Immediate
          001 - Priority
          000 - Routine

(3)总长度。占 16 位。指首部和数据之和的长度,单位为字节,最大为1111111111111111,因此数据报的最大长度为$2^{16}-1=65535$B。以太网帧的最大传送单元(MTU)为 1500B。因此当一个数据报封装成帧时,数据报的总长度(首部加数据)一定不能超过下面的数据链路层的 MTU 的值。

(4)标识。占 16 位。它是一个计数器,每产生一个数据报就加 1,并赋予标识字段。但它并不是“序号”(因为 IP 是无连接服务)。当一个数据报的长度超过网络的 MTU 时,必须分片,此时每个数据报片都复制一次标识号,以便正确重装成原来的数据报。

(5)标志。占 3 位。标志字段的最低位位 MF,MF=1 表示后面还有分片,MF=0 表示最后一个分片。标识字段中间的一位是 DF,DF=1 表示允许分片。

Bit 0: reserved, must be zero
Bit 1: (DF) 0 = May Fragment,  1 = Don't Fragment.
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.

          0   1   2
        +---+---+---+
        |   | D | M |
        | 0 | F | F |
        +---+---+---+

(6)片偏移。占 13 位。它指出较长的分组在分片后,某片在原分组的相对位置。

(7)生存时间(TTL)。占 8 位。数据报在网络中可通过的路由器数的最大值。标识分组在网络中的寿命,以确保分组不会永远在网络中循环,路由器在转发分组前,先把 TTL 减 1。若 TTL 被减为 0,则该分组必须丢弃。

(8)协议。占 8 位。该字段仅当一个 IP 数据报到达最终目的地才会使用。指出此分组携带的数据使用何种协议,即分组的数据部分应上交哪个协议进行处理,如 TCP、UDP 等。00000110表示 TCP。00010001表示 UDP。

(9)首部校验和。占 16 位。首部校验和只校验分组的首部,而不校验分组的数据部分。

(10)源地址字段。占 4B,标识发送方的 IP 地址。

(11)目的地址字段。占 4B,标识接收方的 IP 地址。

一总八片的首 4:片偏移为 8 的倍数,说明数据部分为 8 的倍数,首部长度为 4 的倍数。

RFC791

2.IP 数据报分片

一个数据链路层能承载的最大数据量称为最大传送单元(MTU)。

以太网的 MTU 是 1500.如果 IP 层有数据包要传,而且数据包的长度超过了 MTU,那么 IP 层就要对数据包进行分片,使每一片的长度都小于或等于 MTU。

假设要传输一个 UDP 数据包,以太网的 MTU 为 1500 字节,一般 IP 首部为 20 字节,UDP 首部为 8 字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于 1472 字节,就会出现分片现象。

当路由器准备将 IP 分组发送到网络上,而该网络又无法将整个分组一次发送时,路由器必须将该分组分片,使其长度能满足这一网络对分组长度的限制。IP 分片可以独立地通过各个路径发送,而且在传输过程中仍然存在分片的可能(不同网络的 MTU 可能不同),因此不能由中间路由器进行重组。分片后的 IP 分组直到到达目的主机后才能汇聚在一起。

4.3.2 IPv4 地址与 NAT

IP 地址是给连接在互联网上的每台主机或路由器分配的一个 32 比特的全球唯一标识符。

IP 地址当且仅当在私人网络中传递时才会改变。

网络号标识主机(路由器)连接到的网络。主机号标识该主机(路由器)。

1.IPv4 地址

A 类地址0???????????????????????????????1~126,因为 0 是“本网络”,127 是环回自检地址。

B 类地址10??????????????????????????????128~191

C 类地址110?????????????????????????????192~223

D 类地址1110????????????????????????????224~239

E 类地址1111????????????????????????????240~255

特殊的不用作主机的 IP 地址:

  • 主机号全为 0 表示本网络本身。

  • 主机号全为 1 表示本网络的广播地址。

  • 127.x.x.x保留为环回自检地址,此地址表示任意主机本身,目的地址为环回地址的 IP 数据报永远不会出现在任何网络上。

  • 32 位全为 0,即0.0.0.0表示本网络上的本主机。

  • 32 位全为 1,即255.255.255.255表示整个 TCP/IP 的广播地址,又称受限广播地址。实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址。

私有 IP 地址网段:

A 类:1 个 A 类网段,10.0.0.0~10.255.255.255

B 类:16 个 B 类网段,172.16.0.0~172.31.255.255

C 类:256 个 C 类网段,192.168.0.0~192.168.255.255

为什么分类会造成浪费?

架构 B 类网络时,理论上一个链路里允许 6 万 5 千多台计算机相连接

网络号表示主机连接的网络

如果一个主机有两个 IP 地址,说明这个主机属于两个逻辑网络。

主机号全 0 表示本网络本身。

0.0.0.0/32可以作为本主机在网络上的源地址。127.0.0.1是回送地址,以它为目的 IP 地址的数据将会立即返回到本机。

主机号全 1 表示本网络广播地址。

如果局域网 A 向局域网 B 广播一个分组,目的地址是 B 的网络号 + 主机全 1。向自己广播也可以全 1。

主机地址是否为全 0 或全 1,不是就为单播地址。

2.网络地址转换(NAT)

NAT 是为了面临地址枯竭的 IPv4 网络开发的技术。

私有 IP 地址只用于局域网,不用于广域网。

NAT 转换表:把局域网的(不同 IP 地址,不同端口号)转换为广域网的(相同 IP 地址,不同端口号)

外网内网
IP 地址端口号IP 地址端口号

4.3.3 子网划分与子网掩码、CIDR

1.子网划分

作用:减少广播域的大小。划分子网可以增加子网的数量,子网之间的数据传输需要通过路由器进行,因此自然就减少了广播域的大小。另外,划分子网,由于子网号占用了主机号位,所以会减少主机的数量。划分子网仅提高 IP 地址的利用率,并不增加网络的数量。

IP 地址=网络号 + 子网号 + 主机号

2.子网掩码

3.CIDR

CIDR 作用

把小的网络汇聚成大的超网。

CIDR 将网络前缀都相同的连续的 IP 地址组成 CIDR 地址块。

CIDR 用各种长度的网络前缀来代表分类地址中的网络号和子网号。

4.网络层转发分组的过程

分组转发都是基于目的主机所在的网络的。

4.3.4 ARP、DHCP 和 ICMP

1.IP 地址与硬件地址

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

2.地址解析协议(ARP)

3.动态主机配置协议(DHCP)

为什么要有 DHCP 协议?

DHCP 的客户端和服务器端需要通过广播方式来进行交互,原因是 DHCP 执行初期,客户端不知道服务器端的 IP 地址,而执行中间,客户端未被分配 IP 地址,从而导致两者之间的通信必须采用广播的方式。应为不知道对方 IP 地址,所以采用 UDP。

(1)DHCP 广播“DHCP 发现”消息。源地址为0.0.0.0,目的地址为255.255.255.255。

(2)DHCP 服务器收到“DHCP 发现”消息后,广播“DHCP 提供”消息。源地址为 DHCP 服务器地址,目的地址为255.255.255.255。

(3)DHCP 客户机收到“DHCP 提供”消息后,广播“DHCP 请求”消息,源地址为0.0.0.0,目的地址为255.255.255.255。

(4)DHCP 服务器广播“DHCP 确认”消息,源地址为 DHCP 服务器地址,目的地址为255.255.255.255。

4.网际控制报文协议(ICMP)

ICMP 功能

确定 IP 包是否成功送达目的地址,通知在发送过程当中 IP 包被废弃的具体原因。

如果分组长度超过 MTU,那么当 DF=1 时,丢弃该分组,并且要用 ICMP 差错报文向源主机报告

提高 IP 数据报交付成功的机会。

ICMP 作为数据字段封装在 IP 分组当中,因此 IP 协议直接为 ICMP 提供服务。

ICMP 报文的种类有两种,ICMP 差错报文和 ICMP 询问报文

ICMP 差错报文是向源主机报告差错的。

ICMP 差错报文分类

内容解释
终点不可达当路由器或主机不能交付数据报时,就像源点发送终点不可达报文
源点抑制当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
时间超过当路由器收到生存时间(TTL)为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
参数问题当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
改变路由(重定向)路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

ICMP 询问报文:

(1)回送请求和回答报文

(2)时间戳请求和回答报文

(3)地址掩码请求和回答报文

(4)路由器询问和回答报文

编辑此页
上次更新:
Prev
4.2 路由算法
Next
4.4 IPv6