5. 计算机与网络

现如今我们生活中网络是无处不在,但是关于网络的概念并不是人人都清楚的,今天就来谈一谈网络的相关知识。

我们在网络中发邮件发信息,这个过程实际上和邮政系统是非常相似的。年轻一代朋友可能没有写纸信的经验,在寄信前,必须先写好信封,信封上有几个重要的信息,首先是收件人的邮编,其次是收件人的详细地址,然后是收件人的名字,最后是寄件人的地址。

如果收件人的地址写得不清楚,信件就可能无法成功寄达,会被退回。那么在计算机的网络中,信息又是如何被精准无误的送达对方电脑上呢?

IP地址

在网上,要找到对方或被对方找到,肯定是需要一个地址的,就类似门牌号一样。网络中的地址也就是所谓的IP地址。IP地址是网络上计算机的唯一标识,当然这个地址并不是一成不变的,它是动态分配的。

我们通常所说的IP地址由4个字节组成,前面已经学过,1个字节为一个8位二进制,因此一个字节所能表示的范围是0~255,4个字节也就分为4段,中间用一个点分隔,IP地址的范围用十进制数表示为0.0.0.0255.255.255.255之间。而0.0.0.0255.255.255.255都有特殊意义,不能使用,且IP地址又被人为划分为A类~E类共五类,所以真正能使用的范围并没有理论上那么多。

IP地址被发明出来的当年,人们远远无法预计到今天互联网的繁荣,这就造成了IP地址不够用的窘迫,如今几乎人人都有一台或多台能上网的设备,凡是能上互联网的设备都需要一个IP地址,不论是电脑还是手机,更不用说未来的物联网时代,或许家里的电饭煲、热水器都能上网都需要一个IP地址。为了解决这个问题,人们又发明了IPv6,意即IP地址的第六个版本,相对的,我们上面说的就被称为IPv4,也就是第四版。IPv6是下一代的IP地址,目前的互联网仍然是建立在IPv4的基础之上。

我们知道IPv4是采用4字节的32位二进制表示,总共也就约43亿个地址,这个数量远远无法满足全球的上网设备数量,而IPv6采用128位二进制长度来表示,它所能提供的地址数量是一个天文数字。借用一句名言,即IPv6给全世界每一粒沙子分配一个IP地址都绰绰有余。

端口

计算机就像一个小盒子,盒子想要接收外界发来的信息,那么就必须打开一个口子,否则外面的东西是送不进去的,这个口子就是端口(Port)。这个很好理解,就像家里要开门一样,不然怎么进出呢。

计算机实际上是很傻的,它做一件事就要开一个口子,比如我们经常使用QQ发信息,就需要开一个口子,使用电子邮件也需要开另一个口子,这个时候再登一个微信又得开一个不同的口子,总之一个口子就只能做一个事,如果两个程序共用一个口子,那就不行,这就是我们经常听到的所谓端口占用。实际上这个也很好理解,就好比现在一台手机上同时登录了QQ和微信,那么一条消息发到你手机上来,它是应该发给QQ呢还是发给微信呢?从这个情景我们就能明白,网络上的信息接收,是同时用IP地址 + 端口号两者来定位的,IP地址用来确定是哪一台上网设备,端口号用来确定是这个设备上的哪一个程序。

那么一台计算机总共能开多少个端口呢?这个数字其实是一个固定值,总共是65535个,且每个端口都用一个数字来标识,称为端口号,最大的端口号就是65535,常见的一些端口号还有804433389等等。

局域网

局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联组成的计算机组

现在几乎家家都有路由器(通常是无线路由器、无线WIFI之类),而路由器实际上就包含了交换机,路由器通过有线或无线的方式,将多台计算机类设备互联在一起,这就是一个局域网。

在同一个局域网中,连接的设备可以相互之间访问,相互之间收发消息,组成了一个闭环。这种相互之间发送信息,与这个网络是否能“上网”无关。换句话说,即使你家里的宽带欠费了,不能上外网了,也不会影响这个局域网的运转。这一点对于那些曾经在网吧玩过局域网对战游戏的朋友应该深有体会。

那么交换机和路由器又有什么区别呢? 简单来说,交换机只是一个将多台电脑网线连接起来的设备,它不能分配局域网IP,而路由器则可以给局域网的每台设备分配IP地址,而现代的家用路由器,实际上是两者合一的产品。

