Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

计算机网络 – 应用层

域名系统DNS

早在 ARPANET 时代,整个网络上只有数百台计算机,那时使用一个叫做 hosts 的文件,列出所有主机名字和相应的 IP 地址。只要用户输入一台主机名字,计算机就可很快地把这台主机名字转换成机器能够识别的二进制 IP 地址。

互联网的域名系统 DNS 被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS 使大多数名字都在本地进行解析(resolve) ,仅少量解析需要在互联网上通信,因此 DNS 系统的效率很高。由于 DNS 是分布式系统,即使单个计算机出了故障,也不会妨碍整个 DNS 系统的正常运行。

域名

采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。这里,域是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。每一级域名都是一个标号

DNS 规定,每个域名有以下性质:

  • 域名中的标号都由英文字母,数字和连字符 “-” 组成

  • 每一个标号不超过 63 个字符
  • 不区分大小写字母
  • 级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。
  • 由多个标号组成的完整域名总共不超过 255 个字符。

顶级域名有下面几种:

  • 国家顶级域名 nTLD
  • 通用顶级域名 gTLD:com(公司企业), net(网络服务机构), org(非营利性组织), int(国际组织), edu(美国专用的教育机构), gov(美国的政府部门), mil 表示(美国的军事部门)等等。现在任何公司都可以申请顶级域名。
  • 基础结构域名(infrastructure domain):这种顶级域名只有一个,即 apa,用于反向域名解析,因此又称为反向域名。

我国把二级域名划分为“类别域名”和“行政区域名”两大类。(顶级当然是 cn 啦)

  • “类别域名”共 7 个,分别为:ac(科研机构), com(工、商、金融等企业), edu(中国的教育机构), gov(中国的政府机构), mil(中国的国防机构), net(提供互联网络服务的机构), og(非营利性的组织)。
  • “行政区域名”共 34 个,适用于我国的各省、自治区、直辖市。例如:hn(湖南省)等等。

域名服务器

一个服务器所负贵管辖的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。区是“域”的子集。

域名服务器有下面四种不同的类型:

  • 根域名服务器(root name server):到 2016 年 2 月,全世界已经在 588 个地点安装了根域名服务器,使用 13 个不同 IP 地址的域名,即 a.rootservers.net, b.rootservers.net, m.rootservers.net。 每个域名下的根域名服务器由专门的公司或美国政府的某个部门负责运营。

  • 顶级域名服务器(即 TLD 服务器)
  • 权限域名服务器
  • 本地域名服务器(local name server):打开网络的设置,里面的 DNS 服务器指的就是本地域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离。

DNS 的查询方式主要有迭代查询和递归查询:

  • 迭代查询

  • 递归查询(比较少用)

文件传送协议 FTP

FTP 除了使用 TCP 可靠的运输服务,主要功能是减少或消除在不同操作系统下处理文件的不兼容性

  • 存储格式不同
  • 目录结构和文件命名的规定不同
  • 操作系统的文件存取命令不同
  • 访问控制方法不同

工作原理

FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:

  • 一个主进程,负责接受新的请求
  • 若干个从属进程,负责处理单个请求

其中主进程的工作流程如下:

  1. 打开21号端口,等待客户进程的连接请求。
  2. 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
  3. 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的

TFTP

虽然TFTP 也使用CS方式,但它使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。TFTP 只支持文件传输而不支持交互。TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

TFTP 的主要优点有两个:

  • TFTP 可用于 UDP 环境。例如,当需要将程序或文件同时向许多机器下载时就往往需要使用 TFTP。
  • TFTP 代码所占的内存较小。

TFTP 的主要特点是:

  1. 每次传送的数据报文中有 512 字节的数据,但最后一次可不足 512 字节。
  2. 数据报文按序编号,从 1 开始
  3. 支持 ASCⅡ码或二进制传送。
  4. 可对文件进行读或写
  5. 使用很简单的首部

TELNET

TELNET 类似SSH,能将用户的输入传送,同时将主机的输出通过 TCP 返回用户。

TELNET 能够适应许多计算机和操作系统的差异。例如,对于文本中一行的结束,有的系统使用 ASCⅡ码的回车(CR),有的系统使用换行 (LF),还有的系统使用两个字符,回车-换行(CR-LF)。又如,在中断一个程序时,许多系统使用 (^C),但也有系统使用 ESC 按键。

