应用层
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地址
分布式层次式数据库

域名查询方式
- 迭代查询

- 递归查询

DNS协议格式:
查询(query)和回复(reply)
2.6 P2P传输:BT(BitTorrent协议)
- 下载时,BT客户端首先解析.torrent文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据.torrent文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。
P2P系统的索引的作用:
文件共享:
- 利用索引动态跟踪结点所共享文件的位置
- 结点告诉索引它拥有哪些文件
- 结点搜索索引获知能够得到哪些文件
即时消息:
- 索引将用户名映射到位置
- 当用户开启IM应用时,通知索引它的位置
- 结点检索索引,确定用户的IP地址
P2P系统索引结构
- 集中式索引:结点都向中央服务器查找
- 洪泛式索引:结点向与它有TCP连接的其他结点查询,其他结点向其他的继续转发查询,找到后用反向路径定位
- 层次式覆盖网络:集中式和洪泛式的结合,一群结点与超级结点连接,超级结点互相连接
2.7 Socket套接字编程
基本流程

客户端软件设计
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()实现协议名到协议号的转换
服务器软件设计
四种类型
- 循环无连接 (单线程UDP)
- 循环面向连接 (单线程TCP)
- 并发无连接 (多线程UDP)
- 并发面向连接 (多线程TCP)
网友评论