文章目录
1.网络应用的原理与概述
网络应用层概述
网络应用体系结构:
- 客户机/服务器(C/S结构)
- P2P(无永远在线的服务器,节点可能改变IP地址,间歇性接入网络,任意两个节点可直接通信例如两个文件的共享):高度可伸缩但难于管理。
- 混合结构
如:Napster:文件的传输用P2P结构,文件的搜索用C/S结构-集中式
网络应用的服务需求
- 可靠性
- 带宽
- 时延
Internet传输层服务模型
- TCP
- UDP
特定网络应用及协议
- HTTP
- SMTP,POP,IMAP
- DNS
- P2P应用
Socket编程
- TCP
- UDP
网络应用进程通信
进程:主机上运行的程序
同一主机上的进程之间通信:进程间通信进制,操作系统提供
不同主机上运行的进程通信:信息交换
客户机进程:发起通信的进程
服务器进程:等待服务器请求的进程(P2P也存在)
套接字:Socket
- 进程间通信利用socket发送/接收消息实现
- 类似于寄信(发送方将消息送到门外邮箱,发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的门外,接收方从门外获取信息)
- 传输基础设施向进程提供API:传输协议的选择,参数的设置
寻址进程
- 不同的主机上的进程间通信,那么每个进程必须拥有标识符。
- 寻址主机靠IP地址,但有了IP地址不足以定位进程,同一主机上可能同时需要多个进程需要通信。
- 故为主机上每个需要通信的进程(应用)分配一个端口号,如HTTP Server:80,Mail Server:25
进程的标识符:IP地址+端口号,一般形式为本地IP地址:端口号
应用层协议
- 网络应用需遵循应用层协议
- 公开协议:由RFC定义为允许应用间互操作,如HTTP,SMTP等
- 私有协议:多数P2P文件共享应用
应用层协议的内容
- 消息的类型:请求消息、响应消息
- 消息的语法格式:消息中有哪些字段,每个字段如何描述
- 字段的语义:字段中信息的含义
- 规则:进程何时(如何)发送/相应消息
网络应用的需求与传输层服务
数据丢失和可靠性要求
时间/延迟要求
带宽要求
Internet提供的传输服务
TCP服务
- 面向连接:客户机/服务器进程间需要建立连接
- 可靠的传输
- 流量控制
- 拥塞控制
- 不提供时间/延迟保障
- 不提供最小带宽保障
UDP服务
网络电话
- 无连接
- 不可靠的数据传输
- 不提供:可靠性保障,流量控制,拥塞控制,延迟与带宽保障
2.web应用Cookie概述与HTTP
Web应用概述
Web与HTTP
- 网页
- 网页互相连接
- 网页包含多个对象:对象:HTML文件、JPEG图片、视频文件、动态脚本等,基本HTML文件包含对其他对象引用的链接
- 对象的寻址:URL:统一资源定位器,Scheme://host(主机):port(端口号)/path
HTTP 协议概述
HTTP:超文本传输协议
C/S协议:客户——Broweser:请求、接受、展示Web对象、服务器——:响应客户的请求,发送对象。
一、使用TCP传输服务
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web应用服务器(HTTP服务器)交换HTTP消息
- 关闭TCP连接
二、无状态
(有状态的协议更复杂,且有致命问题存在)
- 服务器不维护任何有关客户端过去所发请求的信息
HTTP连接
一、 非持久性连接
- 每个TCP连接最多允许传输一个对象,发送后关闭TCP连接
- HTTP 1.0版本使用非持久性连接
二、持久性连接
- 每个TCP连接允许传输多个对象
- HTTP 1.1版本默认用持久性连接
RTT
- 从客户端发送一个很小的数据包到服务器并返回所经历的时间。
响应时间
-
发起、建立TCP连接:1个RTT
-
发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
-
响应消息中所含的文件/对象传输时间
-
获得一个对象的时间Total=2RTT+文件的发送时间
非持久性连接问题
- 每个对象需要2个RTT
- 操作系统需要为每个TCP连接开销资源
- 浏览器需要打开多个并行的TCP连接以获取网页所需对象,服务器会有很大的负担。
持久性连接
- 发送响应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过这个连接发送
无流水的持久性连接
- 客户端只有收到前一个响应后才发送新的请求
- 每个被引用的对象耗时1个RTT
带有流水机制的持久性连接
- HTTP 1.1的默认选项
- 客户端只要遇到一个引用对象就尽快发送请求
- 理想情况下,收到所有的引用对象只需耗时约1个RTT
HTTP请求消息
HTTP协议有两类消息
- 请求消息
- 响应消息
请求消息
-用ASCll写:人直接可读
请求行(request line):请求方法GET(POST)/URl/HTTP版本)
头部行(header lines):要访问的主机地址;代理浏览器类型;连接状态;要接收语言;回车空行表面消息结束
消息体
上传输入的方法
往服务器端发送消息:写密码时等情况
POST方法
- 网页经常需要填写表格
- 在请求消息的消息体中上传客户端的输入
URL方法
- 使用GET方法
- 输入信息通过request行的URL字段上传
方法类型
- HTTP/1.0
GET、POST \HEAD(请服务器不要将所请求的对象放入相应消息中)
- HTTP/1.1
GET,POST ,HEAD
PUT(将消息中的文件上传到URL字段所指定的路径)
DELETE(删除URL字段所指定的文件)
HTTP响应消息
- 状态行:响应消息的第一行,eg. 200 OK;301 Moved Permanently(这个网页被永久性移走了);400 Bad Request ;404 Not Found;505 HTTP Version Not Supported
- 头部行{连接状态;web服务器生成这个响应消息的时间;这边软件类型;上次的修改时间;内容长度;内容类型;空行;文件数据}
Cookie技术
HTTP协议是无状态的,但是很多应用需要服务器掌握客户端的状态,需要记录状态比如网上购物。
Cookie技术
- 某些网站为了辨别用户身份、进行session(会话)跟踪而储存在用户本地终端上的数据(通常经过加密)。
- RFC6256
Cookie的组件
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件,由浏览器管理
- web服务端的后台数据库
cookie的作用
- 身份认证
- 购物车
- 推荐
- Web e-mail
- 但有隐私问题存在
Web技术
功能
Web缓存/代理服务器技术
- 在不访问服务器的前提下满足客户端的HTTP请求。
- 可以缩短客户请求的响应时间。
- 减少机构/组织的流量
- 在大范围内实现有效的内容分发
Web缓存/代理服务器‘
- 用户设定浏览器通过缓存进行Web访问
- 浏览器向缓存/代理服务器发送所有的HTTP请求
- 若请求的对象在缓存中,缓存返回对象。否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象。
- 缓存即充当客户端,也充当服务器。
- 一般由ISP(Internet网络服务提供商)架设。
条件性GET方法
- 目标:如果缓存有最新版本,则不需要发送请求对象
- 缓存:在HTTP请求信息中声明所持版本的日期。If-modified-since:
- 服务器:如果缓存的版本是最新的,则响应信息中不包含对象,HTTP/1.0 304 Not Modified.
4.Email应用
Email应用概述
Email应用的构成组件
- 邮件客户端
- 邮件服务器
- SMTP协议
邮件客户端
- 读、写Email信息
- 与服务器交互,收、发Email消息
- Outlook,Foxmail,Thunderbird
- Web客户端
邮件服务器
- 邮箱:存储发给该用户的Email
- 消息队列:存储等待发送的Email
SMTP协议:RFC 2821
- 邮件服务器之间传递消息所使用的协议
- 客户端:发送消息的服务器
- 服务器:接收消息的服务器
- 使用TCP进行email消息的可靠传输
- 端口25
- 传输过程的三个阶段1.握手 2.消息的传输 3.关闭
命令/响应
交互模式:1.命令:ASCll文本;响应:状态代码和语句- Email信息只能包含7位ASCll码。
- 使用持久性连接
- 要求消息必须由7位ASCll构成
- SMTP服务器利用CRLF.CRLF确定消息结束
HTTP与SMTP对比
- HTTP:拉式(pull)
- SMTP :推式(push)
- 都使用命令响应交互模式
- 命令和代码都是ASCll码
- HTTP:每个对象封装在独立的响应消息中
- SMTP:多个对象在由多个部分构成的消息中发送。
Email消息格式与POP协议
Email消息格式
SMTP:email消息的传输/交换协议
RFC 822:文本消息格式标准
- 头部行
- TO From 与SMTP命令不同
- Subject
- 消息体
- 消息本身
- 只能说ASCII字符
MIME:多媒体邮件扩展 RFC 2045,2056
- 通过在邮件头部增加额外的行以声明MIME的类容类型。
邮件访问协议
邮件访问协议:从服务器获取邮件
- POP:Post Office Protocol[RFC 1939]
- 认证/授权(客户端 ↔ 服 务 器 \leftrightarrow 服务器 ↔服务器)和下载
- IMAP:Internet Mail Access Protocol[RFC 1730]
- 更多功能
- 更加复杂
- 能够操纵服务器上存储的信息
- HTTP:163,QQ Mail等。
POP协议
认证过程
- 客户端命令
- User:声明用户名
- Pass:声明密码
- 服务器响应
- +OK
- -ERR
事物阶段
- List:列出消息数量
- Retr:用编号获取信息
- Dele:删除信息
- Quit:退出
“下载并删除”模式:用户如果换了客户端软件,无法重读该邮件。
下载并保持模式:不同客户端都可以保留消息的拷贝。
POP3无状态的
IMAP协议
- 所有消息统一保存在一个地方:服务器
- 允许用户利用文件夹组织消息
- IMAP支持跨会话的用户状态:文件夹的名字、文件夹与消息ID之间的映射等
5.DNS的应用
DNS概述
IP地址(Internet上主机/路由器识别的一串数字)与域名(人类所使用的网站名等)之间存在映射关系。域名需要对应的翻译为IP地址。
DNS:域名解析系统(域名服务器)
- 多层命名服务器构成的分布式数据库
- 应用层协议:完成名字的解析
- Internet的核心功能,用应用层协议实现
- 网络边界复杂
DNS服务
- 域名向IP地址得到翻译
- 主机别名
- 邮件服务器别名
- 负载均衡:Web服务器
DNS不能采用集中式的DNS原因
-
单点失败问题
-
流量问题
-
距离问题
-
维护性问题
本地域名解析服务器无法解析域名时,访问根域名服务器
根域名服务器- 如果不知道与映射,访问权威域名服务器
- 获得映射
- 向本地域名服务器返回映射
顶级域名服务器(TLD):负责com,org,net,edu等顶级域名和国家顶级域名,如cn,uk,fr等
- Network Solutions维护com顶级域名服务器
- Educause维护edu顶级域名服务器
权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务。
- 组织负责维护
- 服务提供商负责维护
本地域名解析服务器
- 不严格属于层次体系
- 每个网络服务提供商(ISP)有一个本地域名服务器(默认域名解析服务器)
- 当主机进行DNS查询时,查询被发送到本地域名服务器(作为代理,将查询发送给层次级)域名解析服务器系
DNS查询分为迭代查询和递归查询
DNS记录缓存和更新
- 只要域名解析服务器获得域名——IP映射,即缓存这一映射
- 一段时间后,缓存条目失效(删除)
- 本地域名服务器一般会缓存顶级域名服务器的映射(因此根域名服务器不经常被访问)
DNS记录和消息格式
DNS记录
- 资源记录,格式:(name,value,type,ttl)
- Type=A类型
- Name:主机域名
- Value:IP地址 - Type=NS
- Name:域(edu.cn)
- Value:该域权威域名解析服务器的主机名
- Type=CNAME
- Name:某一真实域名的别名
- Value:真实域名
- Type=MX
- Value是与name相对应的邮件服务
6.P2P应用一原理与文件分发
P2P应用的基础概念与原理
- peer-to-peer
- 没有服务器
- 任意端系统之间直接通信
- 节点阶段性接入Internet
- 节点可能更换IP地址
BitTorrent协议(原理是互相共享)
节点可随时加入或离开
P2P应用:索引技术
P2P系统的索引:信息到节点的位置(IP地址+端口号)的映射
- 文件共享
- 即时消息(QQ)
索引的设计方法:
- 集中式索引,集中发给某一个去查询,它找到了返回
- 洪泛式查询(分布式)(给任意多个发送查询,它们再转发查询直到有某个命中,再返回命中路径)
- 层次式覆盖网络:介于集中式索引和洪泛式索引之间的方法
- 有节点和超级节点,节点和超级节点间维持TCP连接
- 某些超级节点对之间维持TCP连接
- 超级节点负责跟踪子节点的位置
套接字:Socket编程-应用编程接口(API)
- 应用层和底层其他层的桥梁:应用编程接口(API)
- 应用编程接口API:就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口
- 标识通信端点(对外):IP地址+端口号
- 操作系统/进程管理套接字(对内):用套接字的描述符
- Socket抽象类似于文件的抽象
- 当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息,并返回套接字描述符
地址结构
- 已定义结构socket_in:
- 使用TCP/IP协议簇的网络应用程序声明端点地址变量时,使用结构sockaddr_in
Socket API函数
对服务器来说服务器端绑定地址使用地址通配符:INADDR_ANY
客户端调用Connect()向服务器端发送连接请求
函数小结
网络字节顺序
通信调用基本流程
客户端软件设计
TCP客户端软件
UDP客户端软件
UDP一定是客户端先向服务端发送信息
服务器软件的实现
循环无连接
主线程和子线程可能同时运行,在子线程为某个客户提供服务时,主线程可能也正在接受另一个客户的请求。