计算机网络——应用层
应用模型
分为客户服务模型(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格式,在整个会话期间一直保持打开状态。
- 数据连接:服务器在收到文件传输请求后,创建数据传送进程和数据连接。在传送完毕后关闭数据连接并结束运行。
- 因为控制与数据传送分离,所以也称为带外传送。
电子邮件
流程:
- 发件人通过用户代理(UA,比如Foxmail),向发送方邮件服务器发送邮件(使用SMTP协议,push);
- 发送方邮件服务器将邮件放入邮件缓存队列中,等待发送;
- 运行在发送方邮件服务器的SMTP客户进程,发现缓存中的待发送邮件后,向接收方邮件服务器的SMTP服务器进程发起建立TCP连接;
- 注:发送方邮件服务器的角色变动:收到UA发来的邮件时作为服务器方;向远程接收方发送邮件时作为客户方;
- TCP连接建立后,SMTP客户进程开始向远程的SMTP服务器进程发送邮件(使用SMTP协议,push)。当所有的待发送邮件完成发送后,SMTP就关闭了该TCP连接;
- 运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱中,等待收信人在方便时进行读取;
- 收信人在打算收信时,调用自己的UA,取出邮件(使用POP3协议,pull)。
邮件格式:邮件=信封+内容(=首部+主体);
- 必填字段:“To:”指明若干个收件人的电邮地址;“From:”指明发件人,该部分通常由UA填写。
- 可选字段:“Subject:”指明邮件主体;等等。
MIME。推荐阅读:setContenttype()常用的内容类型
- 传统的,不采用MIME的邮件,一般只能传送一定长度的ASCII码,对某些编码、格式支持的不好;
- MIME拓展了SMTP协议的功能,特点:定位了许多邮件内容的格式;标准化了多媒体表示方式;定义了传送编码;定义了5个新首部(MIME版本、内容描述、内容标识、内容传送编码、内容类型)
SMTP协议
使用TCP连接,端口25
流程:
- 背景:邮件已经抵达发送方邮件服务器的邮件缓存中了。
- SMTP客户每隔一定时间对邮件缓存扫描一次,发现邮件,就利用端口25对接收方邮件服务器的SMTP服务器建立TCP连接。
- 连接建立后,接收方SMTP发出“220 Service ready”(服务就绪)。然后SMTP客户向SMTP服务器发送HELO命令(附上发送方的主机号,告知用户身份)。
- SMTP不使用中间的邮件服务器,是通过TCP直接连接两端。
- 连接建立后发送邮件,发送过程如下:
1 | //连接建立后发送邮件的交互 |
POP3协议
- 使用C/S模式,TCP协议,端口110。
- 两种工作方式:“下载并保留”和“下载并删除模式”,留和删的指邮件服务器上的邮件。
- 另一种使用趋势:使用Hotmail、Gmail等时,收发邮件使用HTTP协议,只有在不同邮件服务器之间传送邮件才使用SMTP协议。
HTTP协议
- HTTP是面向事务的应用层协议,有两类:请求报文和响应报文。
- HTTP的无状态特性:同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。服务器从不会记忆来的是否是老客户,服务过多少次。在实际应用中,状态的记忆由Cookie来完成。
- 非持久连接,持久连接(HTTP/1.1支持)
- 非持久连接:每一个网页元素对象的传输都需要建立一个TCP连接。请求一个文档所需时间为:该文档的传输时间+double*RTT;
- 持久连接:建立连接后,可以继续使用该连接传送后续内容。又分为非流水线和流水线两种方式:
- 非流水线:客户在收到前一个响应后才能发起下一个请求(类似回合制游戏?你砍一刀,我回一剑?)
- 流水线:允许持续发送请求。
- 报文结构,每个字段都是一些ASCII码串,每个字段长度不确定。
- 请求报文:方法+URL+版本+首部行+请求主体(大致结构,不详述)
- 相应报文:版本+状态码+短语+首部行+响应主体