大家好,欢迎来到IT知识分享网。
第二章 网络应用
第二章 网络应用
2.1 网络应用的基本原理
2.1 网络应用的基本原理
一、网络应用体系结构
1. 客户机/服务器结构(Client-Server,C/S)
⑴ 服务器
⑵ 客户机
⑶ 举例:
2. 点对点结构(Peer-to-peer,P2P)
⑴ 特点:
⑵ 优缺点:
⑶ 举例:
文件共享。
3. 混合结构(Hybrid)
⑴ 文件传输使用P2P结构;
⑵ 文件的搜索采用C/S结构——集中式。
二、网络应用进程通信
自己计算机上的进程要与服务器上的进程进行通信,这样才能完成网络应用的特定功能。
1. 网络应用的基础:进程间通信
⑴ 客户机进程: 发起通信的进程。
⑵ 服务器进程: 等待通信请求的进程。
2. 套接字(Socket)
3. 如何寻址进程?
不同主机上的进程间通信,那么每个进程必须拥有标识符,这样才能把消息送到指定主机。
⑴ 寻址主机
⑵ 寻址进程
⑶ 进程的标识符 = IP地址 + 端口号。
4. 应用层协议
具体来说,消息交换应该使用什么格式?应该遵循怎样的顺序?这些问题都由应用层协议来确定。
⑴ 网络应用需遵循应用层协议。
⑵ 公开协议
⑶ 私有协议
多数P2P文件共享应用。
5. 应用层协议的内容
⑴ 消息的类型(type):
⑵ 消息的语法(syntax)/格式:
⑶ 字段的语义(semantics):
字段中信息的含义。
⑷ 规则(rules):
三、网络应用需求与传输层服务
1. 网络应用对传输服务的需求
⑴ 数据丢失(data loss)/ 可靠性(reliability)
⑵ 时间(timing)/ 延迟(delay)
有些应用只有在延迟足够低时才“有效”,例如:网络电话、网络游戏。
⑶ 带宽(bandwidth)
⑷ 其他要求
安全性等。
⑸ 举例:典型网络应用对传输服务的需求
可以看到,e-mail要求数据无丢失,但是对带宽和延迟没有要求;视频电话允许有数据丢失,但是对带宽和延迟要求很高。
2. Internet提供的传输服务
⑴ TCP服务
⑵ UDP服务
⑶ 典型网络应用所使用的传输层服务
可以看到,e-mail选择了最可靠的TCP服务;而互联网电话则选择了UDP,虽然UDP不提供任何保障,但是可以采取其他措施来保障互联网电话的带宽和延迟。
2.2 Web网络应用
2.2 Web网络应用
一、Web应用和HTTP协议概述
1. Web应用概述
⑴ Web的要素
⑵ 网页(Web Page)
⑶ 对象的寻址(addressing)
2. HTTP协议概述
万维网应用遵循什么协议?
⑴ 超文本传输协议(HyperText Transfer Protocol)
⑵ HTTP采用C/S结构
⑶ HTTP版本:
⑷ TCP传输服务
⑸ HTTP协议是一个无状态(stateless)协议
二、HTTP连接类型
Web所遵循的应用层协议是HTTP,而HTTP依靠TCP来建立连接。在对TCP的使用上,有两种不同的使用方法(也叫两种不同的HTTP连接类型)。
1. 非持久性连接(NonpersistentHTTP)
⑴ 特点:
⑵ 工作流程
⑶ 响应时间分析与建模
⑷ 非持久性连接的问题
2. 持久性连接(Persistent HTTP)
⑴ 特点:
⑵ 无流水(pipelining)的持久性连接
⑶ 带有流水机制的持久性连接
三、HTTP消息格式
HTTP协议有两类消息:请求消息(request)、响应消息(response)。
1. HTTP请求消息
⑴ 请求消息使用ASCII码写的
⑵ HTTP请求消息的通用格式
⑶ 上传输入的方法
⑷ 请求命令(方法)的类型
2. HTTP响应消息
⑴ 响应消息也是用ASCII码写的
⑵ HTTP响应状态代码
四、Cookie技术
⑴ 为什么需要Cookie?
⑵ Cookie技术
⑶ Cookie的原理
⑷ Cookie的作用
五、Web缓存/代理服务器技术
⑴ 功能和好处
⑵ 如何实现?
⑶ Web缓存示例
⑷ 解决方案1
⑸ 解决方案2
⑹ 条件性GET方法
2.3 Email网络应用
2.3 Email网络应用
一、Email应用的构成
1. Email应用的构成组件
⑴ 邮件客户端(user agent)
⑵ 邮件服务器
⑶ SMTP协议(Simple Mail Transfer Protocol)
2. SMTP协议
⑴ 使用TCP进行email消息的可靠传输;
⑵ 端口25;
⑶ 传输过程的三个阶段:
⑷ 命令/响应交互模式
⑸ Email消息只能包含7位ASCII码
3. SMTP交互示例
4. SMTP协议的特点
⑴ 使用持久性连接;
⑵ 要求消息必须由7位ASCII码构成;
⑶ SMTP服务器利用CRLF.CRLF(回车换行、点、回车换行)确定消息的结束。
⑷ 与HTTP对比:
二、Email消息格式与POP协议
1. Email消息格式
⑴ 文本消息格式标准
⑵ 多媒体扩展
2. 邮件访问协议
邮件的传输协议是SMTP,从服务器获取邮件要使用邮件的访问协议。(Email应用使用了不止一个应用层协议)
⑴ POP: Post Office Protocol
认证/授权(客户端←→服务器)阶段和下载阶段
⑵ IMAP: Internet Mail Access Protocol
⑶ HTTP:163, Mail等。
基于Web的网络应用的确使用HTTP进行邮件访问。
3. POP协议
⑴ 认证过程
⑵ 事务阶段
⑶ 模式
⑷ POP3协议是无状态的
3. IMAP协议
⑴ 所有消息统一保存在一个地方:服务器;
⑵ 允许用户利用文件夹组织消息;
⑶ IMAP支持跨会话(Session)的用户状态(即所有客户端均同步)。
2.4 DNS网络应用
2.4 DNS网络应用
一、DNS概述
1. 域名解析系统(DNS)简介
⑴ DNS是多层命名服务器构成的分布式数据库;
⑵ DNS是应用层协议,用于完成名字的解析。
2. DNS提供的服务
⑴ 域名向IP地址的翻译;
⑵ 别名服务;
⑶ 负载均衡:
某些网站的访问量十分巨大,一个服务器不能满足需求,就需要为一个域名配置多个服务器。当进行域名向多个服务器的IP地址的翻译时,可以提供一个域名到多个IP地址的映射,只需要调整多个IP地址的顺序,让用户访问排名第一的IP地址,而多个IP地址轮流排名第一,就能实现负载均衡。
3. 为什么不使用集中式的DNS?
⑴ 单点失败问题
如果这一个DNS服务器出现故障,整个互联网都将瘫痪;
⑵ 流量问题
全世界的主机都将访问这一台DNS服务器,届时流量将非常巨大;
⑶ 距离问题
这一台DNS设置在什么位置,离哪个国家近,哪个国家远,都是难以解决的问题;对于那些距离这一台DNS服务器距离很远的国家而言,时间延迟的问题很严重;
⑷ 维护性问题
流量巨大、稳定性要求极高的服务器,维护难度非常高。
4. 分布式层次式数据库
⑴ 根服务器
⑵ 顶级域名服务器(com)
⑶ 权威域名服务器(企业、学校)
5. 查询IP地址举例
客户端想要查询www.amazon.com的IP
6. 根域名服务器
7. 顶级域名服务器(TLD, top-level domain)
8. 权威(Authoritative)域名服务器
组织(企业、学校)的域名解析服务器,提供组织内部服务器的解析服务。
9. 本地域名解析服务器
⑴ 不严格属于层级体系;
⑵ 每个ISP有一个本地域名服务器;
⑶ 当主机进行DNS查询时,查询被发送到本地域名服务器。
10. DNS查询示例
例如Cis.poly.edu的主机想获得gaia.cs.umass.edu的IP地址:
⑴ 迭代查询
⑵ 递归查询
11. DNS记录缓存和更新
⑴ 只要域名解析服务器获得域名—IP映射,即缓存这一映射;
⑵ 记录的更新和通知都有一定的机制。
二、DNS记录和消息格式
DNS是多层命名服务器构成的分布式数据库,那么数据库里存储信息的格式是什么样的?
1. DNS记录
⑴ 也称做资源记录(RR,resource records)。
⑵ 格式:四元组(name,value,type,ttl)。
2. DNS协议与消息格式
⑴ DNS协议:
⑵ 消息头部
3. 如何注册域名?
例子:你刚刚创建了一个公司 “Network Utopia”:
⑴ 在域名管理机构(如Network Solutions)注册域名networkutopia.com;
⑵ 在权威域名解析服务器中为www.networkuptopia.com加入Type A记录,为networkutopia.com加入Type MX记录。
2.5 P2P应用:原理与文件分发
2.5 P2P应用:原理与文件分发
前面已经学习过了Web应用、Email应用、DNS应用,这些都是CS架构的应用,下面来学习P2P结构的应用。
一、纯P2P架构的特点
1. 没有服务器;
2. 任意端系统之间直接通信;
3. 节点阶段性接入Internet;
4. 节点可能更换IP地址;
5. 缺点:复杂、难以管理。
二、以文件分发为例:C/S vs. P2P
问题 : 从一个服务器向N个节点分发一个文件需要多长时间?
1. 客户机/服务器架构下文件分发
⑴ 服务器串行地发送N个副本,所需时间: N F u s \frac{NF}{u_{s}} usNF
⑵ 客户机 i i i需要 F d i \frac{F}{d_{i}} diF时间下载
2. P2P架构下文件分发
P2P的特点在于,每台主机之间都可以进行文件共享。
⑴ 服务器必须发送一个副本,时间: F u s \frac{F}{u_{s}} usF
⑵ 客户机 i i i需要 F d i \frac{F}{d_{i}} diF时间下载
⑶ 总共需要下载 N F NF NF比特
⑷ 最快的可能上传速率: u s + Σ u i u_{s}+\Sigma u_{i} us+Σui
3. 具体的例子
客户端上传速率 = u = u =u, F u = \frac{F}{u} = uF= 1小时, u s = 10 u u_{s} = 10u us=10u, d m i n ≥ u s d_{min} ≥ u_{s} dmin≥us
可以看出,P2P对于文件分发这个应用,具有很好的扩展性。
4. 文件分发协议:BitTorrent
⑴ torrent: 交换同一个文件的文件块(chunk)的节点组(即哪些主机正在相互传输同一个文件);
⑵ tracker: 跟踪参与torrent的节点(即记录torrent);
⑶ 某个节点(Alice)申请加入torrent,要先从tracker获取节点列表,然后和某些其他节点建立连接,传输文件块(chunk)。
5. BitTorrent的特点
⑴ 文件划分为256KB的chunk;
⑵ 节点在加入torrent时,没有chunk,但是会逐渐积累,向tracker注册以获得节点清单,与某些节点(“邻居”)建立连接;
⑶ 下载的同时,节点需要向其他节点上传chunk;
⑷ 节点可能加入或离开;
⑸ 一旦节点获得完整的文件,它可能(自私地)离开或(无私地)留下。
6. BitTorrent的获取发送规则
⑴ 获取chunk:
⑵ 发送chunk:tit-for-tat(以牙还牙,一报还一报)
7. BitTorrent技术对网络性能有哪些潜在的危害?
⑴ 版权危害:
用户可以随意分享文件,无需顾虑版权;
⑵ 带宽危害:
P2P传输占用大量的带宽,影响用户使用其他网络应用;
⑶ 硬盘危害:
2.6 P2P应用:索引技术
2.6 P2P应用:索引技术
一、索引的目的:搜索信息
P2P系统的索引:信息到节点位置(IP地址+端口号)的映射。
⑴ 文件共享(电驴)
⑵ 即时消息()
二、方案一:集中式索引
⑴ 节点加入时,通知中央服务器该节点的IP地址和内容;
⑵ Alice查找文件“Hey Jude”;
⑶ Alice从Bob处请求文件;
⑷ 缺点:
⑸ 因此,可以采用分布式索引,例如洪泛式查询。
三、 方案二:洪泛式查询(Query flooding)
⑴ 完全分布式架构;
⑵ 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引;
⑶ 覆盖网络(overlay network): Grap;
⑷ 查询过程:
⑸ 缺点
四、方案三:层次式覆盖网络
⑴ 介于集中式索引和洪泛查询之间的方法;
⑵ 每个节点或者是一个超级节点,或者被分配一个超级节点;
⑶ 超级节点负责跟踪子节点的内容。
五、P2P案例应用:Skype
⑴ 本质上是P2P的:用户/节点对之间直接通信;
⑵ 私有应用层协议;
⑶ 索引时采用层次式覆盖网络架构;
⑷ 索引负责维护用户名与IP地址间的映射;
⑸ 索引分布在超级节点上。
要注意,只时索引时要经过超级节点,数据传输时不经过超级节点,数据传输仍是P2P的,。
2.7 Socket编程
2.7 Socket编程
一、Socket编程简介
二、应用编程接口 API
几种典型的应用编程接口:
后面在介绍例子时,都是以 WINSOCK 为例。
三、Socket API概述
四、Socket抽象
五、地址结构
六、Socket API函数 (WinSock)
WSAStartup 和 WSACleanup 只能在 WinSock 中使用,后续不带 WSA 的函数在 UNIX 和 Linux 的 Berkeley Socket 中也可以使用。
⑴ WSAStartup
使用Socket的应用程序在使用Socket之前必须首先调用WSAStartup函数
两个参数:
✦ 第一个参数指明程序请求使用的WinSock版本
• 高位字节指明副版本、低位字节指明主版本
• 十六进制整数,例如0x102表示2.1版
✦ 第二个参数返回实际的WinSock的版本信息
• 指向WSADATA结构的指针
例:使用2.1版本的WinSock的程序代码段
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); wVersionRequested = MAKEWORD( 2, 1 ); err = WSAStartup( wVersionRequested, &wsaData );
⑵ WSACleanup
应用程序在完成对请求的Socket库的使用, 最后要调用WSACleanup函数
解除与Socket库的绑定
释放Socket库所占用的系统资源
⑶ socket
创建套接字
操作系统返回套接字描述符 (sd)
第一个参数 (协议族): protofamily = PF_INET (TCP/IP)
第二个参数 (套接字类型):
✦ type = SOCK_STREAM, SOCK_DGRAM or SOCK_RAW (TCP/IP)
第三个参数 (协议号):0为默认
例:创建一个流套接字的代码段
struct protoent *p; p = getprotobyname("tcp"); SOCKET sd = socket(PF_INET,SOCK_STREAM,p->p_proto);
Socket面向TCP/IP的服务类型
TCP:可靠、面向连接、字节流传输、点对点
UDP:不可靠、无连接、数据报传输
⑷ Closesocket
关闭一个描述符为sd的套接字
如果多个进程共享一个套接字,调用closesocket将套接字引用计数减1,减至0才关闭
一个进程中的多线程对一个套接字的使用无计数
✦ 如果进程中的一个线程调用closesocket将一个套接字关闭,
该进程中的其他线程也将不能访问该套接字
返回值:
✦ 0:成功
✦ SOCKET_ERROR:失败
⑸ bind
绑定套接字的本地端点地址
✦ IP地址+端口号
参数:
✦ 套接字描述符 (sd)
✦ 端点地址 (localaddr)
• 结构sockaddr_in
客户程序一般不必调用bind函数
✦ 操作系统会帮助我们设置
服务器端:
✦ 端口号使用熟知端口号
✦ IP地址呢?一个服务器通常有多个网卡多个IP地址,应该绑定哪一个?
✦ 解决方案:使用地址通配符 INADDR_ANY,IP地址赋值为 INADDR_ANY 即可
✦ 也就意味着客户可以通过任意的IP地址访问服务器
⑹ listen
置服务器端的流套接字处于监听状态
✦ 仅服务器端调用
✦ 仅用于面向连接的流套接字
设置连接请求队列大小 (queuesize):当很多请求到来时,可以在队列中缓存
返回值:
✦ 0:成功
✦ SOCKET_ERROR:失败
⑺ connect
客户程序调用connect函数来使客户套接字 (sd) 与特定计算机的特定端口 (saddr) 的套接字 (服务) 进行连接
仅用于客户端
可用于TCP客户端也可以用于UDP客户端
✦ TCP客户端:建立TCP连接
✦ UDP客户端:并不建立连接,只是指定服务器端点地址
⑻ accept
服务程序调用accept函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道
✦ 仅用于TCP套接字
✦ 仅用于服务器
利用新创建的套接字 (newsock) 与客户通信
由于TCP连接是点对点的,因此如果服务器使用主套接字与客户连接的话,其他客户就无法连接服务器。所以要建立一个新套接字用以和客户连接,这样才能实现并发的功能。
⑼ send, sendto
send函数用于TCP套接字 (客户与服务器) 或调用了connect函数的UDP客户端套接字 (已经连接或者已经指定目的地址,因此参数中没有地址)
sendsendto函数用于UDP服务器端套接字与未调用connect函数的UDP客户端套接字 (未指定地址,因此参数中有地址)
⑽ recv, recvfrom
recv函数从TCP连接的另一端接收数据,或者从调用了connect函数的UDP客户端套接字接收服务器发来的数据 (已经知道数据来源的地址,因此参数中没有地址)
recvfrom函数用于从UDP服务器端套接字与未调用connect函数的UDP客户端套接字接收对端数据 (并不知道数据来源的地址,因此参数中有地址)
⑾ setsockopt, getsockopt
setsockopt()函数用来设置套接字sd的选项参数
getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval
Socket API函数小结
七、关于网络字节顺序
八、网络应用的Socket API (TCP) 调用基本流程
2.8 Socket编程-客户端软件设计
2.8 Socket编程-客户端软件设计
一、解析服务器IP地址
二、解析服务器(熟知)端口号
三、解析协议号
四、TCP客户端软件流程
五、UDP客户端软件流程
2.9 Socket编程-服务器软件设计
2.9 Socket编程-服务器软件设计
一、循环无连接服务器
1. 基本流程
2. 数据发送
3. 获取客户端点地址
二、循环面向连接服务器基本流程
可以看到,无论循环面向连接服务器还是循环无连接服务器,都倾向于使用一个循环来反复不断接收客户的请求。
三、并发无连接服务器基本流程
四、并发面向连接服务器基本流程
并发的含义是,在一个主进程运行的同时,还会有多个子线程在运行。
例1 无连接循环DAYTIME服务器
例2 面向连接并发DAYTIME服务器
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122553.html