计算机网络Chapter 2读书笔记

0

一些基本概念

socket

计算机网络课程中会经常提到socket,但一个socket的含义可以有很多种,有些同学会经常弄混。以下对socket的解释摘自谢希仁老师的《计算机网络》一书。

socket的含义:

  • 允许应用程序访问联网的应用编程接口API,称为socket API,是连接application layer和transport layer的门,自顶向下这本书的socket就是指这个意思。
  • 端口号拼接到IP地址即做socket或插口。
  • socket API中使用的一个函数名也叫做socket。
  • 调用socket函数时,其返回值称为socket描述符,简称为socket。

Web和HTTP

HTTP是采用TCP协议的应用层协议。它是一个无状态(stateless protocol),因为它不保存关于客户的任何信息。(平时我们的浏览器是用什么方式保存我们的信息的?)
每个请求/响应是经一个单独的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送?前者是非持续连接(non-persistent connection),而后者是持续连接(persistent connection)。

三次握手

在浏览器和Web服务器之间发起一个TCP连接,涉及一次三次握手过程,所谓三次握手就是:

  1. 客户向服务器发送一个小TCP报文段请求连接。
  2. 服务器用一个小TCP报文段做出确认和响应。到这里占用了一个RTT。
  3. 客户向服务器请求文件。

而总的响应时间还应包括:

  1. 服务器发送文件的传输时延。
  2. 服务器向客户发送数据的时间。

所以,总的响应时间就是两个RTT加上服务器传输HTML文件的时间(传输时延)。

HTTP的报文格式

HTTP请求报文

下面提供了一个典型的HTTP请求报文:

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

HTTP请求报文的第一行叫做请求行(request line),其后继的行叫做首部行(header line),HTTP请求报文的通用格式如下:

0

HTTP响应报文

下面提供了一个典型的HTTP响应报文:

HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)

前面提到HTTP服务器本身是无状态的(stateless),然而Web站点通常希望能够识别用户(比如购物界面就不希望点击其它网页后购物车里的东西都没了),目前大多数商务Web站点都使用了cookie。

使用cookie是一个这样的过程:

  1. 客户请求访问 Amazon Web服务器发送请求报文。
  2. 报文到达Amazon Web服务器后,该Web站点为此客户产生一个唯一的识别码并以此作为索引在它的后端数据库中产生一个表项。
  3. 服务器发送响应报文,此响应报文会将用户浏览器中此站点的cookie设为唯一的标识符,由用户浏览器进行管理。
  4. 客户第二次访问Amazon Web服务器,此时的请求报文会带着自己的cookie信息,也就是说服务器知道客户是之前的那个人,于是产生了特定动作。

Web缓存

Web缓存器(Web cache)也叫代理服务器(proxy server),我们可以通过配置用户的浏览器,使得用户所有的HTTP请求首先指向Web缓存器。举例来说:

  1. The browser establishes a TCP connection to the Web cache and sends an HTTP request for the object to the Web cache. 浏览器向代理服务器发送HTTP请求。
  2. The Web cache checks to see if it has a copy of the object stored locally. If it does, the Web cache returns the object within an HTTP response message to the client browser. 如果代理服务器有缓存,直接返回该对象。
  3. If the Web cache does not have the object, the Web cache opens a TCP connection to the origin server, that is, to www.someschool.edu. The Web cache then sends an HTTP request for the object into the cache-to-server TCP connection. After receiving this request, the origin server sends the object within an HTTP response to the Web cache. 如果代理服务器没有该页面的缓存,由该代理服务器发送一个对该对象的HTTP请求。
  4. When the Web cache receives the object, it stores a copy in its local storage and sends a copy, within an HTTP response message, to the client browser (over the existing TCP connection between the client browser and the Web cache). 当代理服务器接受到该对象时,在本地存储一个副本,并发送到客户端。

Web缓存的作用有两点:

  • 对于客户来说,Web缓存器能够大大减少对客户请求的响应时间。
  • 对于整个因特网来说,Web缓存器能够大大减少一个机构的接入链路到因特网的通信量。

