第二章 网络应用

第二章 网络应用第二章网络应用 网络应用

大家好,欢迎来到IT知识分享网。



第二章 网络应用

 



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网络应用

一、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网络应用

一、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网络应用

一、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应用:原理与文件分发

  前面已经学习过了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} dminus
在这里插入图片描述
    可以看出,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应用:索引技术

一、索引的目的:搜索信息

  P2P系统的索引:信息到节点位置(IP地址+端口号)的映射。

  ⑴ 文件共享(电驴)

  ⑵ 即时消息()

二、方案一:集中式索引

  ⑴ 节点加入时,通知中央服务器该节点的IP地址和内容;

  ⑵ Alice查找文件“Hey Jude”;

  ⑶ Alice从Bob处请求文件;

  ⑷ 缺点:

  ⑸ 因此,可以采用分布式索引,例如洪泛式查询。

在这里插入图片描述

三、 方案二:洪泛式查询(Query flooding)

  ⑴ 完全分布式架构;

  ⑵ 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引;

  ⑶ 覆盖网络(overlay network): Grap;

  ⑷ 查询过程:

  ⑸ 缺点

四、方案三:层次式覆盖网络

  ⑴ 介于集中式索引和洪泛查询之间的方法;

  ⑵ 每个节点或者是一个超级节点,或者被分配一个超级节点;

  ⑶ 超级节点负责跟踪子节点的内容。

在这里插入图片描述

五、P2P案例应用:Skype

  ⑴ 本质上是P2P的:用户/节点对之间直接通信;

  ⑵ 私有应用层协议;

  ⑶ 索引时采用层次式覆盖网络架构;

  ⑷ 索引负责维护用户名与IP地址间的映射;

  ⑸ 索引分布在超级节点上。

  要注意,只时索引时要经过超级节点,数据传输时不经过超级节点,数据传输仍是P2P的,。

在这里插入图片描述
 



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编程-客户端软件设计

一、解析服务器IP地址

二、解析服务器(熟知)端口号

三、解析协议号

四、TCP客户端软件流程

五、UDP客户端软件流程



2.9 Socket编程-服务器软件设计

一、循环无连接服务器

1. 基本流程

2. 数据发送

3. 获取客户端点地址

二、循环面向连接服务器基本流程

  可以看到,无论循环面向连接服务器还是循环无连接服务器,都倾向于使用一个循环来反复不断接收客户的请求。

三、并发无连接服务器基本流程

四、并发面向连接服务器基本流程

  并发的含义是,在一个主进程运行的同时,还会有多个子线程在运行。

例1 无连接循环DAYTIME服务器
在这里插入图片描述
例2 面向连接并发DAYTIME服务器
在这里插入图片描述


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122553.html

(0)
上一篇 2025-10-15 20:45
下一篇 2025-10-15 21:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信