计算机网络学习(三) 网络应用(应用层)Ⅱ

正在学习计算机网络课程,以下是学习《计算机网络-自顶向下方法》的一些笔记,部分图片来自mooc网 哈尔滨工业大学 计算机网络课程:https://www.icourse163.org/course/HIT-154005。

文章目录

  • 1. P2P应用
    • 1.1 纯P2P架构
    • 1.2文件分发
  • 2.Socket编程
    • 2.1应用编程接口API
    • 2.2Socket API
    • 2.3Socket API函数(WinSock)

1. P2P应用

1.1 纯P2P架构

  • 没有服务器
  • 任意端系统间直接通信
  • 节点阶段性接入Internet
  • 节点可能更换 IP 地址
    计算机网络学习(三) 网络应用(应用层)Ⅱ_第1张图片
    以下以具体应用讲解P2P架构

1.2文件分发

计算机网络学习(三) 网络应用(应用层)Ⅱ_第2张图片

  • 在C/S架构中,服务器穿行地发送N个副本,所需时间为 NF/ Us;客户机 i 需要 F / di 时间下载;最终所耗时间取上述两者的最大值;当N很大时,时间几乎随N线性增长
  • 在P2P架构中,服务器至少发送一个副本,时间 F/Us;客户机 i 需要 F / di 时间下载;所有客户机总共需要下载 NF 个比特;最快上传速率可能是 Us+ U1+…+Un;
    • P2P所需时间:在这里插入图片描述
  • C/S vs P2P 的最小分发时间
    计算机网络学习(三) 网络应用(应用层)Ⅱ_第3张图片因此,具有P2P 体系结构的应用程序能够是自扩展的。 这种扩展性的直接成因是:对等方除了是比特的消费者外还是它们的重新分发者。
  • BitTorrent 是一种用于文件分发的流行 P2P 协议
    • 参与一个特定文件分发的所有对等方的集合被称为一个洪流( torrent) 。 在一个洪流中的对等方彼此下载等长度的文件块 (chunk) ,典型的块长度为 256KB
    • 当一个对等方首次加入一个洪流时,它没有块。 随着时间的流逝,它累积了越来越多的块。 当它下载块时,也为其他对等方上载了多个块。
    • 一且某对等方获得了整个文件,它也许(自私地)离开洪流,或(大公无私地)留在该洪流中并继续向其他对等方上载块。
    • 同时,任何对等方可能在任何时候仅具有块的子集就离开该洪流,并在以后重新加人该洪流中。
    • 每个洪流具有一个基础设施结点,称为追踪器( tracker) 。 当一个对等方加入某洪流时,它向追踪器注册自己以获得节点清单,与某些节点建立连接,并周期性地通知追踪器它仍在该洪流中。

2.Socket编程

2.1应用编程接口API

应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口
计算机网络学习(三) 网络应用(应用层)Ⅱ_第4张图片
典型的应用编程接口:
- Berkeley UNIX操作系统定义了一种API,称为套接字接口(socket interface),简称套接字(socket)
- 微软公司在其操作系统中采用了套接字接口API,形成了一个稍有不同的API,称为Windows Socket Interface,简称WINSOCK

2.2Socket API

  • 最初设计:
    • 面向 BSD (Berkeley Software Distribution,伯克利软件套件,是Unix的衍生系统,在1977至1995年间由加州大学伯克利分校开发和发布)
    • 面向TCP/IP 协议栈接口
  • 目前:
    • 事实上的工业标准
    • 绝大多数操作系统都支持
  • 通信模型:C/S
  • 标识通信端点?(对外):IP地址+端口号
  • 操作系统/进程如何管理套接字?(对内):套接字描述符 socket descriptor
  • 当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字的相关信息,返回套接字描述符
    计算机网络学习(三) 网络应用(应用层)Ⅱ_第5张图片

2.3Socket API函数(WinSock)

  • WSAStartup
    • 必须首先调用该函数
  • WSACleanup
    • 完成对Socket库的使用后,调用该函数,解除与socket库的绑定,释放Socket库所占用的系统资源
  • socket
    • 用于创建套接字,操作系统返回套接字描述符
    • 第一个参数:协议族,如 PE_INET (TCP/IP)
    • 第二个参数:套接字类型,有SOCK_STREAM(面向TCP)、SOCK_DGRAM(面向UDP)、SOCK_RAW(面向网络层) (TCP/IP)
    • 第三个参数:协议号,默认为0
  • Closesocket
    • 关闭一个套接字
    • 多个进程共享一个套接字时,要调用该函数使套接字引用计数减一,减至0才关闭
    • 一个进程中的多线程对一个套接字的使用无计数。若某线程调用该函数将套接字关闭,则该进程中的其他线程也不能访问该套接字
  • bind
    • 绑定套接字的本地端点地址(IP地址+端口号)
    • 第一个参数:套接字描述符
    • 第二个参数:端点地址(localaddr)
      • 结构:sockaddr_in
      • 计算机网络学习(三) 网络应用(应用层)Ⅱ_第6张图片
    • 客户程序一般不用调用bind函数
    • 服务器可采用地址通配符:INADDR_ANY
  • listen
    • 置服务器端的流套接字处于监听状态
    • 仅服务器端调用,仅用于面向连接的流套接字
    • 第一个参数:套接字描述符
    • 第二个参数:设置连接请求队列大小(queuesize)
  • connect
    • 客户端调用该函数使客户端套接字与特定计算机的特定端口的套接字连接
    • 仅用于客户端(可用于TCP客户端,也可用于UDP客户端)
  • accept
    • 服务程序调用该函数从处于监听状态的流套接字的客户连接请求队列中取出一个排在最前面的一个客户请求,并创建一个新的套接字与客户端套接字创建连接通道
    • 仅用于TCP套接字
    • 仅用于服务器
  • recv
    • 接受数据
    • 用于TCP套接字或 连接模式的客户端UDP套接字
  • recvfrom
    • 接受数据报
    • 用于非连接模式的UDP套接字
  • send
    • 发送数据
    • 用于TCP套接字或 连接模式的客户端UDP套接字
  • sendto
    • 发送数据报
    • 用于非连接模式的UDP套接字
  • setsockopt
    • 设置套接字选项参数
  • getsockopt
    • 获取套接字参数选项
  • Socket API(TCP)调用基本流程
    计算机网络学习(三) 网络应用(应用层)Ⅱ_第7张图片

你可能感兴趣的:(计算机网络,socket,网络)