Web缓存给我们带来的作用是巨大的,但也引入了新的问题,即存放在缓存器中的对象副本可能是陈旧的。
幸运的是HTTP协议中有一种机制,允许缓存器证实它的对象是最新的,这种机制就是条件GET(conditional GET)方法。如果请求报文使用GET方法且包含一个If-Modified-Since首部行,那么这个HTTP请求就是一个条件GET请求报文。

意思就是说,Web缓存中会保存缓存页面时的时间,在这个时间后如果页面未曾修改过(由Web服务器告知),则发送此缓存。

文件传输协议:FTP

FTP和HTTP的异同

FTP和HTTP都是基于TCP的应用层文件传输协议,但这两个应用层协议也有一些重要的区别,其中最显著的就是FTP使用了两个并行的TCP连接来传输文件,一个是控制连接(control connection)(端口号21),一个是数据连接(data connection) (端口号20),因为FTP协议使用一个独立的控制连接,所以我们称FTP的控制信息是带外(out of band)传送的,HTTP则是带内(in band)传送的。
对于FTP传输而言,控制连接贯穿了整个用户会话期间,但是对会话的每一次文件传输都需要建立一个新的数据连接。FTP服务器必须在整个会话期间保留用户的状态(state)。

因特网中的电子邮件

因特网电子邮件系统主要由用户代理(user agent)、邮件服务器(mail server)、简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)组成。

  • 用户代理允许用户阅读、回复、转发、保存和撰写报文。
  • 邮件服务器接收邮件代理的报文并向其它邮件服务器转发。
  • 邮件服务器发送的协议是SMTP。

SMTP

SMTP是基于TCP协议的应用层协议。
SMTP有一个重要的特性:它一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。
下面分析一个在SMTP客户(C)和SMTP服务器(S)之间交换报文脚本的例子,客户的主机名是crepes.fr,服务器的主机名是hamburger.edu,以S:开头的ASCII码是服务器发送给TCP套接字的那些行,

S: 220 hamburger.edu
C: HELO crepes.fr
S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: <alice@crepes.fr>
S: 250 alice@crepes.fr ... Sender ok
C: RCPT TO: <bob@hamburger.edu>
S: 250 bob@hamburger.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with “.” on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection

类似于人们在互相交流前先进行自我介绍一样,客户和服务器之间先打招呼,HELO即是HELLO的缩写,打完招呼之后客户向服务器发送发送方邮件地址接收方邮件地址,然后发送DATA,以.结束。

SMTP与HTTP的对比

SMTP与HTTP相同的地方在于:

  • 它们都是基于TCP的应用层协议。
  • 它们都使用持续连接。

而不同的地方在于:

  • HTTP是一个拉协议(pull protocol),即从服务器上拉取信息,而SMTP是一个推协议(push protocol),即把文件推向服务器。
  • SMTP要求每个报文使用7bit ASCII码格式,而HTTP不受这种控制。
  • 在处理一个既包含文本又包含图形的文档时,HTTP把每个对象(单独)封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中。

邮件访问协议和邮件报文格式

邮件报文格式

就如同HTTP报文一样,邮件也有其格式,它的每个首部行包含了可读的文本,一些是必须的,一些是可选的。比如必须有两个首部行含有From:To:,也许包含一个Subject:或其它可选首部行。

邮件访问协议

接收方是如何通过它的用户代理获取邮件的呢?前面提到SMTP是一个推协议,而获取邮件确实一个的操作,我们可以通过一个特殊的邮件访问协议来解决这个难题。目前有一些流行的邮件访问协议:

  • 第三版的邮件协议(Post Office Protocol-version 3,POP3)
  • 因特网邮件访问协议(Internet Mail Access Protocol,IMAP)
  • HTTP

POP3

POP3是一个极为简单的邮件访问协议,当用户代理打开了一个到邮件服务器端口110上的TCP连接后,POP3开始工作,分为三个阶段:

  1. 特许(authorization),用户代理发送用户名和口令以鉴别用户。
  2. 事务处理阶段,用户代理取回报文,还能进行对报文做删除标记取消报文删除标记等操作。
  3. 更新阶段,在用户发出quit命令之后,结束该POP3会话。

