admin管理员组文章数量:1652188
引言
在这篇文章中,我主要对 Computer Networking: A Top-Down Approach (6th Edition) 一书进行总结。
Computer Networks and the Internet
对于第一次接触网络的人来说,会感觉到第一章的内容又杂又多,而且对于某些概念来说,很不容易理解,幸亏作者将文章写得通俗易懂,并搭配很多有助于理解的插图,以及例举出生动的现实生活中的例子去理解一些复杂的概念,相信我你一定会爱上这本书的!
这章中以一个 overview 的形式去讲述网络,这就会导致涉及很多的概念,比如构成网络所需要的软件与硬件,网络的发展历史等,但是概念并不会很深入,因此这章我并不准备去用文字做总结,而是用 Xmind 画了一张图,把这章的重要概念穿插起来,具体的细节我会标明页数参考书即可。
由于上面只是我导出的图片,大家会看不到要相应的备注,为了方便大家阅读并根据自己的意愿去修改总结的内容,我已经把源文件上传到 github,以供大家参考。
思维导图源文件
Application Layer
Overview
这章是关于整体的概述,大致内容如下图:
思维导图源文件
网络中的电子邮件
在这个小节中,作者主要介绍了 Email 中应用广泛的几个协议。下图中是 Internet 邮件系统的大致结构。
下图是 Alice 和 Bob 之间是如何发送邮件的,它主要分为以下6个步骤:
- Alice 运行起它的 user agent,比如 Foxmail,然后用它写一封邮件给 Bob,完成以后命令 Foxmail 把这封邮件发送出去
- Alice 的 Foxmail 把邮件发送到她的 Mail server,放到消息队列中
- Alice 的 mail server 中运行的 SMTP 客户端看到消息队列中的消息后,它打开了一个 TCP connection 到 Bob 的 mail server 中运行的 SMTP 服务端
- 在一些 initial SMTP handshaking 后,SMTP 客户端发送 Alice 的信息到 TCP connection 中
- 当 Bob 的 mail server 中运行的 SMTP 服务端收到消息后,把消息放入到 Bob 的 mailbox 中
- 等 Bob 方便的时候,他用自己 PC 上的 user agent 从 server 中读取邮件
我们可以看到上面的过程中涉及到几个重要的协议,它们分别是 SMTP,POP3,IMAP,和HTTP. 我觉得协议本身并没有什么可说的,大家可以去官方看看这些协议都是怎么定义的,都实现什么样的命令,如何交互的。下面我主要来说一下几个协议之间的区别,这样大家在选择的时候就不会感到困惑。
对于 SMTP 来说,有一点大家应该知道:在用 SMTP 发送邮件的时候,正常情况它不会用中间的 mail server,即使发送者和接收者2人的 mail server 分别在世界的2端。如果 Bob 的 mail server 挂掉了,信息依然会保存在 Alice 的 server 中,隔一段时间过后,它会继续尝试发送给 Bob 的 server,消息始终不会放到一些中间的 mail server 上。
下面我介绍一下 POP3 和 IMAP 协议之间的区别。当一个基于 POP3 协议的 TCP connection 建立之后,POP3 会进行以下个阶段:
- authorization : user agent 发送用户名和密码到 server 进行授权
- transaction : user agent 获取邮件信息
- update: 这个阶段发生在客户端发布 quit 命令之后
在第2个阶段中,POP3 有2个模式可以配置,它们分别是 download and keep 和 download and delete. 如果你只用一个客户端去读取邮件,那么你可以选择 download and delete 模式,它在 update 阶段的时候会把你的邮件从 mail server 中删除,这样你可以节省 mail server 的空间。但是,如果你有1多个客户端想读取邮件,你就应该用 download and keep 模式,它在 update 阶段过后并不会从 mail server 上删除掉你的邮件。
想像一下这样一种场景,你从 mail server 上获取到相应的邮件信息之后,你会归纳整理一下,比如创建几个文件夹,把不同的要邮件放到不同的文件夹中,如果你用 POP3 协议,你的做法会只保留在你当前的机器上,如你换个机器从 mail server 上下载邮件,你的先前的归类并不会在这个机器上看到,而 IMAP 协议就可以解决这个问题。
IMAP server 不仅可以维护用户的状态信息,同时它也可以允许 user agent 获取信息的部分组件,比如它可以只获取信息的信息头。
DNS — The Internet’s Directory Service
我们可以通过多种方式来识别 Internet 中的某个 host,比如可以通过 hostname 或 IP addresses,对于人类来说 hostname 要相对容易记住,比如:www.baidu,但是相信大家很难记住 IP addresses 吧,比如:111.13.100.91,而对于 routers 来说,它更容易处理 fixed-length, hierarchically structured IP addresses,因此我们需要一个服务可以做到 hostnames 与 IP addresses 之间的转换,DNS(domain name system) 的主要任务就是这个。
DNS 是一个应用层的协议,它用 UDP 作为传输层协议,端口号为 53,一些其它的应用层协议(比如:HTTP,SMTP和FTP)通常利用 DNS 去转换用户指定的 hostnames 到对应的 IP addresses. 下面我举个例子,比如一个用户在浏览器中输入 www.baidu 之后,按下 enter ,使用 DNS 的过程如下:
- The same user machine runs the client side of the DNS application
- The browser extracts the hostname, www.baidu, from the URL and passes the hostname to the client side of the DNS application
- The DNS client sends a query containing the hostname to a DNS server.
- The DNS client eventually receives a reply, which includes the IP address for the hostname
- Once the browser receives the IP address from DNS, it can initiate a TCP connection to the HTTP server process located at port 80 at that IP address
下图是互联网上的 DNS servers 的分层结构图:
除了上图中这3种 DNS server 外,还有一种重要的 DNS server,它就是 local DNS server,严格来讲,它并不属于上图中的任一层级,但是它是整个 DNS 架构中很重要的一部分。一个 host 的 local DNS server 通常都会离它“很近”,比如:For an institutional ISP, the local DNS server may be on the same LAN as the host; for a residential ISP, it is typically separated from the host by no more than a few routers. When a host makes a DNS query, the query is sent to the local DNS server, which acts a proxy, forwarding the query into the DNS server hierarchy.
下图是书中给出的一个例子,cis.poly.edu 这个 host 想要知道 gaia.cs.umass.edu 的 IP 地址,因此它需要寻求 DNS servers 的帮忙,整个过程的步骤如下:
- host 首先发送一个 DNS query message 到它的 local DNS server
- local DNS server 把这个 query message 转发给 root DNS server
- root DNS server 根据 edu 这个后缀,返回一系列负责 edu 的 TLD servers 的 IP 地址给 local DNS server
- local DNS server 再次发送 query message 到其中的1个 IP 地址
- TLD server 根据 umass.edu 返回一个 authoritative DNS server 的 IP 地址
- local DNS server 再次发送 query message 到这个 authoritative DNS server 去获取它想要的 IP 地址
- 最后,authoritative DNS server 返回给它 gaia.cs.umass.edu 的 IP 地址
下图中的整个过程既用了 iterative queries,也用了 recursive queries.
如果整个 DNS 系统能根据相应的主机域名查到对应的 IP 地址,那么在它的数据库中一定会有相应的 DNS 记录,即 resource records (RRs),它提供了 hostname-to-IP address 的映射。每个 RRs 是一个包含下面4个 field 的 four-tuple:
(Name, Value, Type, TTL)
- 如果 Type=A,那么 Name 是一个 hostname,Value 是一个 IP address for the hostname
- 如果 Type=NS,那么 Name 是一个 domain(比如:baidu),Value 是一个 authoritative DNS server 的 hostname(比如:dns.baidu),这个 server 知道如何获取 IP addresses for hosts in the domain
- 如果 Type=CNAME,那么 Name 是一个 alias hostname,Value 是一个 canonical hostname
- 如果 Type=MX,那么 Name 是一个 alias hostname,Value 是一个 mail server 的 canonical hostname
TTL is the time to live of the resource record; it determines when a resource should be removed from a cache.
下面我来举个例子,来打通整个上面的知识点。假设我在万网买了个域名,diaosi.me,在某个服务器提供商买了个虚拟主机,这个提供商通常给你一个难记的域名(比如:relay1.west-coast.enter-prise),让你去做 CNAME 解析,那么这个比较恶心的要域名叫做 canonical hostname,而 diaosi.me 就叫做 alias hostname,那么大家仔细想一下,为什么是 CNAME 解析呢?如果商家要给你1个 IP 地址,让你去做 A 解析不行吗?假设出于什么原因,你当前的主机必须要换个 IP 地址,如果你整个主机上的所有客户全是 A 解析,那么你必须通知他们要重新进行解析,而如果是 CNAME 的解析,你完全不需要通知你的客户们,你只需要把 relay1.west-coast.enter-prise 重新用新的 IP 地址进行 A 解析就可以了。
经过我一番苦心经营,我的网站(diao.me)为我挣了一大笔钱,现在我要做更大的生意,我想建一个 authoritative DNS server(假设 IP 地址为:212.212.212.1,主机名为:dns.tuhao),然后让其他人在我这里买域名,干掉万网,哈哈。假设,现在有一个土豪在我这买个域名(tuhao.me),在其它地方买了个独立的服务器(假设 IP 地址为:131.278.234.23)。接下来,我需要让我的 TLD 插入2条记录到他们的 DNS server 中,它们分别是:
(tuhao.me, dns.tuhao, NS)
(dns.tuhao, 212.212.212.1, A)
而这个土豪要做的就是在我的 authoritative DNS server 上插入下面这条记录:
(tuhao.me, 131.278.234.23, A)
这样,当有人访问 tuhao.me 时,通过上图中的那些 DNS query 过程,就可以顺利地找到相应的服务器了,随着我的客户越来越多,我就变得越来越有名了,哈哈。
DNS query 和 reply messages 它们具有相同的格式,书中140页详细介绍了每1个字节所表达的含义,我们可以用 nslookup 程序很容易地发送 query messages 到 DNS server,大家可以动手尝试一下。
Peer-to-Peer 应用
Web, e-mail, 和 DNS 所有这些应用都是基于 client-server 架构的,在这个章节中作者主要介绍了 P2P 架构在 file distribution 中的应用,不同于 CS 架构,在 P2P file distribution 的过程中,每个 peer 可以把它自己收到的文件的任一部分传递给其它的 peers,从而它在这个文件和分发过程中起到了辅助 server 的作用。下面举个具体的例子看看 P2P 架构相比于 CS 架构在 file distribution 应用中有什么优势。
从上图中我们可以看到总共有 N 个 peer 想要下载1个 F bits 的文件,第 i 个 peer 的 access link 上载速度为 ui ,下载速度为 di ,server 的 access link 上载速度为 us ,我们同时也假设所有的瓶颈都在 access link,并且 server 和 client 完全不参与任何其它的网络应用中,现在让我们分别计算一下各个架构的 distribution time(the time it takes to get a copy of the file to all N peers).
对于 client-server 架构来说,由于没有任何的 peers 来辅助 server 分发文件,所以我们有如下2个事实:
- The server must transmit one copy of the file to each of the N peers. Thus the server must transmit
NF bits. Since the server’s upload rate is us , the time to distribute the file must be at least NFus - Let dmin
本文标签: NetworkingcomputerApproachTOP
版权声明:本文标题:Computer Networking A Top-Down Approach 总结 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729579115a1207389.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论