后浪笔记一零二四

              Transmiting Device                           Receiving Device
              Server Software                              User Software
                  V                                              ^
              Header+Data                                  Header+Data
                  V                                              ^
              Header+Data                                  Header+Data
                  V                                              ^
              Header+Data                                  Header+Data
                  V                                              ^
              TCP+Data <-------Sequence/Datagram----------> TCP+Data
                  V                                              ^
              IP+TCP+Data  <----------Packet-------------> IP+TCP+Data  (10/8,172.16/12,192.168/16,三类内网ip)
                  V                                              ^
          Mac+[TCP+IP+Data]+FCS+   <---Frame---->  Mac+[TCP+IP+Data]+FCS+
                  V                                              ^
             010110101001000010 <--------bit-------------> 010110101001000010
                  V______________________________________________^
                                                          FCS:Frame Check Sequence

1 网络层和链路层的功能

应用层:HTTP1.1,、WebSocket和HTTP2都工作在应用层 表示层:TLS工作在表示层 和应用层和表示层打交道的主要是Web容器和各种中间件 传输层:TCP和UDP工作在表示层,我们在这里打交道的是操作系统的内核 网络层:我们主要关注如何把各个本地网络连接起来组成一张巨大的Internet网络

1.1 网络层功能

  • IP寻址:我们根据IP地址怎样确定我们的目标主机在哪一个网络中
  • 选路:到达目标主机的路径其实有很多,我们需要选择最快的那个
  • 封装打包:当传输层把它收到的报文封装好给到网络层以后,网络层需要给这个报文添加IP头部。
  • 分片:如果传输层给到网络层的报文过大,超过MTU,那么网络层需要把这个报文分片。

因为网络层只有一个IP协议,所以通常称网络层是细腰结构,IP层在网络中处理非常核心的地位。 所以,IP层首先关注的是性能,强调性能至上的IP层一定不会基于连接来传输报文,因为管理连接、 维护连接的成本太高了(无连接);IP层也不会保证一个报文一定会到达目的IP所在的服务器上,因为它不会 使用TCP层所使用到的ack确认包(不可靠)。

1.2 数据链路层功能

  • 逻辑链路控制:虽然我们看起来它是没有连接的,但是它实际上还是有一个虚拟的链路连接

  • 媒体访问控制:在数据链路层需要和网卡、电缆打交道,所以我们需要控制这些访问媒体

  • 封装链路层帧:数据链路层从网络层中接收到的是由一段字节流组成的Packet,但是它在物理链路中, 发送的是一个一个的比特位,所以它需要把这个Packet封装成链路层的帧,以使得我们在同一条链路中, 可以并发的传输许多数据帧

  • MAC寻址:我们主机的网卡中是有MAC地址的,数据链路层主要基于MAC地址来寻址

  • 差错检测与处理;为了防止物理链路中传输数据时出现错误,所以,在数据链路成中也会做差错的检测与处理

  • 定义物理层标准:由于数据链路层直接跟物理设备打交道,所以它需要定义物理层的标准。

1.3 多播:广播与组播

在网络层和数据链路层,都是支持多播的。

  • Node-Local Scope(1) 在这个多播域中,只有本机进程才能接收到

  • Link-Local Scope(2):本地链路层 最常用

  • Site-Local Scope(5):IPv6开始支持 与我们的网络结构是有关联的

  • Organization-Local Scope(8): 与我们的网络结构是有关联的

  • Global Scope(14):全球作用域

1.4 路由器与交换机

交换机:工作在数据链路层 可以将同一网络下的不同主机连接在一起

路由器:工作在网络层 当我们需要跨域一个网络,与其他的结点进行通信的时候,我们就工作在网络层了。 这个时候就需要路由器来帮助我们跨越不同的网络。

2 分类地址和无分类地址

互联网诞生之初,IP地址显得很充裕,因此人们设计出了分类地址,它能够从一个IP地址分离出网络地址部分与主机地址部分,这样路由器解析起来就很方便。