那什么又是局域网IP呢? 前面已经说过了,在任何一个网络中,连接到这个网络中的计算机都需要一个IP地址,这个IP地址是该计算机该网络中的唯一标识。这样说来,局域网中的电脑自然也需要一个在该局域网中的IP啦,不然局域网内部就没法通信了。大家可以查看一下自己的电脑在家庭路由中所分配的局域网IP地址

在家庭局域网中,通常分配的IP地址都是192.168.1.xxx192.168.0.xxx格式,这种IP地址被称为C类IP地址,最后一段我用xxx表示的通常称为设备号,因为在家庭的局域网中,前三段都是固定的一模一样的,只有第四段不同,因此家庭局域网中最多只能连接253台计算机。前面已经说过,255不能用,而1通常是路由器的地址,也就是192.168.1.1192.168.0.1,大家不用奇怪,路由器作为一台网络设备,当然也是需要IP地址的。

互联网

所谓局域网其实只是相对的概念,它相对的是广域网的。广域网(WAN),就是我们通常所说的因特网,它是一个遍及全世界的网络。

大家可以思考一个问题,世界上是先有局域网还是先有广域网呢?不用说,肯定是先有局域网咯,有了局域网,就有人会考虑,能不能将大家的所有电脑连接成一个网络呢?如果全世界的所有上网设备都连成一个网络,那么所有人之间不就可以互发信息,共享信息了吗?而这个网也就是我们所说的因特网,或者说是互联网,我们通常说的上网,当然也是上这个网啦!

不说全球,就中国都有无数的上网电脑,这么多的计算机要连接到一个网络里,这中间的架线,设备维护,人力成本都是海量的支出,因此连接到互联网中必然是付费的,不可能不花钱。而电信运营商正是提供这样的服务,将网线牵到我们家里,让我们接入互联网,并定期收取一定费用。

那么还有一个问题,全球的计算机都是直接连接到互联网中的吗?这一点显然是不可能的,不仅从物理操作上难以实现,而且前面也说过了,IPv4的IP地址也不够用。说到这里,很有必要解释一下前面的疑问,既然目前主流的IPv4的IP地址不够用,那么全球那么多计算机又是怎么上网的呢,人们是如何解决这个问题的?

实际上因特网并不是将所有的物理设备连接在一起,而是将无数个子网连接在一起,或者说是将无数个局域网连接了起来。这些局域网下面也可能嵌套着不只一层的局域网,不论下面嵌套了几层,最上层直接接入互联网的那一层局域网在互联网上都拥有一个公网IP,或者也称为外网IP。简单说,也就是多个子网或多台电脑共用同一个互联网IP。

大家可以自行验证这一点,在百度中搜索本机IP就会看到自己上网时的公网IP了,然后你可以查看一下电信运用商分配给你的IP,通常来说这两个不会相同。至于查看运营商分配给你的IP的方法,可以登录路由管理界面查看。在国内,你甚至可能与一栋楼、一个小区的人共用同一个公网IP地址。

像国内的一些二线宽带运营商,如长城之类的为什么网速会不稳定呢?因为很多类似的公司实际上只是一个代理,他们仍然租用的是中国电信宽带的线路,然后自己组一个局域网将用户加入进来提供服务,由于成本,管理,物理设备的限制,会导致抢占网速的情况发生。举个例子,假如二级代理商使用一条公网线路给你们整栋楼组一个网,这时候二楼的张三在家使用某雷悄悄下载不可描述的小电影时,就会抢占网速,毕竟全楼都是共用一根公网网线上网的,就好比自来水管堵了,大家都没水用。

共用公网IP地址的利与弊 先说利,这个就比较简单了,直接解决了IPv4地址不够用的问题。另一点则比较隐晦,那就是便于管控,至于为什么便于管控,我们后面再解释。

再说弊,实际上弊端是非常大的,只是普通人无法感知而已。一开始我们就开门见山的说过了,IP地址是一台计算机在网络上的唯一标识,既然如此,理论上知道了对方IP地址,就应该可以实现点对点的信息传送,但实际上在互联网上并不能实现。

即使知道了对方公网IP,但如果对方电脑是处于几层局域网嵌套之中,那么实际上对方是和无数电脑共用同一个IP,你的信息是发给共用该公网IP的哪一台电脑呢?因此消息无法被送达。

说到这里,肯定会有很多朋友疑问,为什么局域网中的多台电脑可以共用一个公网IP?为什么我和别人共用了公网IP,还是能使用QQ之类的软件收发消息呢?下面就一一为大家解答。

路由转发 路由器除了分配局域网IP地址之外,还有一个重要的功能,那就是信息的转发。

