目录
1 网络基础术语
1.1 网关
1.1.1 网关定义
网关又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
1.1.2 如何理解网关
大家都知道,从一个房间到另一过房间,必须要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关就是一个网络连接到另一个网络的“关口”。
按照不同的分类标准,网关也有很多种。TCP/IP
协议里的网关是最常用的,在这里我们所说的“网关”均指TCP/IP协议下的网关。
1.1.3 网关的IP地址
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址,网关在网段内的可用IP中选一个,不过,一般用的是第一个和最后一个。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码是255.255.255.0;如果需要与其他网段通信,那么它的网关可以设置为192.168.1.1,当然也可以设置为网段内其他的一个IP地址。网络B的IP地址范围是“192.168.2.1~192.168.2.254”,子网掩码255.255.255.0。如果需要与其他网段通信,那么它的网关可以设置为192.168.2.1,当然也可以设置为网段内其它的一个ip地址。
1.1.4 网关是如何实现通信?
在没有路由器的情况下,不同的网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的的主机不再本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程。所以说,设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。
1.1.5 默认网关
如果搞清楚了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。
1.2 DNS
1.2.1 定义
DNS是域名解析服务器,是把网址变成IP地址的服务器。
DNS说白了是把域名翻译成IP地址用的,这里举个例子,大家就很容易清楚了。例如我们在浏览器里面输入www.baidu.com的时候,机器要跟百度这个网站进行通信,机器要往外面发送数据包,数据包里面要写百度这服务器的IP地址,我们不知道IP地址是多少,那么就需要主机问DNS服务器,DNS服务器就自动帮我们把www.baidu.com这个域名翻译成了IP地址61.135.169.105。然后写到了数据包的目的IP地址里面就可以进行通信。就跟我们写信一样,总要写个地址邮局才能进行派送,在国外写信,你写中文地址的话,邮局可能会不认识,需要一个人帮你翻译成英文。这就是DNS的作用,所以你的本地连接里面写DNS才能正常浏览网页,如果不设置的话,是无法正常访问网页的。
1.2.2 DNS使用的是TCP协议还是UDP协议
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类。但很少有人知道DNS分别在什么情况下使用这两种协议。
先简单介绍下TCP与UDP。
TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
TCP与UDP的区别:
- TCP协议中包含了专门的传递保证机制
TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 - UDP协议并不提供数据传送的保证机制。
如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生 - 长度限制
UDP报文的最大长度为64K,TCP则允许报文长度超过64K。当DNS查询超过64K时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于64K
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
为什么既使用TCP又使用UDP?
区域传送时使用TCP,主要有以下两点考虑:
- 辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
- TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP协议: 客户端向DNS服务器查询域名,一般返回的内容都不超过64K,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
1.3 MAC地址
讲到MAC地址,就不得不提IP地址,这里顺便把IP地址也解释一下。
IP与MAC虽然现在已经ipv6了,但我们基本用的比较多的还是ipv4协议,所谓IP就是你电脑整个网络的编号。其他电脑想要访问电脑就需要这个编号。但是这个编号很多情况下一直是变化的。唯一不变的是你的MAC地址:物理地址。
MAC是网络中用来识别网卡设备的唯一网络地址。由相关硬件制造商统一分配,每台电脑的MAC地址都是唯一的。比如说,你经常搬家,每搬一次家就会有一个地址,XX小区XX单元XX号,这个就是IP。但是你的名字是不变的,这个就是MAC,不同的是我们的MAC不允许重名。
我们的IP分为两个部分:如上图分为网络部分和主机不放呢。网络部分好比就是你在XX省XX市XX镇,这个是国家固定下来的。但是XX小区XX单元XX号是开发商自己定的。两个编号加起来就是你的IP了。不同的是现实中两个编号的长度是固定的,在网络上A、B、C、D的ip地址却是变化的。
1.4 子网掩码
1.4.1 定义
子网掩码是为了区分网络位和主机位,上面我们有说过,一个IP地址是由网络部分和主机部分组成。正如一个人的名字是由姓氏和名字组成。那么,我们可以把IP地址比作成一个人的名字,那么子网掩码就像是一份名单,可以快速地知道哪些人同姓,哪些人不同姓,把同姓的分在一组,让他们之间可以互相交流。
比如说,有一个网段是192.168.1.0-192.1.254,这个网段就像一个村子一样,就称它为安防村,这网段有个ip地址是192.168.1.1,我们就叫他安防一,另外一个人叫安防二,它的ip地址为192.168.1.2,我们一看他们,就知道他们是同村的。另外有一个网段,是192.168.0.0——192.168.255.254,我们叫它安村,村里有个同样有两个ip地址192.168.1.1与192.168.1.2,也叫安防一,安防二,那么问题来了?
这个时候,如何区分他们是属于那个村的?
这个时候就需要子网掩码来判断他们是属于哪个网段的,需要把安防一、安防二带到村里确认下,就知道他们属于哪个村子了。安防村的网段是255.255.255.0,安村的网段是255.255.0.0。网络中也会出现类似于“同名”“同姓”的IP地址,如何区分他们到底属于哪个网段,就需要依靠子网掩码了。
1.4.2 IP段类型和子网掩码
我们都知道, IP 是由四段数字组成,在此,我们先来了解一下 3 类常用的 IP
- A 类 IP 段 0.0.0.0 到 127.255.255.255 (0 段和 127 段不使用 )
A 类的默认子网掩码 255.0.0.0 一个子网最多可以容纳 1677 万多台电脑 - B 类 IP 段 128.0.0.0 到 191.255.255.255
B 类的默认子网掩码 255.255.0.0 一个子网最多可以容纳 6 万台电脑 - C 类 IP 段 192.0.0.0 到 223.255.255.255
C 类的默认子网掩码 255.255.255.0 一个子网最多可以容纳 254 台电脑
XP 默认分配的子网掩码每段只有 255 或 0
我们必须有一个子网掩码,因为:
- 当配置 IP 时,所有计算机都必须填写子网掩码
- 我们必须在我们的网络中设置一些逻辑边界
- 我们必须至少输入所使用 IP 类的默认子网掩码
1.4.3 子网掩码转二进制
要想在同一网段,只要网络标识相同就可以了,那要怎么看网络标识呢?
首先要做的是把每段的 IP 转换为二进制。把子网掩码切换至二进制,我们会发现,所有的子网掩码是由一串连续的 1 和一串连续的 0 组成的(一共 4 段,每段 8 位,一共 32 位数),如下:
- 255.0.0.0 转换二进制为 11111111.00000000.00000000.00000000
- 255.255.0.0 转换二进制为 11111111.11111111.00000000.00000000
- 255.255.255.0 转换二进制为 11111111.11111111.11111111.00000000
这是 A/B/C 三类默认子网掩码的二进制形式,其实,还有好多种子网掩码,只要是一串连续的 1 (不少于 8 个)和一串连续的 0 就可以了(每段都是 8 位)
如 11111111.11111111.11111000.00000000 ,这也是一段合法的子网掩码。子网掩码决定的是一个子网的计算机数目。计算机公式是 2 的 m 次方,其中,我们可以把 m 看到是后面的多少个 0 。如 255.255.255.0 转换成二进制,那就是 11111111.11111111.11111111.00000000 ,后面有 8 个 0 ,那 m 就是 8 , 255.255.255.0 这个子网掩码可以容纳 2 的 8 次方(台)电脑,也就是 256 台,但是有两个 IP 是不能用的,那就是最后一段不能为 0 和 255 ,减去这两台,就是 254 台。
1.4.4 子网掩码区分IP
子网的划分,实际上就是设计子网掩码的过程。子网掩码主要是用来区分 IP 地址中的网络 ID 和主机 ID ,它用来屏蔽 IP 地址的一部分,从 IP 地址中分离出网络 ID 和主机 ID。
子网掩码是由 4 个十进制数组成的数值 " 中间用 "." 分隔,如 255.255.255.0 。
若将它写成二进制的形式为 :11111111.11111111.11111111.00000000 ,其中为 "1" 的位分离出网络 ID, 为 "0" 的位分离出主机 ID ,也就是通过将 IP 地址与子网掩码进行 " 与 " 逻辑操作,得出网络号。
例如,假设 IP 地址为 192.160.4.1 ,子网掩码为 255.255.255.0 ,则网络 ID 为 192.160.4.0, 主机 ID 为 0.0.0.1 。计算机网络 ID 的不同,则说明他们不在同一个物理子网内,需通过路由器转发才能进行数据交换。
每类地址具有默认的子网掩码 : 对于 A 类为 255.0.0.0 ,对于 B 类为 255.255.0.0 ,对于 C 类为 255.255.255.0 。
除了使用上述的表示方法之外,还有使用子网掩码中 "1" 的位数来表示的,在默认情况下, A 类地址为 8 位, B 类地址为 16 位, C 类地址为 24 位。
例如, A 类的某个地址为 12.10.10.3/8 ,这里的最后一个 "8" 说明该地址的子网掩码为 8 位,而 199.42.26.0/28 表示网络 199.42.26.0 的子网掩码位数有 28 位。
1.4.5 根据子网掩码计算电脑数
如果希望在一个网络中建立子网,就要在这个默认的子网掩码中加入一些位,它减少了用于主机地址的位数。加入到掩码中的位数决定了可以配置的子网。因而,在一个划分了子网的网络中,每个地址包含一个网络地址、一个子网位数和一个主机地址
示例:255.255.248.0 这个子网掩码可以最多容纳多少台电脑?
计算方法:把将其转换为二进制的四段数字(每段要是 8 位,如果是 0 ,可以写成 8 个 0 ,也就是 00000000 ):11111111.1111111.11111000.00000000
然后,数数后面有几颗 0 ,一共是有 11 颗,那就是 2 的 11 次方,等于 2048 ( 注意:主机号中全是 0 是保留地址,全是 1 是广播地址,所以它们不算可用主号地址。网络号也是一样的。子网号是可以用全 0 和全 1 的 ) ,所以这个子网掩码最多可以容纳 2048-2=2046 台电脑。
1.4.6 根据电脑数计算子网掩码
一个子网最多可以容纳多少台电脑你会算了吧,下面我们来个逆向算法的题。
假如一个公司有 530 台电脑,组成一个对等局域网,子网掩码设多少最合适?
首先,无疑, 530 台电脑用 B 类 IP 最合适( A 类不用说了,太多, C 类又不够,肯定是 B 类),但是 B 类默认的子网掩码是 255.255.0.0 ,可以容纳 6 万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式。
公式:2 的 m 次方 >=560,首先,我们确定 2 的 m 次方一定是大于 2 的 8 次方的,因为我们知道 2 的 8 次方是 256 ,也就是 C 类 IP 的最大容纳电脑的数目,我们从 9 次方一个一个试, 2 的 9 次方是 512 ,不到 560 , 2 的 10 次方是 1024 ,看来 2 的 10 次方最合适了。子网掩码一共由 32 位组成,已确定后面 10 位是 0 了,那前面的 22 位就是 1 ,最合适的子网掩码就是: 11111111.11111111.11111100.00000000 ,转换成 10 进制,那就是 255.255.252.0 。
分配和计算子网掩码后,下面,我们来看看 IP 地址的网段。
相信好多人都和我一样,认为 IP 只要前三段相同,就是在同一网段了,其实,不是这样的,同样,也把 IP 的每一段转换为一个二进制数,这里就拿 IP : 192.168.0.1 ,子网掩码: 255.255.255.0 测试
192.168.0.1 转换为二进制为 11000000.10101000.00000000.00000001(这里说明一下,和子网掩码一样,每段 8 位,不足 8 位的,前面加 0 补齐)
那么到底怎么样才算同一网段呢?
要想在同一网段,必需做到网络标识相同,那网络标识怎么算呢?各类 IP 的网络标识算法都是不一样的。 A 类的,只算第一段。 B 类,只算第一、二段。 C 类,算第一、二、三段。算法只要把 IP 和子网掩码的每位数 AND 就可以了。AND 方法: 0 和 1=0, 0 和 0=0, 1 和 1=1。
如: And 192.168.0.1 , 255.255.255.0 ,先转换为二进制,然后 AND 每一位
IP 11000000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
得出 AND 结果 11000000.10101000.00000000.00000000,转换为十进制 192.168.0.0 ,这就是网络标识
再将子网掩码取反,也就是 00000000.00000000.00000000.11111111 ,也与 IP AND 得出结果 00000000.00000000.00000000.00000001 ,转换为 10 进制,即 0.0.0.1 ,这 0.0.0.1 就是主机标识。
要想在同一网段,必需做到网络标识一样。
我们再来看看这个改为默认子网掩码的 B 类 IP,如 IP : 188.188.0.111 , 188.188.5.222 ,子网掩码都设为 255.255.254.0 ,在同一网段吗?
先将这些转换成二进制:
- 188.188.0.111 转换为二进制 10111100.10111100.00000000.01101111
- 188.188.5.222 转换为二进制 10111100.10111100.00000101.11011110
- 255.255.254.0 转换为二进制 11111111.11111111.11111110.00000000
分别 AND ,得
- 10111100.10111100.00000000.00000000
- 10111100.10111100.00000100.00000000
网络标识不一样(看 255.255.254.0 转换成二进制后 1 的数位,所以可以看到不一样),即不在同一网段。
一个公司有 530 台电脑,组成一个对等局域网,子网掩码和 IP 设多少最合适?子网掩码不说了,前面算出结果来了 11111111.11111111.11111100.00000000 ,也就是 255.255.252.0,B 类地址
选一个 B 类 IP 段,这里就选 188.188.x.x ,这样, IP 的前两段确定的,关键是要确定第三段,只要网络标识相同就可以了。我们先来确定网络号。(我们把子网掩码中的 1 和 IP 中的 ? 对就起来, 0 和 * 对应起来)如下:
- 255.255.252.0 转换为二进制 11111111.11111111.11111100.00000000
- 188.188.x.x 转换为二进制 10111100.10111100.??????**.********
- 网络标识 10111100.10111100.??????00.00000000
由此可知, ? 处随便填(只能用 0 和 1 填,不一定全是 0 和 1 ),我们就用全填 0 吧, * 处随便,这样呢,我们的 IP 就是10111100.10111100.000000**.******** ,一共有 530 台电脑, IP 的最后一段 1 ~ 254 可以分给 254 台计算机, 530/254=2.086 ,采用进 1 法,得整数 3 ,这样,我们确定了 IP 的第三段要分成三个不同的数字,也就是说,把 000000** 中的 ** 填三次数字,只能填 1 和 0 ,而且每次的数字都不一样,至于填什么,就随我们便了,如 00000001 , 00000010 , 00000011 ,转换成十进制,分别是 1 , 2 , 3 ,这样,第三段也确定了,这样,就可以把 IP 分成 188.188.1.y , 188.188.2.y , 188.188.3.y , y 处随便填,只要在 1 ~ 254 范围之内,并且这 530 台电脑每台和每台的 IP 不一样,就可以了。
有人也许会说,既然算法这么麻烦,干脆用 A 类 IP 和 A 类默认子网掩码得了,偶要告诉你的是,由于 A 类 IP 和 A 类默认子网掩码的主机数目过大,这样做无疑是大海捞针,如果同时局域网访问量过频繁、过大,会影响效率的,所以,最好设置符合自己的 IP 和子网掩码
1.5 广播地址
广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。
在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机
2 特殊的ip地址
2.1 0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。如果在网络设置中设置了缺省网关,那么系统会自动产生一个目的地址为0.0.0.0的缺省路由.对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一 律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
2.2 限制广播地址
限制广播地址(255.255.255.255)。对本机来说,这个地址指本网段内(同一广播域)的所有主机(可能由于实现而不同)。这个地址不能被路由器转发。可以进行广域网传输,但一般会被阻止
2.3 回送地址(环回地址)
A类网络地址127是一个保留地址,用于网络软件测试以及本地机进程间通信,叫做回送地址(loopback address)。无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,不进行任何网络传输。含网络号127的分组不能出现在任何网络上。
2.4 局域网中的IP
当主机号全为0时表示一个网段,是一个网络号。网络号是用于三层寻址的地址,它代表了整个网络本身,代表了网络全部的主机,如果主机号全0,IP地址代表网络号指向的那个网段。
那么,当主机号全为255时为广播地址
网络号是网段中的第一个地址,广播地址是网段中的最后一个地址,这两个地址是不能配置在计算机主机上的。
例如在192.168.0.0,255.255.255.0这样的网段中,网络号是192.168.0.0,广播地址是192.168.0.255。因此,在一个局域网中,能配置在计算机中的地址比网段内的地址要少两个(网络号、广播地址),这些地址称之为主机地址。在上面的例子中,主机地址就只有192.168.0.1至192.168.0.254可以配置在计算机上了
2.5 用户上网IP
2.5.1 静态IP地址
买了一台新电脑,插上网线,开机,这时电脑能够上网吗?
通常你必须做一些设置。有时,管理员(或者ISP)会告诉你下面四个参数,你把它们填入操作系统,计算机就能连上网了:
- 本机的IP地址
- 子网掩码
- 网关的IP地址
- DNS的IP地址
下图是Windows系统的设置窗口
这四个参数缺一不可,由于它们是给定的,计算机每次开机,都会分到同样的IP地址,所以这种情况被称作“静态IP地址上网”。
但是,这样的设置很专业,普通用户望而生畏,而且如果一台电脑的IP地址保持不变,其他电脑就不能使用这个地址,不够灵活。出于这两个原因,大多数用户使用”动态IP地址上网”
2.5.2 动态IP地址
所谓”动态IP地址”,指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫DHCP协议。
这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做”DHCP服务器”。新的计算机加入网络,必须向”DHCP服务器”发送一个”DHCP请求”数据包,申请IP地址和相关的网络参数。
前面说过,如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?
DHCP协议做了一些巧妙的规定:
首先,它是一种应用层协议,建立在UDP协议之上,所以整个数据包是这样的:
- 最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
- 后面的”IP标头”,设置发出方IP地址和接收方IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
- 最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。
接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数