制作网络

为了使网络发挥作用,我们需要几种不同的东西。

1. 对信息进行编码和解释的方法

希腊人:"阿伽门农到了 "的具体烟雾信号

互联网:信息比特电子/光子

任何信息都可以用比特编码,然后将比特编码在电线上。这种编码的实际工作原理是相当复杂的,这不是本课要讲的内容。有很多不同的方法可以做到这一点。

2. 一种路由消息的方法

希腊人:引导烟雾信号

互联网:路由器想出下一步的办法

对于路径上的所有路由器来说,一个消息进来,路由器要决定往哪里发。也许路由器有一个表,说下一步要把它发到哪里。Nirvada正在从加州去波士顿的路上,所以它可以把消息从加州发到Nirvada,但在 traceroute 中并不是这样的。消息被送到了圣何塞,那里有一条横贯全国的大强管直通纽约,然后从那里把消息继续送到波士顿。

3. 决定谁能使用资源的规则

希腊人:将军有优先权

互联网:尽力服务

与希腊人不同的是,互联网上并没有关于谁获得资源的真正规则。它更像是一个狂野的西部世界,网络上的每一个地方都可以自己决定适用什么规则。这就是所谓的尽力而为服务。如果一个路由器需要同时发送两个消息,路由器就会决定发送哪一个。这意味着,你的包裹可能会被丢弃。无法保证一个包裹能在互联网上到达目的地。

协议

协议是人们同意的一套规则,它决定了两个实体如何相互对话。

对于网络来说,协议给出了关于客户端和服务器如何相互对话的规则。客户端是网络浏览器,服务器是网络服务器。

Python编程第十一课 制作网络和协议

网络上使用的协议叫做超文本传输协议,简称为HTTP。

当你在浏览器中查看时,几乎所有使用的URL都以http开头。

这说明当页面被请求时,要和服务器对话的协议就是这个超文本传输协议。

这是一个非常简单的协议,只有两个主要的消息。

其中一个消息就是GET。客户端可以向服务器发送一条消息,上面写着GET,后面写着你要得到的对象的名字,

GET <object>。这就是客户端所做的一切。get_page 的python代码。

def get_page(url):
 try:
     import urllib
     return urllib.urlopen(url).read()
 except:
     return ""

调用一个库函数 urllib.urlopen(url),它实际上是这样做的。

客户端发送消息后,服务器会接收到它。服务器在上面运行一些代码,找到被请求的文件,也许再运行一些代码,然后发回一个包含请求的 <object> 内容的响应。这就是整个协议。

Python编程第十一课 制作网络和协议

如果你在浏览器中点击一个链接,你的网络浏览器会找出您请求的网址,并向该网址指定的正确网络服务器发送GET消息。当它得到一个响应,它处理,然后渲染它。

结论

希望你能在一个较高的层次上理解网络浏览器在通过互联网请求数据时的作用。它并没有什么神奇的地方。

这个过程就是在互联网上发送消息,并接收响应,这些响应是文本。这些文本由浏览器,甚至由你编程的网络爬虫来处理。

到目前为止,搜索引擎还能用,但它并不快,也不智能。

在接下来的内容中,你会看到如何使搜索引擎的规模和响应查询的速度更快。你还将看到学习如何找到对查询的最佳响应,即用最好的页面而不是所有的页面来响应。

顺便也给大家补补网络状态码的几个小常识:

有时候大家在输入一个网站之后,会出现一些4XX之类的报错。

今天就给大家梳理一下这些代表什么意思。

Python编程第十一课 制作网络和协议