应用层(一)

 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是后发明的

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-03-13 15:33  红tea  阅读(47)  评论(0编辑  收藏  举报