计算机网络基础
二进制、十进制、八进制、十六进制
二进制运算规则
(1)算术运算规则 逢二进一,借一当二。
加法规则:0+0=0;0+1=1;1+0=1;1+1=10;(向高位有进位)
减法规则:1-0=1;1-1=0;0-0=0;10-1=1;(向高位有借位)
乘法规则:0×0=0;0×1=0;1×0=0;1×1=1;
除法规则:0/1=0;1/1=1;
(2)逻辑运算规则 口诀
逻辑与运算(AND):0^0=0;0^1=0;1^0=0;1^1=1; 有0为0
逻辑或运算(OR):0ν0=0;0ν1=1;1ν0=1;1ν1=1; 有1为1
逻辑非运算(NOT): 0变1,1变0
逻辑异或运算(XOR):0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0; 相同为0,不同为1
(3)进制数的增、删、小数点位移
若一个非零无符号r进制整数末尾删除n个零,则此数为原数倍;
若一个非零无符号r进制整数末尾添加n个零,则次数为原来的倍;
若一个非零无符号r进制小数点向左移动n位,则此数值为原数的倍;
若一个非零无符号r进制小数点向右移动n位,则此数值为原来的
二进制B:由0和1两个数字组成。
八进制O:由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
十进制D:都是以0-9这九个数字组成,不能以0开头。
十六进制H:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。
A相当于十进制中的10,B相当于11,依次类推,F相当与15
十进制转换为二进制、八进制、十六进制
整数除以2/8/16,反向取余数,直到商为0终止。
9(十进制)→1001(二进制)
小数乘以2/8/16取整,顺序输出。
小数部分“乘不尽”:十进制四舍五入,八进制三舍四入,十六进制七舍八入。
二进制、八进制、十六进制转十进制
整数要从右到左用二进制的每个数去乘以2的相应次方并递增
小数从左往右乘以2的相应负次方并递减
1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25(10)
所以总结起来通用公式为:abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)
八进制、十六进制转二进制
整数从右往左数三位/四位,小数从左往右数三位/四位
补零:例如二进制1 101 110.101 1转八进制是156.54
整数高位补零为001,小数低位补零为100
八进制数转二进制原理:八进制数的一位是二进制数的三位
十六进制数转二进制原理:十六进制数的一位是二进制数的四位
八进制与十六进制转换
两者之间的转换可以借助十进制或者二进制完成
先将八进制转换成十进制或二进制,再转换成十六
某进制问题:已知3*4=15,则3*5=21; 37+6=45,则13*5=67
解:3××4×
=1×
+5×
=12=R+5,R=7;R是七进制
3××5×
=15,15转7进制为21;15÷7余1,2÷7余2
原、反、补、偏移码
正数 | 负数 | 转换成二进制数(首位正数为0, 负数为1) | |
原码 | 0+|x| | 1+|x| | [+1]原 = 0000 0001 [-1]原 = 1000 0001 |
反码 | 0+|x| 正数都不变 | 负数除符号位不变, 其余各位取反 | [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 |
补码 | 0+|x| 正数都不变 | 负数符号位不变, 其余各位取反, 反码+1 | [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 |
偏移码 | 0+|x| 正数都不变 | 补码的符号位取反, 其余各位不变 | [+1] = [00000001]原 = [00000001]反 = [00000001]补 =[00000001]移 [-1] = [10000001]原 = [11111110]反 = [11111111]补 = [01111111]移 |
Tips:从右到左,直到有1,其余位反,符号位不变。(原码求补码)
原码、反码表示数的范围:-127---127 补码表示数的范围:-128---127
字符编码
(1)西文字符编码(ASCII)
ASCII码采用7位二进制编码,表示为即128个字符,最高位为0;
小写字母比对应的大写字母的码值大32;
例:大写字母A的值是65,小写字母f的值是102; 65+32+5=102
注释:从0---9,A---Z,a---z都是顺序排列,逐次增加1
比值大小:小写英文>大写英文>数字>空格
- 汉字字符编码
输入码:音码(搜狗、谷歌)、形码(形状部首)、数字编码
国标码:每个字节低7位,最大128×128=16384个汉字;
一级3755个,拼音排序;二级3008个,偏旁部首排序
计算公式:国标码=区位码+2020H
机内码:计算机内部使用的编码,每个字节最高位为1;
计算公式:机内码=国标码+8080H=区位码+A0A0H
字形码:在显示屏或打印机输出;表示方式为点阵式和矢量式;
计算公式:点阵字形所占字节数=点阵行数×点阵列数/8
编码类型 | 一个编码所占的字节数 | 每个字节的最高位 | 范围 |
ASCII编码 | 1 | 0 | |
国标码 | 2 | 0 | 2121H--7E7EH |
机内码 | 2 | 1 | A1A1H--FEFEH |
常见字符编码进制数:
A 1000001B 65D 41H a 1100001B 97D 61H
0 0110000B 48D 30H 空格 0100000B 32D 20H
信息存储单位和地址
(1)位(bit,b):计算机存储信息最小单位,其值为0或1,表示两种状态。
(2)字节(Byte,B):8个二进制位组成一个存储单元,表示存储空间大小最基本单位
1B=8b 1KB=1024B=B 1MB=1024KB=
B
1GB=1024MB=B 1TB=1024GB=
B
(3)字(Word):可以分为8位、16位、32位、64位机。
例:字长64位,一个字含有64个二进制;
(4)地址编号:操作系统把所有存储单元以字节为单位进行编号,称作编址。
存储容量=末位地址➖起始地址➕1(单位为B)
例:一幅1024*956像素、16位色,bmp图,求它的存储容量,单位为kb
计算:1024*956*16/(1024*8)=1912kb
例:ASCII坐标是(2,4),求它的值是多少?
纵坐标为2,横坐标为4,转为二进制为2:0010 4:0100
组合为01000010 转换取值为66
例:十六进制,从2001到7000,容量多少?
7000-2001+1=5000
例:二进制24位,求寻址范围是多少?
例:有一个8kb得内存储器,用十六进制数对它得地址进行编码,则编号可以从0000H到? 转换成二进制 10 0000 0000 0000
转换成十六进制 2000H
末位地址:2000H+0000H-1=1FFFH
编号从0000H---1FFFH
例:已知某处理器访问内存空间的最大地址为FFFF FFFFH
(1)求该处理器的地址总线数。
FFFF FFFF + 1 =1 0000 0000 =
地址总线数为32艮
(2)求该处理器的寻址能力。
因为该地址的总线数为32,所以
例:假设内存空间地址段为2001H---7000H则此内存存储空间为多少KB?
例:已知某存储器的存储单元起始地址为2001H,它的容量为16KB,则末尾地址是什么?
4000H+2001H-1H=6000H
地址分类
IP地址与二进制之间的转换
二进制数顾名思义,就是以二进制为基础的数, 用0和1两个数来表示, 同样我们可以用二进制来表示任何一个数字
例如216这个数
216 =
1 * 128 +
1 * 64 +
0 * 32 +
1 * 16 +
1 * 8 +
0 * 4 +
0 * 2 +
0 * 1
提取乘号之前的数字我们得到所代表的二进制数: 11011000
IP地址:192.168.59.24
二进制:11000000,10101000,00111011,00011000
IP地址和子网掩码逐位相与
逐位相与是子网掩码与网络地址相同位置的数字相加,当和为2的时候该位置写作1,否则的话写作0
举例1 (求网络地址)
点分十进制表示的IP地址 141 14 72 24
转换为二进制表示的IP地址 10001101 00001110 01001000 00011000
子网掩码是255.255.192.0 11111111 11111111 11000000 00000000
IP地址和子网掩码逐位相与 10001101 00001110 01000000 00000000
网络地址(点分十进制表示) 141 14 64 0
子网划分
选定的子网掩码将创建多少个子网?
2^x个,其中x是子网掩码借用的主机位数。
如:192.168.10.32/28,我们首先知道这是一个c类的ip地址,C类ip的默认子网掩码为:255.255.255.0,而这个ip的实际子网掩码是:255.255.255.240。为什么?因为ip地址后面的/28代表ip地址的实际网络是28个比特位,那么主机位就是4位,所以子网掩码的最后一段应该是11110000(1代表网络位,0代表主机位),故实际子网掩码是:255.255.255.240,默认子网掩码最后一段应该是0(00000000),现在却是240(11110000)。故其借用了主机位4位来充当网络位,也就是2^4->16个。
每个子网可包含多少台主机?
2^y-2台,其中y是没被借用的主机位的位数。-2是因为,主机位全为0的部分是这个子网的网段号(Net_id),全为1的部分是这个网段的广播地址
根据子网掩码计算网络中的主机数量
以192.168.1.16/27这个为例子,/27就是这个子网的掩码,子网是由32位二进制的数字组成,这个27就是代表他的32位二进制中前面27位是1,后面5位是0,则他的最大的主机数就是2的5次方,也就是32,其中包含了网络地址和广播地址,所以要去掉2,可用的主机地址就为30。
比方说是192.168.1.16 255.255.255.224,子网掩码是0—255,这里面有256个数,则我们用256减去224,得到32,需要去掉网络地址和广播地址,则这个可用主机地址的数量就为30。
可用地址的计算要使用到32,他的网络地址是能够整除32的,取两个值的中间范围就是他的最大主机地址了;范围:0-31,32-63,64-95,96-127,128-159,160-191,192-223,224-254,
而192.168.1.16/27,因为27是在第4段的,所以我们看192.168.1.16的第四段是16,而16所在的范围是0-31,则他的最大地址就是192.168.1.0—192.168.1.31,而他的网络号就是第一个也就是:192.168.1.0,而广播地址则是最后一个也就是192.168.1.31,则他的可用主机地址就是192.168.1.1~192.168.1.30
无分类编址CIDR和构造超网
1.无分类编址
CIDR还使用“斜线记法”,或称为CIDR记法,即在IP地址后面加上“/”,然后写上网络前缀所占的位数 CIDR把网络前缀相同的连续的IP地址组成一个CIDR地址块。只需要知道CIDR地址块中的任意一个地址,就可以知道这个CIDR地址块的起始地址(最小地址)和最大地址,以及CIDR地址块中的地址数。
例如,已知IP地址128.14.35.7/20是某个CIDR地址块中的一个地址,那么最小地址、最大地址计算如下
2.构成超网
将多个子网聚合成一个较大子网,叫做构成超网或路由聚合。方法:将网络前缀缩短。
例如网络1:206.1.0.0/17和网络2:206.1.128.0/17,可以将这两个子网聚合成一个更大的子网206.1.0.0/16,如下图所示。
3.最长前缀匹配
路由器会从匹配结果中选择具有最长的网络前缀的路由——最长前缀匹配。这是因为前缀越长,地址块越小,路由越具体。
例如:路由器R0的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,那么该分组应该被转发到哪一个下一跳路由器()
可以看出,第一个选项前缀匹配8位,第二个选项前缀匹配11位,第三个选项前缀只能匹配21位,第22位和目的地址二进制不同,所以根据最长前缀匹配,选择下一跳的地址为
R2。0.0.0.0/0是默认路由。