如上图所示,当我们在家访问百度的IP时,会首先经过第一层路由器,大多是我们家里的路由,路由器发现该IP地址不是本局域网中的,就会将信息发往上面一层局域网的路由器,依次类推,直达公网中寻找到该IP地址的百度服务器为止。当然,路由转发不仅仅是这么简单的规则,这里重点讲原理,不纠细节。

这个原理,我举个生活中的例子,相信大家就明白了。比如我们要找寻根问祖,就只需要找爸爸的爸爸,爸爸的爸爸的爸爸,反正一路往上找爸爸,这个路线很简单,18辈祖宗都能翻出来。但反过来祖宗找后裔就太难了,假如你是祖宗,你有三个儿子,你每一个儿子又有三个儿子,往下延伸四辈就已经无能为力了,这就是所谓的指数级增长啊。懂了这个道理,我们就能总结一个特性,那就是在多层局域网嵌套中,寻址具有单向性的特点,很难反过来。

以上的树型图就表现了这一特点,由下往上找到根节点就很容易,顺藤摸瓜就行,但是由上往下则很难,需要按顺序将每一条路径都试探一遍,直到找到自己需要的那个子孙节点。

了解了这个原理,大家就会明白,影视剧、网络小说中,知道对方一个IP地址,就能轻易入侵对方电脑的行为非常幼稚可笑了,如果对方电脑拥有一个独占的固定公网IP地址,那还有可行性,如果是像我们大家这样的普通家庭用户,还不知道和多少人共用同一个公网IP地址呢,根本无法通过一个公网IP入侵我们的电脑。但如果是政府要查,那又有不同,不论我们经过多少层局域网去发帖,每一次的路由转发都会留下痕迹,政府通过运营商去查看我们的上网痕迹,经过一层层痕迹反推,最终就能锁定我们的接入端,然后根据运营商这边的宽带报装记录,就知道了我们的门牌号以及预留的身份信息,然后就能请你喝茶咯。但是这个过程也没有涉及入侵,也仅仅是根据痕迹定位而已。

服务器与客户端 正是基于这个特点,所以我们就需要所谓的服务器。服务器并不是一个完全物理意义上的设备,我个人认为服务器只是一个逻辑上的概念。简单说服务器也就是一台配置非常高的电脑,有多高呢,一般会比任何游戏发烧友的魔鬼配置更高,一般人的电脑只有一块CPU,而用于做服务器的电脑可能有多块CPU,可能有32核。

服务器在公网上拥有一个独占的固定IP地址,这样通过公网IP地址就可以直接找到服务器这台电脑。由于IP地址是紧俏的资源,向电信运营商租用独占的固定IP地址是非常昂贵的,因此维护服务器的成本也是昂贵的。早年的腾讯也正是因为服务器成本昂贵,而QQ又无法有效的变现,差点就将QQ业务卖给了当年财大气粗的新浪。

我们可以看到,当我们向好友发消息时,其实首先是将该消息发给QQ服务器,然后QQ服务器再将我们的消息转发给对应的人。在整个通信过程中,QQ扮演的都是一个中间人、传声筒的角色。

相对于服务器而言,其他的访问者也就被称为客户端。大家明白了这一点,就能理解,我们当今的互联网整个是建立在这种中心化基础之上的。什么是中心化,上面例子中,QQ服务器就是中心,我们无论是收还是发消息,都需要找这个中心。比如我们打开了电脑,连上网线,如果不登录QQ仍然无法收到好友的消息。当我们登录QQ软件时,其实就是与QQ服务器建立了一个连接,前面已经说过了这种寻址是单向的,我们能找到QQ服务器,而QQ服务器找不到我们,因此客户端的作用就是不断向QQ服务器发起询问。形象的比喻就是,当我们登录电脑或手机上的QQ软件时,该软件都会每隔一会就去找QQ服务器问一句,"有我的消息吗?"服务器说没有,过一会再去找服务器问,"有我的消息吗?",这次服务器说有了,谁谁给你发了一条消息。这个动作在编程中被称为轮询。服务器比较傲娇,它是不会主动联系我们的(实际上是没办法联系),一切都需要我们自己不停的去询问。

到这里,大家是不是都豁然开朗了呢?所以啊,大家不要在这些聊天工具中乱说一些话,因为你发的内容最先看到的是QQ的服务器,你的一切聊天内容在QQ服务器上都是透明的。这种中心化的一个好处就是很容易监管,国家不需要花太大力气,只要把QQ服务器管控起来就能轻松实现监管。