然而随着越来越多的人和企业加入到互联网中,分类地址方案,就显得问题重重,所以设计出了无分类地址。

可是大规模技术的变迁总是渐进的,我们分类地址的许多特性,至今仍然在使用中。

2.1 IPv4分类地址

IP地址类别 首字节 网络号Bit数 主机号Bit数 理论地址范围 预期用途
A类地址 0xxx xxxx 8 24 1.0.0.1 ~ 126.255.255.255 特大网络的单播传输
B类地址 10xx xxxx 16 16 128.0.0.0 ~ 191.255.255.255 数千台中大型网络的单播传输
C类地址 110x xxxx 24 8 192.0.0.0 ~ 223.255.255.255 250台主机以下小型网络的单播传输
D类地址 1110 xxxx n/a n/a 224.0.0.0 ~ 239.255.255.255 IP多播
E类地址 1111 xxxx n/a n/a 240.0.0.0 ~ 255.255.255.255 预留实验使用

从上表中可以看出,A类地址和B类地址之间,缺省了127.0.0.0 ~ 127.255.255.255这个范围的地址。

D类地址中,有4个地址是预留给组播的:

  • 224.0.0.1: 子网内的所有系统组
  • 224.0.0.2: 子网内的所有路由器组
  • 224.0.1.1: 用于NTP同步系统时钟
  • 224.0.0.9: 用于RIP-2协议 1001
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
if firstBit == 0 {
    // Class A address
    return
}
if secondBit == 0 {
    // class B address
    return
}
if thirdBit == 0 {
    // class C address
    return
}
if fourthBit == 0 {
    // class D address
    return
}
// class E address
return
  1. 分类IP寻址的问题:
  • 缺少私有网络下的地址灵活性:同一个网络下没有地址层次
  1. 全0或者全1的特殊含义:
网络号 主机号 A类示例 B类示例 C类示例 含义
网络号 主机号 77.91.215.5 154.3.99.6 227.82.157.160 指定某个主机
网络号 全0 77.0.0.0 154.3.0.0 227.82.157.0 指定某个网络
全0 主机号 0.91.215.5 0.0.99.6 0.0.0.160 指定当前所属网络下的某个主机
全0 全0 0.0.0.0 0.0.0.0 0.0.0.0 指定自己的默认IP地址
网络号 全1 77.255.255.255 154.3.255.255 227.82.157.255 指定某个网络下的所有主机,用于广播
全1 全1 255.255.255.255 255.255.255.255 255.255.255.255 所有主机
  1. 预留IP地址
起始地址 结束地址 等价分类地址 等价无类别地址 描述
0.0.0.0 0.255.255.255 A类网络0.x.x.x 0/8 保留
10.0.0.0 10.255.255.255 A类网络10.x.x.x 10/8 A类私有地址
127.0.0.0 127.255.255.255 A类网络127.x.x.x 127/8 换回地址
128.0.0.0 128.0.255.255 B类网络128.0.x.x 128.0/16 保留
169.254.0.0 169.254.255.255 B类网络169.254.x.x 169.254/16 B类私有地址(APIPA), link-local ip
172.16.0.0 172.31.255.255 从172.16.x.x至172.31.x.x共16个B类网络 172.16/12 B类私有地址
191.255.0.0 191.255.255.255 B类网络191.255.x.x 191.255/16 保留
192.0.0.0 192.0.0.255 C类网络192.0.0.x 192.0.0/24 保留
192.168.0.0 192.168.255.255 从192.168.0.x至192.168.255.x共256个C类网络 192.168/16 C类私有地址
233.255.255.0 223.255.255.255 C类网络223.255.255.x 223.255.255/24 保留
  1. link-local ip

link-local地址通常由操作系统程序自动分配。通常只在没有地址配置机制(如DHCP)或其他配置方法失败时才分配。

Link-local addresses may be assigned manually by an administrator or by automatic operating system procedures. In Internet Protocol (IP) networks, they are assigned most often using stateless address autoconfiguration, a process that often uses a stochastic process to select the value of link-local address, assigning a pseudo-random address that is different for each session. However, in IPv6 the link-local address may be derived from the interface media access control (MAC) address in a rule-based method.