IMAP

基于Web的电子邮件

DNS

主机(host)的一种标识方法是用它的主机名(hostname),这些名字便于记忆也乐于被人们接受,但是主机名几乎没有提供关于主机在因特网的位置的信息,而且主机名由不定长的字母数字组成,路由器难以 处理,所以,主机也可以使用所谓IP地址(IP address)进行标识,便于路由器处理。
而DNS(domain name system)则提供了一种能进行主机名到IP地址转换的目录服务。DNS是:

  • 一个由分层的DNS服务器(DNS server)实现的分布式数据库。
  • 一个使得主机能够查询分布式数据库的应用层协议。它运行在UDP之上,使用53号端口。

DNS的层次结构

为什么说DNS服务器是分层的且是分布式的?
大致来说,DNS服务器有三个类型:根DNS服务器、顶级域(Top-Level Domain,TLD)DNS服务器和权威DNS服务器。这些服务器以下图所示的层次结构组织起来。 0

为什么要使用分层分布式的结构呢?就只使用一个DNS服务器记录所有信息不行吗?使用一个DNS服务器的问题在于:

  • 单点故障(a single point of failure)。如果该DNS服务器崩溃,整个因特网随之瘫痪。
  • 通信容量(traffic volume)。因特网有着数量巨大的主机,单个DNS服务器处理不了这么多DNS查询。
  • 远距离的集中式数据库(distant centralized database)。如果只有一个DNS服务器,那么DNS服务器该放在哪呢?无论放在哪里都会有争议,位于该DNS服务器地球另一边的人们会有严重的时延。
  • 维护(maintenance)。单个DNS服务器不得不为所有的因特网主机维护一个数据库,这个数据库将非常庞大且难以维护。

图:2012年的DNS根服务器 0

除根、TLD和权威服务器外,还有一类重要的DNS,称为本地DNS服务器(local DNS server)。每个ISP都有一台本地DNS服务器,当主机发出DNS请求时,该请求首先被发往本地DNS服务器。

DNS查询

DNS查询有两种方式:迭代查询递归查询0 0

DNS提供的服务

除了主机别名的转换外,DNS还提供了一些重要的服务。

  • 主机别名(host aliasing)。有着复杂主机名的主机能拥有一个或者多个别名,就比如此网站,它有自己的规范主机名(canonical hostname):logos23333.github.io,它也有更容易记忆的别名:logos23333.top.
  • 邮件服务器别名(mail server aliasing)。
  • 负载均衡(load distribution)。一些繁忙的站点有多台服务器,为了避免某台服务器负载过重,DNS循环的用地址集合中的地址响应,这样就分配了负载。

DNS缓存

书上说DNS系统的一个非常重要的特色就是DNS缓存(DNS caching),但现在缓存技术已经大量被使用,根本算不上什么特色了,计算机有多级缓存,浏览网站有Web缓存,这种技术很简单容易也很高效。
在一个请求链中,当某DNS服务器接收一个DNS回答,它能够缓存包含在该回答中的任何信息,待到下一次被问到同样的问题时,就不必再向上或向下跑一趟,直接回答即可。

DNS记录和报文

DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射,它是一个包含了下列字段的4元组:
(Name,Value,Type,TTL)。
这部分内容之前我在尝试利用刚学的计算机网络知识对域名绑定和解析做出解释 已经提过了,就不多提了。

关于DNS报文,它只有查询和回答报文两种,格式如下: 0

P2P

什么是P2P?P2P和C/S有何不同之处?

P2P的全称叫peer to peer,简称P2P,书中介绍了两种应用P2P设计的应用,第一种应用是文件分发。其代表例子是BitTorrent协议,第二种应用是分布在大型对等方社区的数据库,其代表例子是分布式散列表(DHT)。 下面详细介绍第一种P2P文件分发。

P2P文件分发