那么与中心化相对的,之前比较热的技术区块链则是去中心化。这种技术最早是一些黑客及无政府主义者研究出来的,目的当然是不希望有一个服务器中心,大家点对点的就能发送信息多好,我不需要先把消息发给服务器去中转,我直接将消息发给指定的对方就好,这样一来,基本上无法监管了,大家私下里交流,根本不经过一个信息中心,那还怎么监管?但是这样一来也有一个弊端,大家思考一下,假如我网购的时候,不是将钱先打给第三方支付宝,而是点对点的直接打给卖家,那卖家拿了钱不认怎么办?不借助第三方中心公证,点对点的网络似乎无法实现金钱往来,而区块链技术的诞生,正是解决了点对点网络中的金钱往来问题。对于该技术这里不做延伸,有兴趣的朋友可以自行了解。

协议

什么是协议呢?简单说就是大家约定好的一套规则。比如《智取威虎山》里面的道上的黑话,什么“天王盖地虎,宝塔镇河妖”,这就是协议。大家约定好了一套行话,能对上就是自己人,对不上那就不是自己人。

在计算机的世界,协议虽然五花八门,但是通用的也就是那几个。通常来说,最底层的协议是TCP/IP协议,基本上整个网络信息的传送都是建立在这个协议栈之上。这个很好理解,网线里面传送的是0和1的二进制,我们怎么把文件转成二进制数据,发送出去,对方又怎么把二进制数据恢复成对应的文件,这之间肯定是需要一套规则的。

除了TCP/IP,我们经常接触的是HTTP协议,在浏览器中访问网页用到的就是该协议。总的来说,对于计算机网络的学习,根本上就是网络协议的学习。这里不对具体协议进行展开讲解,大家只需要知道,一些特殊协议需要对应特定的端口就行。例如,HTTP协议默认使用的端口号是80HTTPS则是443

域名与IP

不知道大家有没有这样一个疑问,我们一直强调网络上IP地址是计算机的唯一标识,那为什么我们访问网站的时候输入的是域名而不是服务器的IP地址呢?回答这个问题之前,我们先了解一下什么是域名。

域名(Domain Name),简称域名或网域,它是一串用点分隔的名字。如下网址中,红色部分就是域名,在红色部分之前的蓝色部分则是协议。这里的协议是https,协议与域名之间使用英文冒号和两个斜杠分隔。

这里我要问一个问题,大家觉得是IP地址好记忆还是域名好记忆呢?答案当然是域名咯,比起毫无意义的IP地址,域名则好记多了。也正是这个原因,域名才会出现。域名和IP地址其实是一一对应的。实际上我们在打开网站的时候有两个步骤,第一步是查询域名对应的IP地址是多少,第二步则是访问这个IP地址对应的服务器。我们仍然以访问百度为例

所谓DNS,即Domain Name System,域名系统。这个DNS服务器里面其实放的就是一张张的表,每一个域名就对应一个IP地址,查询DNS就跟查字典一样。有人说上个网至于搞两个步骤这么麻烦么,其实这还不是为了方便各位记忆网站地址嘛。当然,域名也是一个商标,是一个品牌,以后我网站的IP地址可能会变,但是域名不会变呀,我只需要让DNS服务器里那张表中域名对应的IP地址修改成新的就好了,用户输入域名照样能访问我网站,多么灵活的一波操作!

咱们学了这个知识,就能明白,为什么有时候我们电脑的QQ可以聊天,但是网页死活打不开了吧!这其实就是DNS出了问题,要么是大家电脑上DNS服务器的IP地址配置不正确,访问不了DNS,那更不用说去查域名的IP了;要么就是DNS服务器挂了,这会造成大面积的用户无法打开网站。有时候我们网速很快,但是打开网页却很慢,这也可能是DNS的锅,半天查不到域名对应的IP,当然打不开网站啦。

最后,有些心思灵活的人想,如果我知道网站的IP地址,是不是可以通过IP直接打开该网站,而不经过DNS这一道呢?答案是可以的,下面就告诉大家怎么查看域名对应的公网IP。

打开Windows上面的cmd命令行,输入命令ping www.baidu.com,注意是ping + 域名,就能查看到域名对应的IP了。

在浏览器中要输入IP:端口,我们浏览器中只需要输入域名,不需要指定端口,这是因为http协议已经默认指定了端口80,如果我们手动输入IP地址,则需要手动指定 14.215.177.38:80

通过IP地址,我们成功打开网页。

原文发布于微信公众号 - 编程之路从0到1(artofprogram)

原文发表时间:2019-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券