In IPv4, link-local addresses are normally only used when no external, statuful machanism of adddress configuration exists, such as the Dynamic Host Configuration Protocol(DHCP), or when another primary configuration method has failed. In IPv6, link-local addressed are always assigned, along with addresses of other scopes, and are required for the internal functioning of various protocol components.

ipv4: 169.254.0.0/16 ipv6: fe80::/10 前10位为1111111010

2.2 CIDR无分类地址

CIDR(Classless Inter-Domain Routing)的表示方法:

  • A.B.C.D/N, N范围[0, 32]

3 IP地址与链路地址的转换:ARP与RAPR协议

3.1 链路层MAC地址(Media Access Control Address)

MAC地址:实现本地网络设备间的直接传输 IP地址:实现大型网络间的传输

3.2 2.5层协议ARP(Address Resolution Protocol)

MAC地址工作在二层,而IP层工作在三层,所以称为2.5协议

发出的ARP请求,是广播;发出的ARP响应,是单播。

由于广播是有性能损耗的,所以ARP响应会保存在本地缓存中。

  1. 检查本地缓存:
  • Windows: arp -a
  • Linux: arp -nv
  • Mac: arp -nla
  1. ARP报文的帧格式:FrameType=0x0806
  • 硬件类型,如1表示以太网
  • 协议类型,如0x0800表示IPv4
  • 硬件协议长度,如6
  • 协议地址长度,如4表示IPv4
  • 操作码,如1表示请求,2表示应答(ARP);如3表示请求,4表示应答(RARP)
  • 发送方硬件地址
  • 发送方协议地址
  • 目标硬件地址
  • 目标协议地址
+------------------+------------------+------------------+------------------+
|    Hardware Type |                  | Protocol Type                       |
+------------------+------------------+-------------------------------------+
| Hardware Address | Protocol Address |    Opcode                           |
|      Length      |      Length      |                                     |
+------------------+------------------+-------------------------------------+
|      Sender Hardware Address                                              |
|                                     +-------------------------------------+
|                                     |     Sender Protocol Address         |
|                                     |           (bytes 1-2)               |
+-------------------------------------+-------------------------------------+
|      Sender Protocol Address        |                                     |
|           (bytes 3-4)               |                                     |
+-------------------------------------+                                     |
|                                        Target Hardware Address            |
+---------------------------------------------------------------------------+
|                Target Protocol Address                                    |
+---------------------------------------------------------------------------+
  • 硬件类型取值: Hardware Type: This field specifies the type of hardware used for the local network transmitting the ARP message; thus, it also identifies the type of addressing used. Some of the most common values for this field:
HED value Hardware Type
1 Ethernet(10MB)
6 IEEE 802 Networks
7 ARCNET
15 Frame Relay
16 Asynchronous Transfer Mode(ATM)
17 HDLC
18 Fibre Channel
19 Asynchronous Transfer Mode(ATM)
20 Serial Line
  • 操作码取值 Opcode: The field specifies the nature of the ARP message being sent. The first two values(1 and 2) are used for regular ARP. Numbers other values are also defined to support other protocols that use the ARP frame format, such as RARP, some of which are more widely used than others:
Opcode ARP Message Type
1 ARP Request
2 ARP Reply
3 RARP Request
4 RARP Reply
5 DRARP Request
6 DRARP Reply
7 DRARP Error
8 InARP Request
9 InARP Reply
  1. RARP: 从MAC地址中寻找IP地址 为什么我们需要从MAC地址中寻找IP地址呢?我们可以设想这样的场景:

比如说我们有个打印机,它在启动的时候是没有IP地址的,我们有一个服务器会自动地给它配置IP地址。我们的打印机首先会发送一个RARP广播报文,问:我的MAC地址是这样的,我的IP地址是怎样的呢?这个时候,RARP Sever收到这个报文之后,会告诉它它的IP地址。

  1. RARP报文格式:FrameType=0x8035

