Computer Networking A Top

编程入门 行业动态 更新时间:2024-10-06 01:41:45

<a href=https://www.elefans.com/category/jswz/34/1770063.html style=Computer Networking A Top"/>

Computer Networking A Top

引言

在这篇文章中,我主要对 Computer Networking: A Top-Down Approach (6th Edition) 一书进行总结。

Computer Networks and the Internet

对于第一次接触网络的人来说,会感觉到第一章的内容又杂又多,而且对于某些概念来说,很不容易理解,幸亏作者将文章写得通俗易懂,并搭配很多有助于理解的插图,以及例举出生动的现实生活中的例子去理解一些复杂的概念,相信我你一定会爱上这本书的!

这章中以一个 overview 的形式去讲述网络,这就会导致涉及很多的概念,比如构成网络所需要的软件与硬件,网络的发展历史等,但是概念并不会很深入,因此这章我并不准备去用文字做总结,而是用 Xmind 画了一张图,把这章的重要概念穿插起来,具体的细节我会标明页数参考书即可。

由于上面只是我导出的图片,大家会看不到要相应的备注,为了方便大家阅读并根据自己的意愿去修改总结的内容,我已经把源文件上传到 github,以供大家参考。

思维导图源文件

Application Layer

Overview

这章是关于整体的概述,大致内容如下图:

思维导图源文件

网络中的电子邮件

在这个小节中,作者主要介绍了 Email 中应用广泛的几个协议。下图中是 Internet 邮件系统的大致结构。

下图是 Alice 和 Bob 之间是如何发送邮件的,它主要分为以下6个步骤:

  1. Alice 运行起它的 user agent,比如 Foxmail,然后用它写一封邮件给 Bob,完成以后命令 Foxmail 把这封邮件发送出去
  2. Alice 的 Foxmail 把邮件发送到她的 Mail server,放到消息队列中
  3. Alice 的 mail server 中运行的 SMTP 客户端看到消息队列中的消息后,它打开了一个 TCP connection 到 Bob 的 mail server 中运行的 SMTP 服务端
  4. 在一些 initial SMTP handshaking 后,SMTP 客户端发送 Alice 的信息到 TCP connection 中
  5. 当 Bob 的 mail server 中运行的 SMTP 服务端收到消息后,把消息放入到 Bob 的 mailbox 中
  6. 等 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 会进行以下个阶段:

  1. authorization : user agent 发送用户名和密码到 server 进行授权
  2. transaction : user agent 获取邮件信息
  3. 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,比如可以通过 hostnameIP 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 的过程如下:

  1. The same user machine runs the client side of the DNS application
  2. The browser extracts the hostname, www.baidu, from the URL and passes the hostname to the client side of the DNS application
  3. The DNS client sends a query containing the hostname to a DNS server.
  4. The DNS client eventually receives a reply, which includes the IP address for the hostname
  5. 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 的帮忙,整个过程的步骤如下:

  1. host 首先发送一个 DNS query message 到它的 local DNS server
  2. local DNS server 把这个 query message 转发给 root DNS server
  3. root DNS server 根据 edu 这个后缀,返回一系列负责 edu 的 TLD servers 的 IP 地址给 local DNS server
  4. local DNS server 再次发送 query message 到其中的1个 IP 地址
  5. TLD server 根据 umass.edu 返回一个 authoritative DNS server 的 IP 地址
  6. local DNS server 再次发送 query message 到这个 authoritative DNS server 去获取它想要的 IP 地址
  7. 最后,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

更多推荐

Computer Networking A Top

本文发布于:2024-02-13 07:11:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757350.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Computer   Networking   Top

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!