计算机网络概论#
互联网的所有设备都有一个IP地址。
IP地址的格式:x.x.x.x,每个x都是一个8位二进制数。所以IP地址由32位二进制数组成。
域名是IP地址的别称,为了方便人类记忆。比如Google主页的IP地址之一172.217.25.14,域名是google.com。
DNS服务器里存储域名和IP地址的对应关系。
可以通过nslookup命令来查找域名对应的IP地址。如果你用Mac,在Launchpad里面搜索”Terminal”。如果你用的是Windows,在开始菜单中搜索”cmd”进入终端。输入”nslookup google.com”,显示类似如下结果:(返回的IP地址可能不同,与电脑配置的DNS服务器有关)
nslookup google.com
Server: 10.10.0.215
Address: 10.10.0.215#53
Non-authoritative answer:
Name: google.com
Address: 172.217.25.14
路由器的作用是对数据进行转发,类似物流公司根据目的地对包裹进行中转。
可以通过traceroute命令来观察数据的路径。如果你用Mac,在终端里面输入”traceroute google.com”; 如果你用Windows,在终端里面输入”tracert google.com”。
网络协议#
终端#
终端和我们日常用的浏览器一样,本质也是一段程序。只不过这个程序可以对电脑做更多的事情。
终端的界面对于某一类人群非常友好,比如工程师、科研工作者等。但对于我们普通用户来说,我们更习惯于用浏览器浏览网页。
浏览器的本质也是一段程序。网络通信实际上是程序和程序之间的通信。
客户机-服务器模型#
Google.com本质也是一段程序,这段程序在google的服务器上运行。
访问google.com时,浏览器作为一个客户机(Client)向google的服务器发出一个请求。Google服务器(Server)响应请求并将搜索的结果返回给客户机。

可以类比我们平常去餐馆吃饭。我们点菜的时候,是作为客户在消费。我们作为消费者,角色相当于客户机,餐馆则作为服务器提供服务。一个餐馆同一时段可能要服务很多客户。同样,一台服务器同时也会处理很多客户机的请求。
客户机-服务器模型是现代互联网的基本架构。客户机之间交流需要通过服务器进行。现代互联网是以服务器为中心来运行的。

.. image:: server.png :scale: 50%
HTTP#
HTTP:Hyper Text Transport Protocol,超文本传输协议。HTTP是一整套客户机和服务器之间的通信规范。
我们访问google.com,可以类比浏览器向google服务器发了一封信。信封上面除了寄信和收信地址以外,还有如下两行:
GET / HTTP/1.1 HOST: www.google.com
GET表示浏览器希望从google服务器获取信息,HTTP/1.1表示浏览器访问google使用的是HTTP协议的1.1版本。HOST一行代表浏览器希望访问的服务器域名。
google服务器回复了一封非常长的信。信封上面的前两行是:
HTTP/1.1 200 OK Content-Type: text/html
信封上的信息(不管是寄信还是收信)称作HTTP header。它里面包含了寄信人和收信人的一些基本信息。日常生活中,我们寄快递需要填一个单子,收信人和寄信人是谁,里面是什么类型的物品,大概有多重,需要怎么运输,是陆运还是空运……
200是HTTP的状态码,表示浏览器的请求进行顺利。
HTTP的状态码还有很多,一些常用的状态码列举如下:
200: OK
301: Moved Permanently
302: Found
307: Temporary Redirect
401: Unauthorized
403: Forbidden
404: Not Found
500: Internal Server Error
301、302、307的含义是类似的,都意味域名资源已经改变了位置。服务器通常会发送HTTP Location来重新定向到新的位置。
在Chrome浏览器中我们可以记录并观察每一条网络请求的相关信息。进入chrome之后,鼠标右键->inspect->Network,然后点击Preserve Log(记录所有网络请求)。

在浏览器地址栏中输入google.com,你会看到工具栏中出现了很多请求。其中第一个请求状态码是301,表示google.com对应的域名资源已经改变了位置,新的域名在Response Headers中的Location里面。

.. image:: 301.jpeg :scale: 50%
浏览器又向新的域名发了一次请求。第二个请求的状态码是307。意味着第一个请求返回的新的域名资源依然不存在,服务器又返回一个新的地址。

浏览器又向新的域名发了一次请求。第三个请求的状态码是200。意味着新的域名资源是存在的,并且返回相应的网页。
我们可以看到访问Google主页,浏览器总共向服务器发送了63次请求。

去中心化浪潮#
我们每天都在使用互联网公司提供的服务,比如通过微信服务器聊天,通过钉钉服务器上网课,通过淘宝和京东服务器网购。
中心化的服务器为我们的生活提供了很多便利,但也带来了很多问题,包括隐私、安全、成本昂贵、垄断等等。
现在科技界兴起一波“去中心化”的浪潮,目的是打破大公司的服务器在互联网中的垄断地位。
典型去中心化技术包括P2P和Blockchain。
WWW#
www是world wide web的缩写,中文又称做万维网。在互联网刚刚兴起时网站很少,为了区别于其它网络服务(如邮箱服务),很多网站习惯在域名前面加上www。
www.qq.com是qq.com的子域名。qq.com的其它子域名还包括mail.qq.com(qq邮箱)、live.qq.com(企鹅直播)、auto.qq.com(腾讯汽车)……
作业#
完成作业:
请查找自己计算机的IP地址,在本题下方放上屏幕截图。
打开终端(Windows是cmd),用nslookup命令查找下列域名对应的IP地址,并在下方放上屏幕截图。
请用traceroute(Mac)或者tracert(Windows)命令来追踪从你的电脑到任意一个国外大学的服务器的网络路径,放上屏幕截图并回答下列问题:
a. 请描述路径经过的地理位置,以及传输所需要的时间
b. 第一个路由器的ip地址是多少?你认为第一个路由器在哪里?
对于traceroute命令,你可以查看:https://www.fortinet.com/cn/resources/cyberglossary/traceroutes
HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:
信息响应 (100–199)
成功响应 (200–299)
重定向消息 (300–399)
客户端错误响应 (400–499)
服务端错误响应 (500–599)
访问以下网站,通过浏览器中的开发者工具来查看网络请求和相应。其中最主要的状态码是什么?状态码在这里的作用是什么?
提交方式:每位同学提交一份Word文档,截止本周日晚10点。