应用层(一)
Internet 的整个体系结构是符合TCP/IP协议栈的,应用层在协议栈的最上层。
application
transport
network
link
physical
网络应用体系结构
*客户机/服务器
*P2P
*混合结构
网络应用的服务需求
*可靠性
*带宽
*时延
Internet传输层服务模型
*TCP
*UDP
特定网络应用及协议
*HTTP
*SMTP、POP、IMAP
*DNS
*P2P应用
Socket编程
*TCP
*UDP
网络应用的体系结构
你使用过哪些网络应用?百度、QQ、email、迅雷、微信、支付宝、百度云、淘宝网
与单机应用有哪些本质性的不同?网络应用需要网络基础环境,有一部分软件是跑在我们自己计算机上,比如浏览器;还有一部分软件以及数据信息等等,跑在互联网的某一个地方,某些硬件服务器上。这两个软件会互相交互,才共同构成了一个网络应用。这个是网络应用和单机应用的不同之处。
客户机/服务器结构(Clinet-Server,C/S)
点对点结构(Peer-to-Peer,P2P)
混合结构(Hybrid)
客户机/服务器结构(Clinet-Server,C/S)
服务器:
*7*24小时提供服务
*永久性访问地址/域名
*利用大量服务器实现可扩展性
客户机:
*与服务器通信,使用服务器提供的服务
*间歇性接入网络
*可能使用动态IP地址
*不会与其他客户机直接通信
纯P2P结构
*没有永远在线的服务器
*任意端系统/节点之间可以直接通信
*节点间歇性接入网络
*节点可能改变IP地址
优点:高度可伸缩
缺点:难于管理
混合结构
能否将两种结构混合在一起使用?
混合能够利用两者的优点同时规避两者的缺点吗?
*Napster
文件传输使用P2P结构
文件的搜索采用C/S结构——集中式
每个结点向中央服务器登记自己的内容
每个结点向中央服务器提交查询请求,查找感兴趣的内容
网络应用进程通信
*进程:
主机上运行的程序
*同一主机上运行的进程之间如何通信
进程间通信机制
操作系统提供
*不同主机上运行的进程间如何通信
消息交换
采用P2P架构的应用是否存在客户机进程/服务器进程之分?
套接字
*进程间通信利用socket发送/接收消息实现
*类似于寄信
发送方将消息送到门外邮箱
发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的门外。
接收方从门外获取消息
*传输基础设施向进程提供API (传输基础设施是我们进程间通信所依赖的东西,它是由网络协议栈构成,一般我们所有操作系统都是网络化操作系统,这相当于是操作系统提供的关于网络编程的API:SOCKET。开发网络应用要调用这些API,使用SOCKET,所以网络应用的开发也叫SOCKET编程。)
传输协议的选择
参数的设置
如何寻址进程?
*不同主机上的进程通信,那么每个进程必须拥有标识符
*如何寻址主机——IP地址
Q:主机有了IP地址后,是否足以定位进程?
A:否。同一主机上可能同时有多个进程需要通信
*端口号/Port number
为主机上每个需要通信的进程分配一个端口号
HTTP Server:80
Mail Server:25
*进程的标识符
ip地址 + 端口号
应用层协议
*网络应用需遵循应用层协议
*公开协议
由RFC(Request For Comments)定义
允许互操作
HTTP、SMTP……
*私有协议
多数P2P文件共享应用
应用层协议的内容
*消息的类型(type)
请求响应
响应消息
*消息的语法(Syntax)/格式
消息中有哪些字段(field)?
每个字段如何描述?
*字段的语义(Semantics)
字段中信息的含义
规则(Rules)
进程何时发送/响应消息
进程如何发送/响应消息
Web应用的概述
Web与HTTP
*World Wide Web:Tim Berners-Lee
网页
网页互相链接
*网页(Web Page)包含多个对象(objects)
对象:HTML文件、JPEG图片、视频文件、动态脚本等
基本HTML文件:包含对其它对象引用的链接
*对象的寻址
URL (Uniform Resoure Locator): 统一资源定位器 RFC1738
Scheme://host:port/path
HTTP协议概述
*万维网应用遵循什么协议?
*超文本传输协议
HyperText Transfer Protocol
*C/S结构
客户——Browser:请求、接收、展示Web对象
服务器——Web Server:响应客户的请求,发送对象
*HTTP版本
1.0:RFC1945
1.1:RFC2068
*使用TCP传输服务
服务器在80端口等待客户的请求
浏览器发起到服务器的TCP连接(创建套接字Socket)
服务器接受来自浏览器的TCP连接
浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
关闭TCP连接
*无状态(stateless)
服务器不维护任何有关客户端过去所发请求的信息
HTTP连接的两种类型
HTTP请求消息
第一行:请求行
`第一部分:请求命令。get是一个请求方法(get/post/head……)。后面是url + http版本
第二行:头部行
TCP连接建立,还要声明访问的主机码?答:有用信息:缓存和代理服务器时使用此信息。
第三行:代表浏览器。告诉服务器后,服务器有可能针对浏览器类型发送适合你的那个版本
第四行:发完这个之后可以把TCP连接关闭了
第五行:法语
HTTP请求消息的通用格式
head:做测试用的
delete和put互相对应
响应消息是用ASCII写的,可以直接读
第一行:状态行。告诉状态代码。
第二行等等:头部行。
date:Web服务器生成响应消息的时间
last-modified:上次修改时间(携带对象的最后一次修改时间)
server:web服务器软件是阿帕奇。感兴趣的话可以装机,假设一个Web服务。
content-length:内容长度
content-type:文本类型
COOKIE技术
HTTP是一种无状态的,服务器不记录客户的历史行为,带来一些问题:
很多应用需要服务器掌握客户端的状态,如网上购物
头部行是可扩展的,cookie是后发明的
、