为了解决这种差异,TELNET 定义了网络虚拟终端 NVT (Network Virtual Terminal)。客户软件把用户的击键和命令转换成 NVT 格式,并送交服务器。服务器软件把收到的数据和命令从 NVT 格式转换成远地系统所需的格式。向用户返回数据时,服务器把远地系统的格式转换为 NVT 格式,本地客户再从 NVT 格式转换到本地系统所需的格式。

万维网 WWW

概述

万维网 WWW (World Wide Web 并非某种特殊的计算机网络。万维网是一个由许多互相链接的超文本组成的系统,通过互联网访问。(通常浏览网页(HTTP)就是在使用万维网,而邮件、ftp、上qq等就不是在使用万维网,但是在用的是互联网。)

URL 统一资源定义符

Uniform Resource Locator,格式:

<协议>://<主机>:<端口>/<路径>


注意,URL里面的字母是不分大小写的(还可以写中文)

HTTP

HTTP 操作过程

HTTP 的默认端口号为80,所以一般来说端口号都被省略了。

http://<主机>:<端口>/<路径>


HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类 MIME”的响应组成。HTTP 报文通常都使用 TCP 连接传送。

HTTP 协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器。上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求。

HTTP/1.0 的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每次链接下载都导致 2 x RTT 的开销。另一种开销就是客户和服务器每次建立新的 TCP 连接都要分配缓存和变量。特别是服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使服务器的负担很重。好在浏览器都能够打开 5~ 10 个并行的 TCP 连接,而每一个 TCP 连接处理客户的一一个请求。因此,使用并行 TCP 连接可以缩短响应时间。

HTTP/1.1 协议较好地解决了这个问题,它使用了持续连接(persistent connection)。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

HTTP/1.1 协议的持续连接有两种工作方式

  • 非流水线方式:客户在收到前一个响应后才能发出下一个请求。客户每访问一次对象都要用去一个RTT。
  • 流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。客户访问所有的对象只需花费一个 RTT。

代理服务器

代理服务器(proxy server)是一种网络实体,它又称为万维网高速缓存(Web cache)。代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按 URL 的地址再次去互联网访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统上工作。下面我们用例子说明它的作用。

代理服务器就是有点类似cdn 的作用,把以前主机的请求得到的东西存起来,然后下次再有相同的请求就直接代理服务器把资源返回给主机,而不需要在到原服务器去获取。

HTTP报文

HTTP 有两类报文:

  1. 请求报文一一从客户向服务器发送请求报文,GETPOST
  2. 响应报文ー一从服务器到客户的回答,状态吗有 200, 302, 404....

HTTP 请求报文和响应报文都是由三个部分组成的。

  1. 开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-line),而在响应报文中的开始行叫做状态行(Status-line)。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
  2. 首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
  3. 实体主体(entity body),在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

请求报文的第一行“请求行”只有三个内容,即**方法,请求资源的 URL,以及 HTTP 的版本。下表给出了请求报文中常用的几种方法。

请注意:这里的名词“方法”(method)是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。表 6-1 给出了请求报文中常用的几种方法。

响应报文的状态行包括三项内容,即 HTTP的版本,状态码,以及解释状态码的简单短语。常见的状态码如下:

Cookie

Cookie 是这样工作的。当用户 A 浏览某个使用 Cookie 的网站时,该网站的服务器就为 A 产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给 A 的 HTTP 响应报文中添加一个叫做 Set-cookie 的首部行。这里的“首部字段名”就是“Set-cookie”,而后面的“值”就是赋予该用户的“识别码”。例如这个首部行是这样的

Set-cookie: 31d4d96e407aad42


当 A 收到这个响应时,其浏览器就在它管理的特定 Cookie 文件中添加一行,其中包括这个服务器的主机名和 Set- cookie 后面给出的识别码。当 A 继续浏览这个网站时,每发送个 HTTP 请求报文,其浏览器就会从其 Cookie 文件中取出这个网站的识别码,并放到 HTTP 请求报文的 Cookie 首部行中:

Cookie: 31d4d96e407aad42