如果只有一台主机需要某个资源,P2P比C/S并没有多少优势,但是随着下载某资源的主机越来越多,p2p文件分发的方式将带来巨大优势。 C/S的本质是每台主机在服务器端获取资源,而P2P的本质是当一台主机在服务器获取资源后可以自己当服务器分发给其它主机。这是一种“病毒式”的指数级的传播速度。

为什么越多人下载,下载速度越快?

对于用户而言,P2P一定比C/S快吗?不一定,前面提过了,如果就只有你在下载某个资源,你的下载速度就跟C/S一样。 那为什么越多人下载,下载速度越快呢?有多方面的原因。

  1. 有很多校园网用户会明显感觉到自己下载win10/ubuntu等操作系统镜像时速度奇快,这有可能是你的学校服务器本身有缓存这个资源,跟P2P无关。
  2. 跟P2P有关,当越多人下载这个资源,这个资源的服务器离你越近的概率也就越大,也就是说原本资源的服务器是在美国,你的舍友下载资源之后相当于服务器离你无限近,下载速度自然提高了,这时的速度受限于你的带宽。
  3. P2P本身是不强调个人的下载速度快慢的,而是强调此资源分发的速度,也就是总体速度。

吸血的迅雷

有人说迅雷是在“吸血”?这个说法从何而来呢?因为P2P的精神在于“人人为我,我为人人”,但是迅雷的P2P服务是只限于迅雷服务的,也就是说你可以从别处下载资源,但是此资源是只在迅雷用户间共享的,迅雷的资源是 不分享到外围的,就算这个资源是从外围来的。

TCP和UDP套接字编程

其实也就是模拟了主机间通信的过程,可以自行看书实现。

Exercise

R10

Q:What is meant by a handshaking protocol?

A:A protocol uses handshaking if the two communicating entities first exchange control packets before sending data to each other. SMTP uses handshaking at the application layer whereas HTTP does not.

R11

Q:Why do HTTP, FTP, SMTP, and POP3 run on top of TCP rather than on UDP?

A:The applications associated with those protocols require that all application data be received in the correct order and without gaps. TCP provides this service whereas UDP does not.

R13

Q:Describe how Web caching can reduce the delay in receiving a requested object. Will Web caching reduce the delay for all objects requested by a user or for only some of the objects? Why?

A:Web caching can bring the desired content “closer” to the user, possibly to the same LAN to which the user’s host is connected. Web caching can reduce the delay for all objects, even objects that are not cached, since caching reduces the traffic on links.

R15

Q:Why is it said that FTP sends control information “out-of-band”?

A:FTP uses two parallel TCP connections, one connection for sending control information (such as a request to transfer a file) and another connection for actually transferring the file. Because the control information is not sent over the same connection that the file is sent over, FTP sends control information out of band.

R16

Q: Suppose Alice, with a Web-based e-mail account (such as Hotmail or gmail), sends a message to Bob, who accesses his mail from his mail server using POP3. Discuss how the message gets from Alice’s host to Bob’s host. Be sure to list the series of application-layer protocols that are used to move the message between the two hosts.

A:The message is first sent from Alice’s host to her mail server over HTTP. Alice’s mail server then sends the message to Bob’s mail server over SMTP. Bob then transfers the message from his mail server to his host over POP3.

R18

Q:From a user’s perspective, what is the difference between the download-anddelete mode and the download-and-keep mode in POP3?

A:With download and delete, after a user retrieves its messages from a POP server, the messages are deleted. This poses a problem for the nomadic user, who may want to access the messages from many different machines (office PC, home PC, etc.). In the download and keep configuration, messages are not deleted after the user retrieves the messages. This can also be inconvenient, as each time the user retrieves the stored messages from a new machine, all of non-deleted messages will be transferred to the new machine (including very old messages).

R26

Q:In Section 2.7, the UDP server described needed only one socket, whereas the TCP server needed two sockets. Why? If the TCP server were to support n simultaneous connections, each from a different client host, how many sockets would the TCP server need?

A:With the UDP server, there is no welcoming socket, and all data from different clients enters the server through this one socket. With the TCP server, there is a welcoming socket, and each time a client initiates a connection to the server, a new socket is created. Thus, to support n simultaneous connections, the server would need n+1 sockets.