Fork me on GitHub

计算机网络第六章

计算机网络——应用层

应用模型

分为客户服务模型(Client/Server,C/S)和P2P模型两种

  • C/S模型是由主机提供服务,客户机请求服务。详细不解释。
  • P2P模型没有固定的客户和服务器的划分,每个结点既作为客户请求资源,又作为服务器提供资源。优点有:
    • 减轻了服务器的计算压力;
    • 多个客户机可以直接共享文档(C/S模式下各客户机无法直接通信);
    • 可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求;
    • 网络健壮性好,单个结点的失效不会影响其他部分的结点。
  • P2P模式的缺点:
    • 会占用较多的内存,影响整机的速度;
    • 经常进行P2P下载,会对硬盘造成较大的损伤;
    • P2P程序会使网络变得非常拥塞,因此遭到各大互联网服务提供商ISP的嫌弃。

DNS

来自C/S模型,运行在UDP之上,使用53端口。三个部分:层次域名空间、域名服务器和解析器

层次域名空间

域名规则:

  • 标号,比如以www.baidu.com就有三个标号;
  • com是顶级域名,baidu是二级域名,www是三级域名;
    • 顶级域名分为三类:国家顶级域名(.cn、.us等);通用顶级域名(.com、.net等);基础结构域名(只有arpa,用于反向域名解析)
  • 标号中的英文不区分大小写;
  • 标号中出连字符-外,不能使用其他标点符号;
  • 每一个标号不能超过63个字符,完整域名不能超过255个字符;

域名服务器

  • 域名系统被设计成一个联机分布式的数据库系统,采用C/S模型。
  • 每一个域名服务器不但能保存一些域名到IP地址的解析,还必须具有连向其他域名服务器的信息。没有一台服务器具有因特网上所有主机的映射。域名服务器主要有四种类型:
    • 根域名服务器:全球共13个,取名从’A’到’M’,1个主根在美国,另外12个辅根中9个在美国,1个在英国,1个在瑞典,1个在日本。作用:用来管理顶级域名。并不提供直接转换成IP地址的功能。
    • 顶级域名服务器:负责管理在该服务器注册的所有二级域名,可以给出应答,或下一步应当查找的域名服务器的IP地址。
    • 授权域名服务器(权限域名服务器):每一个主机都必须在授权域名服务器处登记。我也不晓得这个是啥,网上搜不到?
    • 本地域名服务器:比如一个大学、一个系都能拥有一个本地域名服务器。

域名解析过程

  • 域名 -> IP地址为正向解析;IP地址 -> 域名为反向解析。
  • 两种解析方式,递归查询和递归与迭代结合查询,字面理解。前者给根域名服务器造成负载太大,几乎不采用。
  • 本地域名服务器会将查询到的结果保存到本地缓存,方便下次查询。高速缓存在域名服务器中广泛被采用。

FTP

FTP提供的功能:

  • 不同种类的主机系统之间的文件传输;
  • 以用户权限管理的方式提供用户对远程FTP上的文件的管理;
  • 以匿名FTP的方式提供公用文件共享的管理。

采用C/S模型,使用TCP可靠传输。一个FTP服务器可以为多个客户进程提供服务。FTP的服务器进程分为两个部分:负责接收新请求的主进程(端口21),负责处理单个请求/数据连接的若干个从属进程(端口20)。

  • 控制连接:只用来传输控制信息(如连接请求、传送请求等),以7位ASCII格式,在整个会话期间一直保持打开状态。
  • 数据连接:服务器在收到文件传输请求后,创建数据传送进程和数据连接。在传送完毕后关闭数据连接并结束运行。
  • 因为控制与数据传送分离,所以也称为带外传送。