于是,这个网站就能够跟踪用户 31d4d96e407aad42(用户 A)在该网站的活动,服务器就可利用 Cookie 来验证出这是用户 A,因此以后 A 在这个网站购物时就不必重新在键盘上输入姓名、信用卡号码等信息。这对顾客显然是很方便的。

万维网的文档

  • HTML
  • XML (Extensible Markup Language)是可扩展标记语言,它和 HTML 很相似。但 XML的设计宗旨是传输数据,而不是显示数据(HTML 是为了在浏览器上显示数据)。
  • XHTML (Extensible HTML)是可扩展超文本标记语言。XHTML 1.1 为 XHTML 最后的独立标准,2.0止于草案阶段。XHTML5 则是属于 HTML5 标准的一部分,且名称已改为“以XML序列化的HTML5”,而非“可扩展的HTML”。,XHTML5 比起 HTML5 仍远远并非主流。
  • CSS (Cascading Style Sheets)层叠样式表

上面所讨论的万维网文档只是万维网文档中最基本的一种,即所谓的静态文档(static)。静态文档在文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。由于这种文档的内容不会改变,因此用户对静态文档的每次读取所得到的返回结果都是相同的。

动态文档(dynamic documen)是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建的。当浏览器请求到达时,万维网服务器要运行另一个应用程序,输出HTTP 的格式的文档,对浏览器每次请求的响应都是临时生成的。

通用网关接口 CGI (Common Gateway Interface)。CGI 是一种标准,它定义了动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用。

CGI 程序又称为 cgi-bin 脚本,这是因为在许多万维网服务器上,为便于找到 CGI程序,就将CGI程序放在/cgi-bin的目录下。

电子邮件

电子邮件的两个最重要的标准就是:简单邮件传送协议 SMTP (Simple Mail Transfer Protocol) 和互联网文本报文格式。

由于互联网的 SMTP 只能传送可打印的 7 位 ASCII 码邮件,因此在 1993 年又提出了通用互联网邮件扩充 MIME (Multipurpose Internet Mail Extensions)。MIME 在其邮件首部中说明了邮件的数据类型(如文本、声音、图像、视像等)。在 MIME 邮件中可同时传送多种类型的数据。这在多媒体通信的环境下是非常有用的。

一个电子邮件系统应具有下图所示的三个主要组成构件,这就是用户代理、邮件服务器,以及邮件发送协议(如 SMTP)和邮件读取协议(如 POP3)。POP3 是邮局协议(Post Office Protoco)的版本 3。SMTP 协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,POP3协议用于用户代理从邮件服务器读取邮件。

这里应当注意,邮件服务器必须能够同时充当客户和服务器。例如,当邮件服务器 A 向另一个邮件服务器 B 发送邮件时,A 就作为 SMTP 客户,而 B 是 SMTP 服务器。

SMTP协议

连接建立

  1. 发件人的邮件送到发送方邮件服务器的邮件缓存后,SMTP 客户就每隔一定时间(例如 30 分钟)对邮件缓存扫描一次。
  2. 如发现有邮件,就使用 SMTP 的熟知端口号码 25 与接收方邮件服务器的 SMTP 服务器建立 TCP 连接。
  3. 在连接建立后,接收方 SMTP 服务器要发出 “220 Service ready”(服务就绪)。然后 SMTP 客户向 SMTP 服务器发送 HELO 命令,附上发送方的主机名。SMTP 服务器若有能力接收邮件,则回答:“250 OK”,表示已准备好接收。若 SMTP 服务器不可用,则回答“421 Service not available”(服务不可用)。

SMTP 不使用中间的邮件服务器。即便源端和目的端邮件服务器主机位于地球上相反的位置也一样。假设Aiice的邮件服务器主机在香港,Bob的邮件服务器主机在阿拉巴马州,那么所建立的TCP连接将是这两台服务器主机之间的连接。具体地说,如果Bob的邮件服务器不工作了,那么甲发给乙的邮件消息将存留在甲的邮件服务器中等待新的尝试,而不会存放到某个中间的邮件服务器中。

