应用层
整个因特网、硬件以及软件的设计和开发就是为应用层提供服务。
因特网的两个应用类型:
- 传统类型:客户-服务器模式(client-server-paradigm)
- 新类型:对等模式(peer-to-peer paradigm)
应用层模式
提出:两个在不同地点的主机程序需要通过因特网基础设施彼此发送报文。然而,两者的关系应该清楚。是两者都应该能够请求和提供服务吗?还是应用程序仅仅实现这两种功能中的一个?
新模式:对等(p2p模式)
连接到因特网的计算机既可以接受服务,也可以提供服务。
对等模式无需一直运行和维护昂贵的服务器,它是容易扩展且经济划算的。
其存在的主要挑战是安全问题,在分布式服务之间创建安全通信比在那些由专用服务器控制的服务之间建立安全通信要更困难。
另一个挑战是实用性。
混合模式
一个应用可以通过结合这两种模式的优点来把这两者混合起来。
比如轻量级的c/s通信可以用来寻找可以提供服务的对等节点的地址。找到这个地址时,实际服务可以通过使用对等模式从对等结点中获得。
传统模式:客户-服务器(c/s)
服务提供者是一个称为服务进程的应用程序,不断运行,等待另一个称为客户进程的应用程序通过因特网建立连接并请求服务。
这种模式的问题是通信负荷集中在服务器上,这意味着服务器应该是一台强大的计算机。可能会面对大量客户同时尝试连接。另一个问题时花费。
应用程序接口
应用程序接口(Application Programming Inteface,API)
程序中的接口是两个实体之间的指令集。
一个实体是应用层中的进程,另一个是操作系统,操作系统封装了TCP/IP协议簇的前四层。
换句话说,电脑制造商将协议簇的前四层编写进操作系统中并包含了APU。
三个常见的通信API:套接字接口、传输层接口以及STREAM。
套接字接口的位置:应用层和传输层之间
套接字接口是提供应用层和操作系统间通信的指令集,是一个可以被某进程用来与另一个进程进行通信的指令集。
套接字
套接字不是物理实体,而是一种抽象。
套接字是提供应用程序创建和使用的数据结构。
就应用层而言,客户进程和服务器进程间的通信时两个套接字之间的通信。
套接字地址
c/s的交互式双向通信。
双向通信时,需要一对地址:本地地址和远程地址。
由于c/s模式的通信是在套接字之间进行的,还需要一对套接字地址(一个本地套接字地址和一个远程套接字地址)。
IP地址帮助定位到需要通信的计算机,然而计算机在同一时间可能有多个进程运行,这时就需要另一个标识符来识别。它就是端口。
于是乎,套接字地址应该是**一个IP地址和一个端口号的组合。**
服务器站点:
本地(服务器)套接字地址:
由操作系统提供。
服务器进程的端口号需要被分配。如果这个服务器进程是因特网管理结构定义的标准进程,那么端口号就已经分配好了。
比如超文本传输协议(HTTP)的端口是80.
远程(客户)套接字地址
客户套接字地址包含在发给服务器的请求报文中,它成为远程套接字地址来给客户提供相应。
使用传输层的服务
UDP:无连接、不可靠的数据报服务。无连接意味着两个交换报文的终端之间没有逻辑连接。每个报文都是独立的实体,被封装在一个称为数据报分组中。UDP是不可靠协议。简单,速度快。
TCP:面向连接的可靠的字节流传输。
标准客户-服务器应用
万维网WWW
结构:
如今的WWW是一个分布式客户-服务器服务。使用浏览器的用户可以访问一个正在服务器上运行的服务。
服务器分布在很多称为站点的地点上。每一个站点有一个或多个文档,它们可以成为网页。每个网页可以包含一些到其他网页的连接,那些被连接的网页可以在同一个站点也可以在其他站点。
网络客户(浏览器)
包括:控制程序、客户协议和解释程序。
控制程序:接收来自外设的输入并使用客户端程序来访问文档。文档被访问后,控制程序使用解释程序来在屏幕上显示文档。
网络服务器
为了提高效率,服务器通常将被请求的文件存储在内存的缓存中。
为了定义一个网页,需要以下三个标识符:主机、端口和路径。外加协议。
协议:绝大多数是HTTP,另外还有FTP等。
主机:主机标识符可以是服务器的IP地址或主机被给及的唯一名称。
端口:是一个16位的整数,通常为客户-服务器应用而预定义。比如用HTTP协议来访问网页,那么熟知端口号就是80.
路径:定义了下层的操作系统中文件的位置和名称。比如,/top/next/last/myfile是一个唯一定义myfile文件的路径。为了把这四部分组合在一起,设计出了统一资源定位符URL,其四个部分之间用三个不同的分隔符,如下所示:
protocol://host/path 绝大多数使用
protocol://host:port/path 当需要标识出端口号时使用
万维网上的文档可以分成三类:
- 静态文档
- 动态文档
- 活动文档
超文本传输协议HTTP
HTTP是一种用来定义客户服务器程序如何编写和如何从万维网获取网页的协议。
- 持续连接:HTTP1.1默认
- 非持续连接
报文格式:
- 请求报文
- 响应报文
Cookie
万维网起先被设计成无状态实体。客户发送请求;服务器响应。他们之间的关系就结束了。而cookie的设计使得客户端的信息存储在文件或字符串中而保存。
HTTP1.0的会话方式:
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。
对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
HTTP客户机和服务器会话的四个步骤:
客户机->服务器:建立连接
客户机->服务器:发出请求信息
客户机<-服务器:回送响应信息
客户机<-服务器:关闭连接
HTTP1.1的特点
在一个TCP连接上可以传送多个HTTP请求和响应
多个请求和响应过程可以重叠进行
增加了更多的请求和响应头。
HTTP1.0 和HTTP1.1的区别
1.0协议中,客户端与WEB服务器建立连接后,只能获得一个web资源。
1.1协议中,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
响应状态码典型情况:
200:正常
302/307:临时重定向,指出被请求的文档已被临时移动到别处。
304:未修改,表示客户机缓存的版本是最新的,客户机应该继续使用它。
403:禁止,服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件的权限设置所致。
404:找不到,服务器上不存在客户机请求的资源
500,:内部服务器错误
万维网高速缓存:代理服务器
代理服务器是一台计算机,能够保存最近请求的响应的副本。HTTP客户端向代理服务器发送请求。代理服务器检查本地高速缓存。
代理服务器降低了原服务器的负载,减少了通信量并降低了延迟。但是,为了使用代理服务器,必须配置客户端访问代理服务器而不是目标服务器。
HTTP安全
HTTP本质上并不提供安全。
然而,HTTP可以在安全套接层(SSL)上运行。这种情况下,HTTP称为HTTPS。
HTTPS提供保密性好,客户和服务器鉴别,以及数据完整性。
Ping命令
ping(Packet Internet Grope,因特网包探索器)是一个用于测试网络连接量的程序。
它使用的是ICMP,ping发送一个ICMP(Internet Control and Message Protocol,因特网控制报文协议)请求消息给目的地并报告是否收听到所希望的ICMP应答。
ICMP是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。它是用来检查网络是否通畅或者网络连接速度的命令。
当给目标IP地址发送一个数据包时,对方返回一个同样大小的数据包,根据返回的数据包可以确定目标主机的存在,可以初步判断目标主机的操作系统等。
域名解析过程
在浏览器地址栏中键入URL,按下回车之后发生的几个事情:
- 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址。
- 解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;
- 服务器给出响应,将对应的html文本发送给浏览器;
- 释放TCP连接;
- 浏览器将该文本显示出来。
OSI七层协议每层对应的相关协议
第一层:物理层
第二层:数据链路层 802.2、802.3ATM、HDLC、FRAME RELAY
第三层:网络层 IP、IPX、APPLETALK、ICMP
第四层:传输层 TCP、UDP、SPX
第五层:会话层 RPC、SQL、NFS 、X WINDOWS、ASP
第六层: 表示层 ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG
第七层:应用层 HTTP,FTP,SNMP等