4 NAT技术

4.1 NAT(IP Netword Address Translator)应用的前提

  • 内网中主要用于客户端访问互联网(否则就需要使用到内网穿透技术)
  • 同一时间仅少量主机访问互联网
  • 内网中存在一个路由器负责访问外网

4.2 单向(向外)转换NAT;动态映射

  Request:                           | TransiatedRequest
  {Source      | 10.0.0.207  } ->    | {Source      | 194.54.21.11} ->
  {Destination | 204.51.16.12}       | {Destination | 204.51.16.12}
                                     |
                                     |
          1.Client Sends Request     |       2.Nat Router Translates
                                     |       Source Address
Client   ------------------------>{ NAT  }-------->{InterNet}---->{Server      }
10.0.0.207 <----------------------{Router}<--------{        }<----{204.51.16.12}
          4.NAT Router Translates    |        3.Server Sends Response
          Destination Address        |
                                     |
    TransiatedResponse               |       Response:
 <- {Source      | 204.51.16.12}     |  <-   {Source      | 204.51.16.12}
    {Destination | 10.0.0.207  }     |       {Destination | 194.54.21.11}

这种方式虽然可以工作,但是有个问题:不支持多台设备同时上网(因为只有一个公网IP)。

我们家里的无线网络中,我们有手机也有电脑同时在上网,但是我们的运营商,比如电信,是不太可能给我们分配很多个IP的,为什么我们还同时可以上网呢?因为我们使用的是NAPT端口映射。

如果外网想主动访问内网,该怎么办?比如,我们想在自己家庭的网路中搭建一个网络硬盘,使得我们在外的时候可以随时的去读取硬盘上的数据,或者向硬盘中写入数据。但是市面上的产品很难做到这一点,这是因为外网想访问我们内部不具备公网IP地址的设备是很困难的,而双向(向内)NAT是可以做到这一点的。

双向(向内)NAT:IP地址静态映射的流程与单向NAT非常相似,把Client和Server反过来就可以了。

什么是IP地址的静态映射:把一段时间以内,把10.0.0.207和194.54.21.11(NAT Router的IP)对应起来,在这段时间内,你只要访问194.54.21.11,就一定会转换到内网的10.0.0.207上。但是这个技术的缺点也很明显,因为它无法使用端口进行映射。对于家庭网络,使用运营商的拨号网络进行上网,IP地址是经常变化的,所以很难使用上这样的一种技术。

4.3 NAPT端口映射:Network Address Port Translation

  Request:                           | TransiatedRequest
  {Source | 10.0.0.207  |7000} ->    | {Source | 194.54.21.11|7224} ->
  {Dest   | 204.51.16.12|80  }       | {Dest   | 204.51.16.12| 80 }
                                     |
                                     |
          1.Client Sends Request     |       2.Nat Router Translates
                                     |       Source Address & Port
Client   ------------------------>{ NAT  }-------->{InterNet}---->{Server      }
10.0.0.207 <----------------------{Router}<--------{        }<----{204.51.16.12}
          4.NAT Router Translates    |        3.Server Sends Response
          Destination Address & Port |
                                     |
    TransiatedResponse               |       Response:
 <- {Source| 204.51.16.12| 80  }     |  <-   {Source | 204.51.16.12| 80  }
    {Dest  | 10.0.0.207  | 7000}     |       {Dest   | 194.54.21.11| 7224}

5 IP选路协议

5.1 如何传输IP报文?

  • 直接传输
  • 本地网络间接传输
    • 内部选路协议
      • RIP
      • OSPF
  • 公网间接传输
    • 外部选路协议
      • BGP

5.2 RIP内部选路协议

  • Routing Information Protocol
  • 特点
    • 基于跳数确定路由
    • UDP协议向相邻路由器通知路由表
  • 问题
    • 跳数度量
    • 慢收敛:一条路由的变更,需要执行大量的广播,才能通知所有的路由器
    • 选路环路