邮件传送

  1. 邮件的传送从 MAIL 命令开始。MAIL 命令后面有发件人的地址。如:MAIL FROM <my@bonky.top>。若 SMTP 服务器已准备好接收邮件,则回答“250 OK”。否则,返回一个代码,指出原因。
  2. 下面跟着一个或多个 RCPT 命令,取决于把同一个邮件发送给一个或多个收件人,其格式为 RCPT TO:<my@bonky.top>。RCPT 是 recipient(收件人)的缩写。
  3. 再下面就是 DATA 命令,表示要开始传送邮件的内容了。

总结

因为SMTP是明文传输,不利于保密。而且后来有了 MIME ,但传送二进制数据非 ASCII 码的长报文时,在网络上的传输效率是不高的。还有存在广泛的垃圾邮件的问题,提出了ESMTP协议(Extended SMTP)。具体详细实现就不进行解释了。

POP3和IMAP协议

现在常用的邮件读取协议有两个,即邮局协议第 3 个版本 POP3 和网际报文存取协议 IMAP (Internet Message Access Protocol)。

POP3 也使用客户服务器的工作方式。POP3 服务器只有在用户输入鉴别信息(用户名和口令)后,才允许对邮箱进行读取。然后POP3 协议的一个特点就是只要用户从 POP3 服务器读取了邮件,POP3 服务器就把该邮件删除。这显然是不够方便的。这就是IMAP的产生原因。

在使用 IMAP 时,在用户的计算机上运行 IMAP 客户程序,然后与接收方的邮件服务器上的 IMAP 服务器程序建立 TCP 连接。用户在自己的计算机上就可以操纵邮件服务器的邮箱,就像在本地操纵一样,因此 IMAP 是一个联机协议。(感觉有点类似SSH或者TELNET建立连接的感觉)。

DHCP协议

一个计算机如果想要连接到互联网需要配置的项目包括

  1. IP 地址
  2. 子网掩码
  3. 默认路由器的 IP 地址
  4. 域名服务器的 IP 地址

但对于IP,如果我们我们在不同的网络下切换工作,我们手动配置实在是太麻烦了(如笔记本)。所以有了动态主机配置协议 DHCP (Dynamic Host Configuration Protocol)

DHCP提供了一种机制,称为即插即用连网(plug-and- play networking)。这种机制允许一台计算机加入新的网络和获取 IP 地址而不用手工参与。对于服务器,DHCP 给运行服务器软件而位置固定的计算机指派一个永久地址,而当这服务器重新启动时其地址不改变。

DHCP 使用客户服务器方式。需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文(DHCPDISCOVER)(将目的 IP 地址置为全 1, 即 255.255.255.255),这时该主机就成为 DHCP 客户。发送广播报文是因为现在还不知道 DHCP 服务器在什么地方,因此要发现(DISCOVER) DHCP 服务器的 IP 地址。这台主机目前还没有自己的 IP 地址,因此它将 IP 数据报的源 IP 地址设为全 0。这样,在本地网络上的所有主机都能够收到这个广播报文,但只有 DHCP 服务器才对此广播报文进行回答。

DHCP 服务器先在其数据库中査找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的 IP 地址池中取一个地址分配给该计算机。DHCP 服务器的回答报文叫做提供报文(DHCPOFFER),表示“提供”了 IP 地址等配置信息。

但是我们并不愿意在每一个网络上都设置一个 DHCP 服务器。因此现在是使每一个网络至少有一个 DHCP 中继代理(relay agent)(通常是一台路由器),它配置了 DHCP 服务器的 IP 地址信息。当 DHCP 中继代理收到主机 A 以广播形式发送的发现报文后,就以单播方式向 DHCP 服务器转发此报文。

DHCP 服务器分配给 DHCP 客户的 P 地址是临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址。DHCP 协议称这段时间为租用期,由 DHCP 服务器自己决定。例如,一个校园网的 DHCP 服务器可将租用期设定为 1 小时。DHCP 服务器在给 DHCP 发送的提供报文的选项中给出租用期的数值。

PPPOE

PPPoE( Point to Point Protocol over Ethernet ,基于以太网的点对点协议)。

  • 动态IP:通过DHCP服务,自动获取一个ip地址,网关和DNS等。
  • 静态IP:通过手动设置一个IP地址,并且详细填写子网掩码和网关。
  • PPPOE:通过设置账号名和密码进行拨号连接,拨号验证成功后,从服务器获取IP地址和网关信息。
Share

You may also like...

发表评论