『computer network-5』application layer
应用层
一、套接字编程接口
套接字socket:应用进程 和 传输层协议间的接口,AP为获得网络通信服务与OS进行交互的机制
注意:套接字是最常用的应用层编程接口,应用程序通过socket接入网络基于TCP系统的系统调用接口:
- 连接建立阶段:
- bind:客户端和服务器分别将端口号 + IP地址绑定在socket上
- listen:服务器调用listen将套接字设置为被动方式,随时接受客户请求
- accept:服务器调用accept提取客户请求,并为每个新连接请求建立新的套接字返回给客户;通信结束后,新的套接字关闭
- connect:客户端调用connect与远程服务器建立连接(主动打开)
- 数据传送阶段:
- send:客户端使用send发送请求;服务器使用send发送回答
- recv:服务器使用recv接收请求;客户端使用recv接收发送请求后的回答
- 连接释放阶段:调用close释放连接,撤销套接字
- 连接建立阶段:
基于UDP系统的系统调用接口:无需建立连接,没有connect与listen+accept
套接字描述符:AP发出socket系统调用后,OS为其分配网络通信所需系统资源,并将这些资源用套接字描述符表示并返回给AP
注意:几乎所有网络系统调用都使用socket descriptor作为第一个参数,用于识别完成网络请求所需的各种资源(CPU、带宽 等)
二、域名系统 DNS
域名系统:Internet使用的命名系统,采用层次结构的命名树作为主机名字(IP地址不易记忆),属于分布式系统
- 域名服务器程序:实现 域名 \(\rightarrow\) IP地址 的解析,其运行在域名服务器上
- DNS基于UDP协议实现:域名解析过程如下:
- AP调用域名解析程序,其成为DNS的一个客户
- AP将待解析的域名放在DNS请求报文中,以UDP用户数据报的形式发给本地域名服务器
- 本地域名服务器查找域名,并把对应的IP地址放在回答报文中返回给AP
Internet的域名结构:采用层次树状结构命名,不区分大小写,且域名长度 \(\le\) 255字符
顶级域名TLD:国家顶级域名(.cn, .us, ...) + 通用顶级域名(.com, .edu, .gov, org, ...)
域名服务器:主要分为以下4类:
- 根域名服务器:存有其所知的所有顶级域名服务器的域名
+ IP地址
注意:根域名服务器一般并不直接将待查询域名转换为IP,而是告诉本地域名服务器下一步要查哪个顶级域名服务器 - 顶级域名服务器:管理在该顶级域名服务器注册的所有二级域名
- 权限域名服务器:负责一个区的域名服务器
- 本地域名服务器:又称默认域名服务器
注意:域名服务器定期把数据复制到多个域名服务器保存,其中一个为主域名服务器、其余为辅助域名服务器
- 根域名服务器:存有其所知的所有顶级域名服务器的域名
+ IP地址
域名查询:分为递归查询 + 迭代查询
- 主机 向 本地域名服务器 查询采用递归查询:
- 本地域名不知道待查询域名的IP,就向其它服务器发送请求报文,最终返回待查询IP地址(无需主机自己查询)
- 本地域名服务器 向 根域名服务器
查询采用迭代查询:每次迭代需要让本地域名服务器自己去查询
- 若根域名服务器知道IP地址,直接给出IP地址
- 若其不知道IP地址,告诉本地域名服务器后续向哪个域名服务器查询:
- 若顶级域名服务器知道IP地址,直接给出IP地址
- 若其不知道IP地址,告诉本地域名服务器后续向哪个域名服务器查询:
- 权限域名服务器给出待查询域名对应的IP地址;本地域名服务器将该IP返回给主机
注意:为了提高查询效率,通常使用高速缓存存储域名映射;以下8步查询共需要8个UDP用户数据报
- 主机 向 本地域名服务器 查询采用递归查询:
三、文件传输协议 FTP
FTP的客户/服务器方式:服务器进程由以下2部分组成:
主进程:负责接收新的请求,工作步骤如下:
- 打开熟知端口(21),使客户进程能够连接得上
- 等待客户进程发出连接请求
- 启动从属进程处理客户进程发来的请求
- 回到等待状态,继续接受其它客户进程发来的请求
若干从属进程:负责处理单个请求,其运行过程中可能会创建其它子进程,请求处理完毕后立即终止
- 控制连接:整个会话期间一直保持打开,客户端发送的传送请求 通过控制连接发送给 服务器的控制进程 注意:控制进程不用于传送文件,仅用于发送控制信息
- 数据连接:收到客户发来的文件传输请求后,服务器控制进程创建数据连接,负责实际完成文件传送;传送完毕后关闭连接
四、万维网 WWW
万维网概述:一个分布式的超媒体系统,是超文本系统的扩充
- URL:标识分布在Internet上的万维网文档
- HTTP:实现万维网上各种超链的链接
- HTML:存储并表示万维网文档的方式
注意:"超文本"指包含指向其它文档的链接的文本;"超媒体"还可包含图形、图像、声音等信息
统一资源定位符 URL:对 Internet 上 资源位置 和 访问方法 的一种简洁表示
URL一般形式:<协议>://<主机>:<端口>/<路径>
- 协议:指出使用何种方式获取万维网文档,如http或ftp
- 主机名:万维网文档所存放主机的域名(通常以www开头),也可用点分十进制的IP地址代替
- 端口:指出端口号,如省略则为协议默认端口号;若不使用默认端口号,则必须写明
- 路径:包含若干斜线的较长字符串
注意:URL不区分大小写
超文本传送协议 HTTP:面向事务的应用层协议,基于TCP协议
HTTP工作原理:
- Web服务器进程在熟知端口号80上监听
- 客户需要请求某个页面时,与服务器建立TCP连接,并传送文件;传送完毕后释放TCP连接
HTTP/1.0:每请求一个文档都需要建立一次TCP连接,非持续连接,加重服务器负担
HTTP/1.1:使用持续连接,发送响应后在一段时间内保持连接,包括非流水线方式 + 流水线方式
- 非流水线方式:收到前一个响应后才能发送新的请求,每访问一次对象花费一个RTT时间
- 流水线方式:收到前一个响应前就能发送新的请求,访问所有多项均只需花费一个RTT时间
HTTP报文类型:主要包括以下2类:
- 请求报文:客户 \(\rightarrow\) 服务器 请求报文
- 响应报文:服务器 \(\rightarrow\) 客户 回答报文
注意:HTTP的两类报文都是面向文本的,报文中的字段都是ASCII码串,故每个字段长度不固定
HTTP报文结构:两种报文均由三部分组成:
开始行:区分报文类型;请求报文中叫做请求行,响应报文中叫做状态行
请求行:<方法> + <URL> + <HTTP版本>;"方法"也是命令,包括OPTION、GET、POST等
状态行:<HTTP版本> + <状态码> + <简单短语>;"状态码"都是三位数字,分为以下5类:
- 1xx:通知信息,如收到请求 or 正在处理
- 2xx:成功,如接收 or 知晓
- 3xx:重定向,如要完成请求必须采取进一步行动
- 4xx:客户差错,如请求中有错误的语法 or 不能完成
- 5xx:服务器差错,如服务器无法完成请求
首部行:用来说明浏览器 or 服务器 or 报文主体的信息;每行都有首部字段名 + 对应值
实体主体:请求报文中一般不使用该字段;响应报文中也可能没有这个字段
超文本标记语言 HTML:制作万维网页面的标准语言(不是应用层协议);HTML文档是文本格式
- 标签 tag:HTML用于排版的命令
- 浏览器从服务器读取HTML文档(后缀必须是.html),根据显示器分辨率显示页面
安全的HTTP协议(HTTPS):建立在SSL基础上
- 熟知端口号:HTTPS为443,而HTTP为80
- 安全套接层 SSL:Secure Socket Layer,为TCP协议提供信息加密和完整性
五、电子邮件
电子邮件系统中的实体:分为以下2类:
- 用户代理UA:电子邮件客户端软件,是用户与电子邮件系统的接口,支持撰写、显示、处理、通信
- 邮件服务器:用于发送和接收邮件,并向发信人报告传送结果;可以作为客户 or 服务器
简单邮件传送协议 SMTP:用于发送邮件的协议;发件方是客户、接收方是服务器
- SMTP通信三阶段:
- 连接建立:连接在 SMTP客户 和 SMTP服务器 之间建立(无中间邮件服务器)
- 邮件传送
- 连接释放:邮件发送完毕后,SMTP释放TCP连接
- SMTP局限性:不能传输可执行文件 or 其它二进制对象(图片、音乐 等)
- SMTP通信三阶段:
读取邮件的协议:POP3 和 IMAP
电子邮件信息格式:电子邮件分为信封 + 内容;邮件内容分为首部 + 主体
- 首部字段:其格式包含以下6个字段
- To:填入若干个收件人的e-mail地址
- Subject:邮件主题,反映邮件主要内容
- Cc:抄送,表示给某人发送一个邮件副本
- From:发件人的e-mail地址
- Date:发信日期
- Reply-to:对方回信的地址
- 主体:由用户自由撰写
- 首部字段:其格式包含以下6个字段
通用互联网邮件扩充 MIME:增加邮件主体结构,定义了传送非ASCII码的编码规则,改善了SMTP的问题
- MIME思路:
- 继续沿用目前的电子邮件信息格式
- 对二进制数据进行编码,将其转换为7位的ASCII码
- 新增的5种头部字段:
- MIME-Version:MIME版本号,一般为1.0
- Content-Type:报文体中的数据类型和子类型
- Content-Transfer-Encoding:传输时的编码格式
- Content-ID:邮件唯一的标识符
- Content-Description:供人阅读的内容描述字符串,说明主体是否为图像、音频 or 视频
- 传输编码规则:
- base64:原二进制数据中每6bit被映射为8bit(ASCII字符)
- quoted-printable:原二进制数据的8bit(1Byte)换算为2个16进制数,并在每个Byte前加"="
- MIME思路: