这篇博文是记录学习udacity的课程http & web servers的第四篇。
Hostnames
一个完整的 HTTP 或 HTTPS URI包含网络服务器的主机名,比如 www.udacity.com 或者 www.un.int 或者 www.cheeseboardcollective.coop 。URI的主机名也可以是一个IP地址。
如果在浏览器键入:http://216.58.194.174/ 会访问Google。
为什么叫做主机名?
在网络术语中,一个主机就是在网络上的一台能够托管服务的电脑。
互联网通过IP地址区分不同的电脑;互联网上每一次的网络通讯,都标记了发送和接收方的IP地址。为了连接到一个网络服务器,比如 www.udacity.com , 客户端需要将其主机名转换为IP地址。我们的操作系统网络配置使用域名服务(Domain Name Service) - 由互联网服务提供商 (isp) 和其他网络用户维护的一组服务器 - 查找主机名,获取IP地址。
在终端,我们可以使用 host 程序在DNS中来查找主机名。
在终端中输入 host www.google.com ,输出如下:
www.google.com has address 66.220.152.28
www.google.com has IPv6 address 2404:6800:4008:800::2004
在终端中输入 host www.baidu.com ,输出如下:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.121
www.a.shifen.com has address 61.135.169.125
在浏览器地址栏输入百度的IP地址: 61.135.169.125 或 61.135.169.121 会访问百度的主页。
有一些系统没有 host 命令,但有一个类似的命令叫做 nslookup 。这个命令也会展示你给出的主机名的IP地址,它还会显示给出答案的DNS服务器的IP地址。
我的测试结果:
june:~ june$ nslookup www.google.com
Server: 192.168.1.150
Address: 192.168.1.150#53
Non-authoritative answer:
Name: www.google.com
Address: 31.13.71.23
june:~ june$ nslookup www.baidu.com
Server: 192.168.1.150
Address: 192.168.1.150#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.125
Name: www.a.shifen.com
Address: 61.135.169.121
localhost 的 IPv4 地址是什么?
用 host 或者 nslookup 在终端测试一下。
答案:127.0.0.1
有两种不同的IP地址:老的 IPv4 和 新的 IPv6 。
如果你看到一个地址如 127.0.0.1 或者 216.58.194.164 ,这些是IPv4地址。
IPv6地址要长一些,如 2607:f8b0:4005:804::2004 ,但是这些地址可以缩写。
Localhost
IPv4地址 127.0.01 和IPv6地址 ::1 是特定的地址,指这台电脑自己。主机名 localhost 指代的就是这些特定的地址。
当运行示例服务器的时候,会打印出一条消息,正在监听 0.0.0.0 端口。这不是一个常规的IP地址。相反,它是一个特定的编码,指代”这台电脑上的所有IPv4地址”,包含 localhost ,也包含你电脑的常规IP地址。
Ports
当你告知浏览器连接到示例服务器,你在浏览器输入URI http://localhost:8000 。这个URI有一个端口号:8000 。但你在自然环境中看到的大部分网络地址上是没有端口号的。这是因为客户端通常可以通过URI方案知道端口号。
例如,HTTP URIs意味着端口号为 80 ,而HTTPS URIs意味着端口号为 443 。你的python示例服务器运行在8000端口。因为这不是默认的端口号,所以我们需要在URI中指明其端口号。
到底什么是端口号? 为了了解这个,我们需要先知道互联网是如何工作的。电脑发送和接收的所有的网络通信 - 从网络请求到登录回话,再到文件共享等 - 消息都被拆分为数据包。每个包都有发送方和接收方电脑的IP地址。也有发送方和接收方的端口号(某些低级的数据包,比如ping例外)。IP地址区分电脑;端口号区分这些电脑上的程序。
我们说服务器“监听”某个端口,比如 80 或者 8000,“监听”意味着服务器开启了,它告知操作系统它想要在某个特定端口接收客户端的连接。当一个客户端,比如一个网络浏览器,“连接”到这个端口,发送一个请求,操作系统知道将该请求转发到服务器监听的端口。
为什么我们的示例服务器使用 8000 端口而非 80 端口?由于历史原因,操作系统只允许管理员(或者根)账号监听1024之下的端口。这对于生产网络服务器没有问题,但对于学习不太方便。
想了解更多关于地址,端口和互联网的运作,可查看该课程 Web 开发者的网络入门