2、应用层

应用层

1.网络应用体系结构

  • CS(客户机/服务器结构)
  • P2P(点对点结构)
  • Hybird(混合结构)

网络应用之Web应用 World Wide Web

网页(Web Page)

  • 网页对象:HTML文件、JPEG图片、视频文件、动态脚本等
  • 基本HTML文件:包含对其他对象引用的链接
  • 网页寻址:URL(Uniform Resoure Location):统一资源定位器
  • URL的基本格式:Scheme://host:port/path(协议://主机:端口/路径)

HTTP协议(HyperText Transfer Protocol超文本传输协议)

C/S结构

  • 客户(Browser):请求、接收、展示Web对象
  • 服务器(Web Server):响应客户请求,发送对象 Apache最常用

Http版本

  • 1.0:RFC1945
  • 1.1:RFC2068

HTTP为应用层协议,传输层协议使用TCP

过程如下:

  • 服务器在80端口等待客户请求;
  • 浏览器发起到服务器的TCP连接(创建套接字SOCKET)
  • 服务器接收来自浏览器的TCP连接
  • 浏览器与服务器交换消息
  • 关闭TCP连接

HTTP连接的两种类型:非持久性(1.0版本)与持久性(1.1版本)

  • 非持久性:一个TCP连接只允许传输一个对象,传输完要重新连接
  • 持久性:每次连接允许传输多个对象,传输时间短

HTTP协议格式:请求与响应

请求消息(Request)与响应消息(Response)

Cookies技术

需要cookies的原因:HTTP协议无状态,但网页需要记住用户某些状态如记住密码、购物车信息之类

Web缓存/代理服务器技术

  • 功能:实现在不访问服务器前提下满足客户端的HTTP请求
  • 优点:

缩短客户请求的相应时间
减少机构/组织的流量
在大范围内实现有效的内容分发

因此缓存服务器要与广域网上的真正服务器实时更新
Last Modified即最近更新的日期

2.4 Email应用

SMTP邮件传输协议

2.5 DNS应用(Domain Name System)

-作用:解决Internet上主机/路由器的识别问题

  • 功能:ip地址与域名的映射

DNS:域名解析系统

  • 多层命名服务器构成的分布式数据库
  • 应用层协议:完成名字的解析

DNS服务

  • 域名向IP地址的翻译
  • 主机别名
  • 邮件服务器别名
  • 负载均衡:如Web服务器 一个域名映射多个服务器IP地址

分布式层次式数据库

2、应用层_第1张图片
2.1.png

域名查询方式

  • 迭代查询
2、应用层_第2张图片
2.2.png
  • 递归查询
2、应用层_第3张图片
2.3.png

DNS协议格式:

查询(query)和回复(reply)

2.6 P2P传输:BT(BitTorrent协议)

  • 下载时,BT客户端首先解析.torrent文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据.torrent文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。

P2P系统的索引的作用:

文件共享:

  1. 利用索引动态跟踪结点所共享文件的位置
  2. 结点告诉索引它拥有哪些文件
  3. 结点搜索索引获知能够得到哪些文件

即时消息:

  1. 索引将用户名映射到位置
  2. 当用户开启IM应用时,通知索引它的位置
  3. 结点检索索引,确定用户的IP地址

P2P系统索引结构

  1. 集中式索引:结点都向中央服务器查找
  2. 洪泛式索引:结点向与它有TCP连接的其他结点查询,其他结点向其他的继续转发查询,找到后用反向路径定位
  3. 层次式覆盖网络:集中式和洪泛式的结合,一群结点与超级结点连接,超级结点互相连接

2.7 Socket套接字编程

基本流程

2、应用层_第4张图片
2.4.png

客户端软件设计

1.解析服务器的地址

由于客户使用域名(www.baidu.com)或点分式十进制IP地址(123.58.180.121)访问服务器,而IP协议需要的是32位二进制的IP地址,所以需要将域名或十进制IP地址转换为32位二进制IP地址

  • 函数inet_addr()实现点分十进制到32位二进制IP转换
  • 函数gethostbyname()实现域名到32位二进制IP转换

2.解析服务器端口号

客户端使用服务名(如HTTP)标识服务器端口,因此将服务名转换为熟知端口号

  • 函数getservbyname()实现服务器到端口号的转换

3.解析协议号

客户端使用协议名指定协议,因此需要将协议名转换为协议号

  • 函数getprotobyname()实现协议名到协议号的转换

服务器软件设计

四种类型

  1. 循环无连接 (单线程UDP)
  2. 循环面向连接 (单线程TCP)
  3. 并发无连接 (多线程UDP)
  4. 并发面向连接 (多线程TCP)

你可能感兴趣的:(2、应用层)