各层的数据包名称:
应用层--报文
传输层--报文段
网络层--数据报
链路层--帧
一、应用层体系结构:
客户机/服务器, P2P体系结构,前两者的混合的体系结构;
客户机/服务器:总有一台打开的服务器等待客户机的连接请求,服务器拥有周知的固定的IP地址; 例如:web,文件传输,远程登录,电子邮件
为了应对众多的连接请求,一般服务器会用多台服务器建立一个主机群集;
P2P体系结构:网络上任意一对主机形成的对等方直接通信,不通过服务器(Peer to Peer),每台主机都有可能变更IP地址;不要求任何一台主机打开;
特点:高度可扩展性; 高度分布,分散性;
客户机/服务器与P2P的混合体:
如即时聊天软件,两个用户之间传送文本是P2P,而寻找在线的好友时,要与服务器联系,是客户机/服务器模式;
不同端系统上的进程通过网络交换报文;
在给定的一对进程中,发起连接的是客户机,等待连接的是服务器;
SOCKET 是应用层与传输层之间的接口,是在网络上建立网络应用程序的编程接口即API;
应用层协议
定义了不同端系统上的应用程序如何传递报文;
应用层协议与网络应用:
应用层协议只是网络应用的一部分;
应用程序对传输层提供的服务要求:
1. 对传输可靠性的要求:如web, SMTP,金融等要求可靠传输;
2. 对宽带的要求:网络电话是带宽敏感的应用,要求数据以固定的速率进行编码;
3. 对传输时延的要求:如网络电话,网络实时游戏等
TCP:可靠连接,拥塞控制机制;
UDP:不可靠连接,不提供拥塞控制机制;
二、web应用与HTTP协议
web:按需操作
web应用利用的应用层协议是HTTP; HTTP定义了报文的格式,以及交换方式,
web页也叫文档,是由各种对象组成如图片、JAVA小程序、HTML文件等,这些对象可以通过URL地址对对象进行引用;
URL地址由两部分组成:存放对象的主机名与路径名,如www.someSchool.edu/someDepartment/pircture.gif
web浏览器即客户机,是web应用的用户代理,用于显示所请求的文档。
HTTP:HyperText Transfer Protocol 超文本传输协议
HTTP协议是一个无状态协议,不会保留关于客户机的任何有关信息;
HTTP协议并不管客户机如何解释该协议,只定义了HTTP客户机与HTTP服务器程序之间的通信协议。
非持久连接:
每个HTTP申请的TCP连接在获得请求的对象后,TCP连接直接关闭;每个TCP连接只传输一个请求报文和一个响应报文;
一个web页有多少个对象,就要申请多少个TCP连接;
TCP连接的申请可以是并行也可以是串行(并行度为1),这个可以在浏览器中设置;
RTT往返时间:报文发送出去,到响应之间的时间;包括:传输时延,路由器与交换机上的排队时延,分组处理时延;
HTTP连接过程:(先由三次握手建立连接,再则服务器发送文件)
1. 浏览器发送一个TCP请求报文段;
2. 服务器发送响应TCP连接报文段;
3. 浏览器将一个HTTP请求报文与三次握手的最后一次个确认报文段一起发送给服务器
4. 服务器开始向客户端发送文件;
(总时间=2*RTT + 文件传输时间)
持久连接:
1. 非流水线式
2. 流水线式
客户机遇到一个对象就会产生一个请求,因此HTTP客户机会为引用对象产生连接的请求,服务器也连续的响应;因此所有对象消耗一个RTT;
HTTP请求报文格式:
HTTP响应报文格式:
一个状态行
6个首部行
实体主体
用户与服务器交互:Cookie
HTTP是一个无状态协议,不记录客户机的信息,这样会简化服务器的设计,提高性能;但很多网站希望能够识别用户,或是把内容与用户关联起来,web利用Cookier实现这一目地;
Cookie技术有4个组成部分:
1. HTTP响应报文中有一个Cookie首部行;
2. HTTP请求报文中有一个Cookie首部行;
3. 用户端系统中保留有一个Cookie文件,由用户的浏览器管理;
4. web站点有一个后端数据库;每一个用户生成唯一的一个识别码,以此作为一个索引在它的后端数据库产生一个项;用户浏览器同样会为用户保留一个在该站的Cookie,以后再次访问时,请求报文中会加上cookier首部行;
HTTP内容:
web页中的对象;XML文件;P2P文件共享中HTTP协议常被当作文件传送协议使用;
WEB缓存器(代理服务器)
使用代理服务器能大大减少本地网与互联网间接入的带宽要求!
条件GET
If-modified-since:时间
每次从起始服务器获得拷贝时,都有一个Last-Modified:时间 首部行,当一段时间后,用户请求该对象时,缓存服务器会向起始服务器发送一个条件GET,检测对象是否已经被更新;
三、FTP 文件传输协议
FTP协议是状态协议,会保留用户的信息,必须将用户帐户与控制连接联系起来;
四、电子邮件
1.SMTP
电子邮件系统由:用户代理,邮件服务器,SMTP三部分组成;
每个接收方在其服务器上有一个邮箱;
邮件过程:
邮件从用户代理发送到邮件服务器,由邮件服务器发送对对方的邮件服务器,再被分到对方的邮箱中;
SMTP是基于TCP接连,一端是邮件发送服务器上的客户机,另一端是邮件接收服务器的服务器;
特点:
SMTP一般不使用中间邮件服务器发送,而是直接由2个服务器直接相连;如果接收方邮件服务器没有开机,则发送方会等待一段时间再发送;
SMTP是持久连接,如果还有其它报文要发送,依然是用这个TCP连接,而不会断开当前连接后再次建立一个新的TCP连接;
SMTP vs HTTP
SMTP:从web客户端到web服务器,传送对象; 是一个拉协议,即要的时候向服务器取信息;TCP是由想要获取文件的一方发起;
HTTP:从一个邮件服务器到另一个邮件服务器,传送邮件报文; 是一个推协议,即将邮件发送到接收方服务器;TCP是由要发送文件的一方发起;
SMTP报文必须使用7位ASCII码格式;HTTP不用;
HTTP每个对象会封装在自己的响应报文中,而SMTP发送的所有对象放在一个报文中!
MIME(multipurpose internet mail extension):多用途因特网邮件扩展
对SMTP协议报文首部行进行了扩展,使其能够发送非ASCII文本内容如图片、视频等;原先的主体只能包含7位ASCII码的值,要传送其它文件如图片、视频,必须使用编码;
支持多媒体的两个关键首部:
Content Type: // 文件类型如jpg
Content-Transfer-Encoding: // 文件编码类型如base64
Received:首部行,是在邮件由中间SMTP服务器转恬时,在报文的顶部添加的;这样可以看到邮件的访问的服务器的踪迹;
2. 邮件访问协议
使用用户代理与STMP服务器的原因:
邮件要的发送是基于TCP连接的,而不可能将STMP服务器放置于用户的PC端,因为用户不可能一直在线,如果不在线,则无法建立连接,邮件就无法从客户接收端;因此要使用专门的SMTP服务器,一般服务器是由ISP提供,
可以做到一直开着,这样,用户要发送文件时就会通过SMTP协议把邮件发送到他的服务器上,之后SMTP服务器给接收方的服务器发送邮件,如果对方服务器没有在线,则会选择过一段时间再次发送;
2.1 POP3 (Post office Protocol version 3) 第三版邮局协议
是一个简单的邮件访问协议,POP3通过端口110与服务器建立TCP连接,分三个步骤:特许、事务处理、更新;
特许:即身份验证阶段;
事务处理: 即对邮件进行操作阶段如删除标记、取消删除标记;
更新:即在客户quit后,服务器对之前用户操作过的邮件进行更新;
命令:
list, retr, dele , quit,
POP3操作简单,但是只能将邮件下载到本地操作(分下载删除、下载保留2种工作方式),无法建立远程服务器的层次上进行文件夹,而用户会更喜欢远程服务器上层次上的操作,这样可以在不同PC端处理;
为些产生了另一个协议:IMAP;
2.2 IMAP (Internet Mail Access Protocal)
提供了远程文件夹的服务,可以在服务器上建立新的文件夹或是移动邮件;因此,IMAP服务器必须为用户维护状态信息如文件夹以及对应的邮件的改变;
另外IMAP还提供只读取邮件组件的功能,比如只读取文件中的文字而不读取视频;
上两种邮件读取协议都是在接收邮件时用到,发送邮件仍然使用SMTP协议
2.3 HTTP (基于web)
HTTP获取邮件是实现了web浏览器上读取或是发送文件的方式;
用户发送或是收取邮件都通过HTTP协议而不是SMTP协议,只是服务器间发送邮件才是利用SMTP协议;
该方式可以如IMAP一样在建立远程文件夹,其实现方式就是通过HTTP服务器上的脚本与IMAP服务器通信;很多基于web的电子邮件都是通过IMAP服务顺来实现文件夹的功能;
五、DNS
主机的标识方式:
主机名hostname如 www.yahoo.com // 只提供了很少的地理位置信息,如中国,法国等,且名字长度不,不易处理
IP地址: 32位数字表示; /// 地理位置与长度固定
1. DNS简介
DNS 是应用层协议,因此:1. 是客户端/服务器模式, 要用传输层的协议在端系统间通信,传输报文; // UDP协议,53号端口
特性:
1、 由分层的DNS服务器实现的分布式数据库;
2、一个允许主机查询分布式数据库的应用层协议
DNS 主要是为其它应用层程序提供主机另名与IP地址间的转换;
例子:
当用户在浏览器端输入URL:www.somschool.edu/index.html 时会发生下面的步骤
1、 在用户主机上运行着DNS应用客户端;
2、浏览器从URL中提取出主机另名:www.somschool.edu,将它转交给DNS客户端;
3、 DNS客户端向DNS服务器发送一个包含该主机名的请求
4、DNS服务器返回该主机名与IP地址;
5、HTTP协议通过该IP地址建立与HTTP服务器间的TCP连接;
DNS提供的服务:
1、主机名与IP地址的转换;
2、由主机别名获得规范主机名与IP地址;
3、邮件服务器别名转换成规范主机名与IP地址; // 允许邮件服务器与web服务器使用相同的主机名;
4、负载分配:即对于繁忙的站点,有是多台服务器提供服务,每台服务器由自己的IP地址,但是这些IP地址集合对应一个规范主机名;
当DSN发送该主机名时,服务器会返回这些IP地址的集合,但每次返回会对集合进行旋转,而客户机通常会将IP地址排在最前面的服务器发送HTTP请求报文,这样就实现了负载的均匀分配;
2. DNS工作机理
在应用程序上通过主机名IP可以直接调用函数gethostbyname(); 这个过程是调用了主机上的DNS客户端程序,之后客户端向网络发送一个DNS查询报文,使用UDP数据报经端口53号发送;
之后会收到一具DNS回答报文,结果返回给调用DNS的应用程序;
这个函数背后是分布于全球的大量DNS服务器与定义了DNS服务器与查询主机间如何通信的应用层协议;
全球DNS服务器是以层次方式组织,分布在全世界范围内。
DNS服务器分三种:
1. 根DNS服务器:通过主机名的com, org, edu等返回顶级域名服务器的IP地址;
2. 顶级域名服务器(TLD):负表顶级域名服务器对应的权威服务器地址;
3. 权威DNS服务器:那些具有公开可以访问的主机必须提供公共可访问的DNS记录,这些记录将这些主机名映射成IP地址;
附: 本地DNS服务器:不属于DNS服务器层次结构中,但具有重要的实际意义;
当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理作用,将该请求转发到DNS服务器层次结构中;
例:主机查询www.gaia.cs.umass.edu的IP地址
迭代查询: // 即每次返回报文是直接返回给本地服务器,由本地服务器再次向下一级DNS服务器发送查询报文;
1. 主机向本地DNS服务器发送请求报文;
2. 本地DNS服务器向根服务器转发该报文;根服务器根据edu前辍返回负责edu的TLD服务器IP地址;
3. 本地DNS依次向这些IP地址发送查询报文;对应的TLD服务器通过umass.edu前辍,返回对应的权威DNS服务器IP地址;如该权威DNS服务器是dns.umass.edu;
4. 最后本地DNS向权威DNS服务器转发查询报文,服务器用gaia.cs.umass.edu对应的IP地址;
上面的查询过程,总共发送了8个报文来获得一个IP地址,因此可以利用DNS缓存来减少这种查询流量;
当然实际中,可能会经过中间DNS服务器才能知道最终的权威服务器;
递归查询: // 返回的报文并不直接给要地服务器,而是由当前服务器直接转换给下一级服务器,之后依次返回;
就是从根服务器交不是返回给本地服务器,而是直接转发到TLD服务器,TLD服务器转换到权威服务器,之后依次返回到根服务器再返回到本地服务器;
DNS缓存:
即当一个DNS服务器接收到DNS回答时,将回答中的信息缓存在本地存储器中,这样下次有对相同主机名进行查询时会直接返回对应的IP地址而不必查询其它DNS服务器;
同样可以缓存TLD服务器的地址,这样就可以直接绕开根DNS服务器查询权威服务器;(如com, edu等等前辍是经常使用,因此本地服务器是有缓存的)
所有的DNS共同存储着资源记录(RR)即主机名到IP的地址映射;每条DNS回答报文包含了一条或是多打资源记录;
RR是一个四元组:(Name, Value, Type,TTL) // TTL代表的是RR从缓存中删除的时间
Name和Value的值取决于Type:
Type =
A,该类型记录是标准的主机名到IP地址的映射;(relay1.bay.foo.com, 154.37.93.128, A)
NS,该类型记录的Name是域如foo.com,Value 是知道该如何获得该域中主机IP的权威DNS服务器主机名。(foo.com, dns.foo.com, NS)
CNAME,此时Value对应别名为Name的主机的规范主机名,该记录向请求主机返回主机别名对应的规范主机名。(foo.com, relay1.bay.foo.com, CNAME)
MX,Value是别名为Name的邮件服务器的规范主机名。该记录就允许邮件服务器具有简单的别名,可以同web服务器同名。(foo.com, mail.bay.foo.com, MX)