5.3 OSPF内部选路协议

  • Open Shortest Path First 像思科这样的公司开发的许多协议,是非公开的内部协议,而OSPF是公开的,大家都可以使用的协议。

  • 多级拓扑结构:同级拓扑中的每台路由器都具有最终相同的数据信息(LSDB: Link State Database)

    • 直接使用IP协议(协议号0x06为TCP、0x11为UDP,而0x59为OSPF)传递路由信息
  • OSPF的最短路径树

    • 算法的前提条件:只有路由器到达网络有开销,网络到达路由器没有开销
    • RC的最短路径树

5.4 BGP: Border Gateway Protocol

  • 网络间的选路协议
  • 存放网络间信息RIB(Routing Information Base) * 使用TCP协议传输RIB信息
  • E(External)BGP * 外部对等方传输使用
  • I(Internal)BGP * 内部对等方传输使用

5.5 如何验证IP协议选路流程(主要使用ICMP协议使用的)

  • Windows: tracert
  • Linux/Mac: traceroute

6 IP协议

6.1 IP报文格式

  • IHL: 头部长度,单位字
  • TL: 总长度,单位字节
  • Id: 分片标识
  • Flags: 分片控制
    • xF:保留标志位
    • DF为1: 不能分片
    • MF为1: 中间分片
  • FO:分片内偏移,单位8字节
  • TTL:路由器跳数生存期
  • Protocol:承载协议 1.ICMP, 2IGMP, 6.TCP, 9.IGRP, 17.UDP, 47.GRE, 50.ESP, 51.AH, 57SKIP,88.EIGRP,89.OSPF,115.L2TP
  • HC:校验和
Byte   |0                      |1                      |2                      |3                      |
Offset +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|-----
      0| Version   |IHL(Header |  Type of Service(TOS) |                Total Length                   | ^  ^
       |           |  Length)  |                       |                                               | |  |
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| |  |
      4|                                               |IP Flags|       Fragment Offset                | |  |
       |                 Identification                |x  D  M |                                      | 20 |
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| |  |
      8|                       |                       |                                               | | IHL
       |  Time To Live(TTL)    |    Protocol           |               Header Checksum                 | |(Internet
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| | Header
     12|                                                                                               | | Length)
       |                                       Source Address                                          | |  |
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| |  |
     16|                                                                                               | |  |
       |                                      Destination Address                                      | V  |
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--  |
     20|                                                                                               |    |
       |                        IP Option (variable length, optional, not common)                      |    V
       +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|-----
       |0  1  2  3  4  5  6  7  8  9  10 1  2  3  4  5  6  7  8  9  20 1  2  3  4  5  6  7  8  9  30 1
       
-------Version--------    ---------Protocol--------     -------FragmentOffset-------     -------IP Flags---------
Version of IP Protocol.   IP Protocol ID. Including(    Fragment offset from start of    x D M
4 and 6 are valid. This   bug not limited to):          IP datagram. Measured in 8       x: 0x80 reserved(evil bit)
diagram represents          1.ICMP 17.UDP 57.SKIP       byte(2 words,64 bits)            D: 0x40 Do not Fragment
version 4 structure only    2.IGMP 47.GRE 88.EIGRP      increments. If IP datagram is    M: 0x20 More Fragments
---HeaderLength-------      6.TCP  50.ESP 89.OSPF       fragmented, fragment size                follow
Number of 32-bit words in   9.IGRP 51.AH  115.L2TP      (Total Length) must be a         ------RFC 791-----------
TCP header,minimum value  -------TotalLength-------     multiple of 8 bytes              Please refer to RFC 791 for
of 5. Multiply by 4 to    Total length of IP datagram   -----HeaderChecksum----------    the complete Internet Protocol
get count.                or IP fragment if fragmented. Checksum of entire IP header     (IP) Specification.
                          Measured in Bytes

6.2 如何使用ping命令探测MTU(Maximum Trasmission Unit)的大小

MTU的最小值是576字节

