首先是DNS,当你访问一个网站的时候,你并不会输入一个IP地址来访问,而是输入一个网址,比如www.baidu.com,那么是不是实际上网址也是可以用来通讯的呢?非也,网址只是方便我们大家阅读和记忆,但是实际上在你访问腾讯服务器的时候,www.baidu.com这个网址还需要经过转换,那么这个转换途径,就是DNS。DNS的全称是域名系统(Domain Name System),它本身也是网络上的一个服务器,我们要想和DNS服务器去通讯拿到一个网址的具体IP,就需要首先设置DNS。那为什么我们好像从来没有手动去设置DNS呢?就引申出了第二个问题——DHCP。

前面提到了,通讯需要IP,但是我们也基本上没有手动配置过IP地址,但是路由器就可以给你提供网络并且连上互联网,这是为什么呢?因为它可以自动获取而不需要我们去手动设置,而这里的途径,就是DHCP,DHCP是动态主机配置协议(Dynamic Host Configuration Protocol),当一个设备连到网络里的时候,无论是无线还是有线,这个新设备都会通过发“广播”(DHCP Discover包)来申请属于它的IP地址信息,之后DHCP服务器就会回复它,并给它一个IP、网关、掩码、DNS等等。

DNS服务器是一级一级的工作模式,比如现在的路由器,通常都会把DNS地址指向它自己,所以很多时候你会发现你的设备得到的网关、DHCP、DNS都是同一个地址

当访问一个网址的时候,电脑会首先向它所配置的DNS服务器去询问网址对应的IP,路由器不知道的时候(一般都不知道),就会传递给下一级,也就是运营商提供的DNS服务器地址,运营商的搞不定,就会最后跑到全世界一共只有13台的“根服务器”去,那么如果连根服务器都没有怎么办呢?当然就是解析不出来,通讯失败了…

这里再多插一句,除了依靠路由器等等,我们在使用Windows的时候,它还有一个本地的域名解析表,它的位置是C:\Windows\System32\drivers\etc\hosts,右键用记事本打开它,就能看到其中的内容。它会写一个IP,后面对应一个域名(网址)。在我们实际访问的时候,最最优先解析的实际上是它,所以我们也是可以通过它来改变一些域名的解析的。

DNS和DHCP的功能搞清楚了,IP地址是做什么的我们也知道,但是DHCP中获取的其他内容是什么呢?比如网关、掩码。我们继续看,首先IP地址因为有限,所以它必须以掩码来划分成段方便使用。为什么要划分网段呢?因为IP地址的资源很有限,只能通过不同的段来利用。然后就有了这3个东西。

IP地址:这个不必说,如果是自动获取到的,就是你在这个网络内的一个地址,一个身份。

掩码:掩码的实际作用是划分出网段的大小。IP的划段同样和它的排布有关系。举个实际的例子,我们常见的IP地址192.168.1.2,网关192.168.1.1,掩码255.255.255.0,转换成二进制就是下面这个图,掩码写到哪里,就从哪里“切一刀”,前面全是1的部分为网络位,后面是0的部分,就是主机位。网络位代表了这个网段在网络上的地址,相当于当我从外部要和这个“局域网”通讯的时候,我是用前面的192.168.1,而我要知道我自己是这个网络里的哪一个的时候,用的是最后这个“.2”。


因为都是4个8比特位的二进制数,所以,基本的网络里,网段的大小也只能是2的次方个。上面这个192.168.1.X这个网段,掩码刚好是255.255.255.0,所以这个段所有的IP地址就是192.168.1.0到192.168.1.255,一共是2的8次方个。只是实际使用中,第一位是不用的,作为网络的“名字”,最后一位是“广播地址”,用作给网络内所有主机发信息,所以除了2的N次方,还要减去一头一尾的2个。

网关:网关规定了当我有数据要走出这个局域网的时候,它的出口在哪里。这个就比较容易理解了,它的英文名字Gateway,可能还更直观一点,它就是这个网段进出的“门”。

最后,我们常见掩码的255.255.255.0和网关的192.168.1.1只是应用比较多,它实际可以是255.255.128.0等等,需要以实际网段大小来界定。而网关也可以是这个网段内的任意一个IP,并不一定是.1,只是为了方便,通常路由器是我们的出口,它就把自己定为.1。