应用层(下)

应用层

P2P应用

架构

image.png

文件分发:客户机/服务器 vs P2P

image.png

image.png

image.png

image.png

实例:BitTorrent

索引技术

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

文件共享(电驴)

  • 利用索引动态跟踪节点所共享的文件的位置
  • 节点需要告诉索引它拥有哪些文件
  • 节点搜索索引,从而获知能够得到哪些文件

即时消息(QQ)

  • 索引负责将用户名映射到位置
  • 当用户开启IM应用时,需要通知索引它的位置
  • 节点检索索引,确定用户的IP地址
集中式索引

image.png

内容和文件传输是分布式的,但是内容定位是高度集中式的。

  • 单点失效问题
  • 性能瓶颈
  • 版权问题
洪泛式查询:Query flooding
  • 完全分布式架构
  • Gnutella采用这种架构
  • 每个节点对它共享的文件进行索引,且只对她共享的文件进行索引

覆盖网络

  • 节点X与Y之间如果有TCP连接,那么构成一个边
  • 所有的活动节点和边构成覆盖网络
  • 边:虚拟链路
  • 节点一般邻居数少于10个

image.png

层次式覆盖网络

image.png

案例:Skype

Scoket应用

image.png

应用编程接口API

image.png

就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口

几种典型的应用编程接口:

  • Berkeley UNIX操作系统定义了一种API,称为套接字接口(socket interface),简称套接字(socket)。
  • 微软公司在其操作系统中采用了套接字接口API,形成了一个稍微不同的API,并称之为Windows Socket Interface,WINSOCK。
  • AT&T为其UNIX系统V定义了一种API,简写为TLI(Transport Layer Interface)。

Socket API

  • 最初设计

    • 面向BSD UNIX-Berkley
    • 面向TCP/IP协议栈接口
  • 目前

    • 事实上的工业标准
    • 绝大多数操作系统都支持
  • Internet网络应用最典型的API接口

  • 通信模型

    • 客户/服务器(C/S)
  • 应用进程间通信的抽象机制

image.png

Socket抽象

image.png

image.png

Socket API 函数(没听懂)详解

Socket面向TCP/IP的服务类型

image-20220216200318662

网络字节顺序

  • TCP/IP定义了标准的用于协议中的二进制整数表示:网络字节顺序(network byte order)
  • 某些Socket API函数的参数需要存储为网络字节顺序(如IP地址、端口号等)
  • 可以实现本地字节顺序与网络字节顺序间转换的函数
    • htons:本地字节顺序->网络字节顺序(16bits)
    • ntohs:网络字节顺序->本地字节顺序(16bits)
    • htonl:本地字节顺序->网络字节顺序(32bits)
    • ntohl:网络字节顺序->本地字节顺序(32bits)

网络应用的Socket API(TCP)调用的基本流程

image.png

解析服务器IP地址

image.png

解析服务器端口号

image.png

解析协议号

image.png

TCP客户端软件流程

image.png

UDP客户端软件流程

image.png

4种类型的基本服务器

  • 循环无连接服务器
  • 循环面向连接服务器
  • 并发无连接服务器
  • 并发面向连接服务器

。。。。。。