计算机网络 应用进程跨越网络的通信

系统调用和应用编程接口

  • 大多数操作系统使用系统调用 (system call ) 的机制在应用程序和操作系统之间传递控制权。
  • 对程序员来说,每一个系统调用和一般程序设计中的函数调用非常相似,只是系统调用是将控制权传递给了操作系统。
多个应用进程使用系统调用的机制

在这里插入图片描述

应用编程接口 API
  • 系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口。
  • 使用系统调用之前要编写一些程序,特别是需要设置系统调用中的许多参数,因此这种系统调用接口又称为应用编程接口 API (Application Programming Interface) 。
几种应用编程接口 API
  • Berkeley UNIX 操作系统定义了一种 API,它又称为套接字接口 (socket interface)。
  • 微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket。
  • AT&T 为其 UNIX 系统 V 定义了一种 API,简写为 TLI (Transport Layer Interface)。
应用进程通过套接字接入到网络

在这里插入图片描述

套接字的作用
  • 当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。
  • 操作系统为这些资源的总和用一个叫做套接字描述符的号码来表示。
  • 应用进程所进行的网络操作都必须使用这个套接字描述符。
  • 通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该套接字描述符相关的所有资源。
调用 socket 创建套接字

在这里插入图片描述

几种常用的系统调用

  • 当应用进程需要使用网络进行通信时,就发出系统调用。
  • 使用 TCP/IP 应用编程接口 API,就可以编写基于互联网的网络应用程序了。
  • 调用 API 时,用户可以使用 TCP 服务,也可以使用 UDP 等其他服务。
  • TCP 提供面向连接的服务。
  • 使用TCP服务需要经历 3 个阶段:
  1. 连接建立阶段
  2. 数据传送阶段
  3. 和 连接释放阶段
1. 连接建立阶段
  • 当套接字被创建后,它的端口号和 IP 地址都是空的,因此应用进程要调用 bind
    (绑定)来指明套接字的本地地址。在服务器端调用 bind 时就是把熟知端口号和本地 IP 地址填写到已创建的套接字中。这就叫做把本地地址绑定到套接字。
  • 服务器在调用 bind 后,还必须调用 listen(收听)把套接字设置为被动方式,以便随时接受客户的服务请求。UDP 服务器由于只提供无连接服务,不使用 listen 系统调用。
  • 服务器紧接着就调用 accept(接受),以便把远地客户进程发来的连接请求提取出来。系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。
    在这里插入图片描述
    并发方式工作的服务器

调用 accept 要完成的动作较多。这是因为一个服务器必须能够同时处理多个连接。这样的服务器常称为并发方式 (concurrent) 工作的服务器。
在这里插入图片描述

2. 传送阶段
  • 客户和服务器都在 TCP 连接上使用 send 系统调用传送数据,使用 recv 系统调用接收数据。
  • 通常客户使用 send 发送请求,而服务器使用 send 发送回答。
  • 服务器使用 recv 接收客户用 send 调用发送的请求。客户在发完请求后用 recv 接收回答。
    在这里插入图片描述
3. 连接释放阶段

一旦客户或服务器结束使用套接字,就把套接字撤消。这时就调用 close 释放连接和撤销套接字。
在这里插入图片描述
系统调用使用顺序的例子
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值