0%

学习TCP/IP(1):分类的Internet地址

学习TCP/IP(1):分类的Internet地址

一个互联网主机可由名字(Names), 地址(Address), 路由(Route)来进行标识。Shoch 是这样定义这三个术语的:

Names,即名字,标识这个对象是什么;

Address,即地址,标识它在哪里;

Route,即路由,指出如何到达哪里。

首先,让我们把互联网想象成由众多物理网络构成的大网络,每个物理网络有若干个主机。我们依次给物理网络编上号(即网络号),然后再给物理网络里的主机编上号(即主机号,注意,主机号是相对于物理网络而言的;比如说我们有两个物理网络,每个物理网络各有2台主机,那么第一个和第二个物理网络中包含的主机号都是1,2。并非1,2,3,4。)

这样组成的互联网地址就能分为网络号主机号两部分,网络号标识了是哪个物理网络,主机号则指明了这个主机是这个物理网络的第几台主机。但请注意,IP地址并非唯一地标识互联网上的主机。事实上,存在一种特殊的多归属主机,这种主机具有1个以上的物理连接,同时归属于不同的物理网络,这个主机自然就拥有多个IP地址。最为典型的例子是路由器,路由器是用于连接两个或多个物理网络的设备。

在IPv4地址最初的分类(classful)编址方案中,IP地址(在本系列文章中若无特别说明IP地址均指IPv4地址,下同。)可分为如下5类:

ABC类地址

前3类可用于一般的网络编址,后两类有特殊用途。

类别 前导bit 网络号部分 主机号部分 可容纳网络数 单网络可容纳主机数 点分十进制记法首位数字范围
A类 0 7bits 24bits 27 224 0~127
B类 10 14bits 16bits 214 216 128~191
C类 110 21bits 8bits 221 28 192~223

D类地址

D类地址的前导bit为1110,是多播地址。点分十进制记法首位数字范围:224~239

E类地址

保留为今后用.点分十进制记法首位数字范围:240~255

特殊地址

网络地址和定向网络地址

按照约定,主机号全0的地址被用于指代网络本身。总而言之:

互联网地址可以用来指向单个主机,也可以用来指向网络。按照约定,主机号的所有比特都为0的地址是保留给该网络本身的。

受限广播地址(Limited Broadcast Address) 或本地网广播地址(Local Network Broadcast Address)

注: LBA和LNBA本质上是同一个地址,只是叫法不同而已.(不确定,待查证) 地址组成: 32比特位全1,点分十进制记法为255.255.255.255 用途:给本网段所有主机广播

全零地址

该地址用于下面的情况:(请参见DHCP协议,DHCP Wikipedia) 一个主机需要通信,但是该主机还没有一个有效的IP地址。于是它会用全零地址标示自己,给本地网广播地址(上述的全1地址)发送一个特殊的数据包,当接收方收到数据包之后,知道该主机还没有一个IP地址,就会发送一个特殊的数据包给该主机以分配给该主机一个有效的IP地址.

环回地址(loopback address)

环回(loopback)地址指网络前缀为127.0.0.0的所有地址,该地址用于测试TCPIP以及本地进程之间的通信。如果某个程序以该地址作为目的地址发送数据包,那么该数据包永远都不会通过网卡发送到任何网络上。此外,主机和路由器应该永远不为网络号为127.0.0.0的地址传播路由或可达性信息,它不是一个网络地址.

特殊地址小结

地址比特位组成 用途
比特位全0 启动时的原站地址1
比特位全1 受限广播(本地网)2
主机位全1 对网络的定向广播2
主机位全0 对网络的受限广播2
127.0.0.0/8 环回地址3

注1: 1.永远不是有效的目的地址 2.永远不是有效的源地址 3.不应该在网络上出现

注2:对网络的定向广播区别于受限广播地址,虽然完成的功能类似,但是对网络的定向广播是针对于某一个网络而言的(通过指定网络号),该方式为网络通信提供了便利,但也存在一定的风险,出于安全考虑,大多数路由器和主机都配置为拒绝该类型的数据包.

注3:对网络的受限广播这个地址一般用于指代该网络本身.

IP地址的点分十进制记法

IP地址是一个4个八位组组成的32比特互联网地址。

注意,从技术上讲,术语“字节”是指一个硬件无关的字符大小;但是术语八位组在所有的计算机上都是指8个比特。

将IP地址写成以小数点分隔的4个十进制整数,即为IP地址的点分十进制记法

例如:IP地址 127.0.0.1 用二进制表示就是:01111111 00000000 00000000 00000001 换成十进制就是2130706433。甚至你可以验证这是记法不同的同一个地址:

image-20220301223410880

网络字节序

由于各个平台的字节序不同,所以TCPIP协议定义了一种网络标准字节序,英文叫Network Standard Byte Order.网络上发送的任何二进制字段都必须使用这些顺序。在主机或路由器发送数据之前,都必须将二进制数据项从本地字节序转换为网络字节序。在分组抵达目的站之后,再由网络字节序转换回本地字节序。这样就解决了不同主机对于字节序差异而导致的通信问题。

只有字段需要转换字节序。这些字段通常以整形或浮点数表示,若字节序错误会导致接收端解码出完全不一样的结果;用户自定义二进制数据则完全不用转换字节序。一方面,二进制数据是由应用程序定义的,对于TCPIP协议来说是完全透明的,另一方面,用户二进制数据是以字节为单位进行传输的,自然就没有字节序的问题。(当然,若你需要将整形数据之类的编码为二进制还是需要考虑字节序的)

网络标准字节序是大端表示法,即最高有效字节在最前面;而我们现在常用的x86架构处理器则是小端法表示:最低有效字节在最前面。

比如说x86表示的32位无符号数1用十六进制表示为: 01 00 00 00

转换到网络字节序就变成了:

00 00 00 01