前言
该章节主要是应用层的笔记,包括HTTP超文本传输协议、FTP文件传输协议、SMTP邮件协议、DNS服务、TCP和UDP套接字。
应用层协议原理
这一小节的名字是这么叫的,但实际上是应用层的概览,应用层的东西,首先应当从网络应用程序的体系结构开始。
网络应用程序的体系结构:一种是客户机/服务器体系结构(client-server architecture),及有一个总是打开的主机称为服务器,它服务于其他称为客户机的主机请求,我们经常玩的网络游戏大部分都是这种结构。另一种是P2P体系结构(P2P architecture),不用总是打开服务器,任意间断连接的主机对——称为对等方,直接相互通信,这些对等方大部分是家庭主机,最具体现P2P结构的应用就是大家耳熟能详的迅雷了。
那么问题来了,不同的程序对网络有不同的需求。举个例子,迅雷下载肯定是要求越快越好的,而这个快其实说的是吞吐量的大小。而网络游戏我们则希望它不要有卡顿,这个卡顿则是信息不要有延时,也就是有个定时保证。当然啦还有使用网银的时候我们希望信息是安全的之类。下面还是列出一个表格,更直观的看这些对网络的不同要求:
相关术语 | 说明 | 此要求较高的应用 | |
可靠性 | 可靠数据传输(reliable data transfer)、容忍丢失的应用(loss-tolerant application) | 及保证分组不会损坏,不会丢失 | 邮件传输、文件传输、远程主机访问 |
吞吐量 |
敏感应用(bandwidth-sensitive application)、弹性应用(elastic application) |
及单位时间内能快速的传输分组 | 多媒体应用 |
定时 | 及传输分组到对方接收分组的间隔越短越好 | 因特网电话、交互式游戏 | |
安全性 | 及传输的分组不会被第三方获取,或者获取了也不能解析信息 | 银行方面的web应用 |
程序对运输服务的要求就这样了。然而在网络中还不是直接运输这些数据,而是把这些数据给一个应用程序接口(Application Programming Interface),也就是大家熟知的套接字(socket)。然而根据可靠性要求的不同,所使用的套接字分为两种,TCP套接字和UDP套接字,然后根据安全性要求的不同,我们还得考虑是否给TCP套接字添加SSL代码等等。
下面给出我们常用应用的应用层协议和运输层协议的概览:
应用层协议 | 对应运输层协议 | |
电子邮件 | SMTP[RFC 2821] | TCP |
远程终端访问者 | Telnet[RFC 854] | TCP |
Web | HTTP[RFC 2616] | TCP |
文件传输 | FTP[RFC 959] | TCP |
流媒体 | HTTP、RTP | TCP或者UDP |
因特网电话 | SIP、RTP | 通常是UDP |
由于应用层部分的东西感觉比较重要,而且实用,还是分几篇来做笔记吧,实用的东西会多记录些,并用相关的软件做下实验。