电子邮件

  • 流程:

    1. 发件人通过用户代理(UA,比如Foxmail),向发送方邮件服务器发送邮件(使用SMTP协议,push);
    2. 发送方邮件服务器将邮件放入邮件缓存队列中,等待发送;
    3. 运行在发送方邮件服务器的SMTP客户进程,发现缓存中的待发送邮件后,向接收方邮件服务器的SMTP服务器进程发起建立TCP连接;
    4. 注:发送方邮件服务器的角色变动:收到UA发来的邮件时作为服务器方;向远程接收方发送邮件时作为客户方;
    5. TCP连接建立后,SMTP客户进程开始向远程的SMTP服务器进程发送邮件(使用SMTP协议,push)。当所有的待发送邮件完成发送后,SMTP就关闭了该TCP连接;
    6. 运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱中,等待收信人在方便时进行读取;
    7. 收信人在打算收信时,调用自己的UA,取出邮件(使用POP3协议,pull)。
  • 邮件格式:邮件=信封+内容(=首部+主体);

    • 必填字段:“To:”指明若干个收件人的电邮地址;“From:”指明发件人,该部分通常由UA填写。
    • 可选字段:“Subject:”指明邮件主体;等等。
  • MIME。推荐阅读:setContenttype()常用的内容类型

    • 传统的,不采用MIME的邮件,一般只能传送一定长度的ASCII码,对某些编码、格式支持的不好;
    • MIME拓展了SMTP协议的功能,特点:定位了许多邮件内容的格式;标准化了多媒体表示方式;定义了传送编码;定义了5个新首部(MIME版本、内容描述、内容标识、内容传送编码、内容类型)

SMTP协议

使用TCP连接,端口25
流程:

  1. 背景:邮件已经抵达发送方邮件服务器的邮件缓存中了。
  2. SMTP客户每隔一定时间对邮件缓存扫描一次,发现邮件,就利用端口25对接收方邮件服务器的SMTP服务器建立TCP连接。
  3. 连接建立后,接收方SMTP发出“220 Service ready”(服务就绪)。然后SMTP客户向SMTP服务器发送HELO命令(附上发送方的主机号,告知用户身份)。
  4. SMTP不使用中间的邮件服务器,是通过TCP直接连接两端。
  5. 连接建立后发送邮件,发送过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//连接建立后发送邮件的交互
client:MAIL FROM:<**@zju.edu.cn>; //MAIL命令开始,并告知发件人地址
server:250 OK; //准备好了

if(client: RCPT TO:<收件人地址> )
server: "250 OK" or "550 No such user here" //每一个RCPT,都有一次交互
//弄清楚接收方是否已做好接受邮件的准备

client:DATA+邮件正式内容; //DATA内容
server:354 Start mail input:end with<CRLF>.<CRLF> //告知结束方式

client:QUIT; //发送完毕
server:221; //服务关闭

POP3协议

  • 使用C/S模式,TCP协议,端口110。
  • 两种工作方式:“下载并保留”和“下载并删除模式”,留和删的指邮件服务器上的邮件。
  • 另一种使用趋势:使用Hotmail、Gmail等时,收发邮件使用HTTP协议,只有在不同邮件服务器之间传送邮件才使用SMTP协议。

HTTP协议

  • HTTP是面向事务的应用层协议,有两类:请求报文和响应报文。
  • HTTP的无状态特性:同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。服务器从不会记忆来的是否是老客户,服务过多少次。在实际应用中,状态的记忆由Cookie来完成。
  • 非持久连接,持久连接(HTTP/1.1支持)
    • 非持久连接:每一个网页元素对象的传输都需要建立一个TCP连接。请求一个文档所需时间为:该文档的传输时间+double*RTT;
    • 持久连接:建立连接后,可以继续使用该连接传送后续内容。又分为非流水线和流水线两种方式:
      • 非流水线:客户在收到前一个响应后才能发起下一个请求(类似回合制游戏?你砍一刀,我回一剑?)
      • 流水线:允许持续发送请求。
  • 报文结构,每个字段都是一些ASCII码串,每个字段长度不确定。
    • 请求报文:方法+URL+版本+首部行+请求主体(大致结构,不详述)
    • 相应报文:版本+状态码+短语+首部行+响应主体
-------------The End-------------