使用命令ping -f -l 1000,然后不断递增-l参数的值,直到ping命令失败。使用中位法很快就确定MTU的大小。

-f: 设置DF标志位为1,表示不允许分片 -l: 指定负载中的数据长度

6.3 IP分片的特征

  • 分片主体:源主机,路由器
  • 重组主体:目的主机

所以,经过多次分片之后,到达目的主机的分片,会非常非常多。

7 组播和IGMP协议

7.1 组播以太网地址

  • 以太网地址: 01:00:5e:00:00:00到01:00:5e:7f:ff:ff
  • 低23位:映射IP组播地址至以太网地址
    • 224.0.0.22: 11100000 00000000 00000000 00010110 vvvvvvvvvvvvvvvvvvvvvvvvv
    • 01:00:5e:00:00:16: 00000001 00000000 01011110 00000000 00000000 00010110

wireshark中抓包的的时候,malticast表示组播,boardcast表示广播

7.2 IGMP(Internet Group Management Protocol)

由于组播IP地址,这个组可能包含多个网络内的多个IP地址,所以,路由器必须要知道这个组播地址的地址范围到底有哪些IP

怎么让路由器知道呢?

8 IPv6

8.1 目的

  • 更大的地址空间:128位长度
  • 更好的地址空间管理
  • 消除了NAT等寻址技术
  • 更简易的IP配置管理
  • 优秀的选路设计
  • 更好的多播支持
  • 安全性
  • 移动性

8.2 冒分十六进制表示法

表示格式:每两个字节(4位二进制数),为一个区间,各个区间使用冒号分隔

零压缩:(连续的多个0可以使用::来表示,注意零压缩只能出现一次) * FF00:4501:0:0:0:0:0:32 * FF00:4501::32 * 805B:2D9D:DC28:0:0:FC57:0:0 * 805B:2D9D:DC28::FC57:0:0 * 805B:2D9D:DC28:0:0:FC57:: * 换回地址0:0:0:0:0:0:0:1 * ::1

8.3 常用报错

  1. ping -6 fe80::20c:29ff:fe06:befc时报错: connect: Invalid argument

    这个ip地址属于link-local类型,需要指定一个网络接口,像这样:fe80::20c:29ff:fe06:befc%eth0

  2. curl -k https://[fe80::f816:3cff:fe46:7462%eth0]:30082 curl: (3) [globbing通配] error: bad range specification after pos 10

虽然提示在第10个字母上发生了通配错误,但是,实际发生错误的是位置9。

9. ipv6为何被设计成与ipv4不兼容

  1. 地址空间需求:IPv4使用32位地址,最多可以提供约43亿个地址,而随着互联网的爆炸性增长,这个地址空间已经显得捉襟见肘。IPv6使用128位地址,理论上可以提供几乎无限的地址空间(约3.4×10^38个地址),足以满足未来互联网扩展的需要。由于地址长度的巨大差异,直接兼容会导致设计上的复杂性和效率损失。

  2. 协议结构优化:IPv6不仅仅是简单地扩大地址空间,它还对IPv4的许多方面进行了重新设计和优化。例如,IPv6简化了报头结构,移除了IPv4中的一些字段(如校验和),添加了新的功能(如流标签和扩展报头),这些改变旨在提高效率、安全性以及支持新的服务类型。这些结构性的变化使得直接兼容变得不切实际。

  3. 技术演进:IPv6的设计反映了对互联网技术演进的预期,包括对安全性、移动性、多播支持等方面的改进。为了实现这些目标,需要在协议层面上做出根本性变革,而不只是对IPv4的修修补补。

  4. 过渡策略:虽然IPv6本身不兼容IPv4,但设计者们也预料到了过渡期间的需要,因此提出了一系列过渡技术(如双栈、隧道技术、NAT64等),来帮助从IPv4平稳过渡到IPv6。这些过渡技术允许IPv4和IPv6在网络中共存,直到最终大部分网络基础设施和终端设备都支持IPv6。


本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image