目录
1 系统调用和应用编程接口
应用编程接口 API
几种应用编程接口 API
套接字的作用
几种常用的系统调用
1. 连接建立阶段
2. 传送阶段
3. 连接释放阶段
1 系统调用和应用编程接口
·大多数操作系统使用系统调用 (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)。
应用进程通过套接字接入到网络
套接字的作用
·当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建套接字,以便把网络通信所需要的系统资源分配给该应用进程。
·操作系统为这些资源的总和用一个套接字描述符的号码来表示。
·应用进程所进行的网络操作都必须使用这个套接字描述符。
·通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该套接字描述符相关的所有资源。
几种常用的系统调用
1. 连接建立阶段
·当套接字被创建后,它的端口号和 IP 地址都是空的,因此应用进程要调用 bind(绑定)来指明套接字的本地地址。在服务器端调用 bind 时就是把熟知端口号和本地IP地址填写到已创建的套接字中。这就叫做把本地地址绑定到套接字。
·服务器在调用 bind 后,还必须调用 listen(收听)把套接字设置为被动方式,以便随时接受客户的服务请求。UDP 服务器由于只提供无连接服务,不使用 listen 系统调用。
·服务器紧接着就调用 accept(接受),以便把远地客户进程发来的连接请求提取出来。系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。
并发方式工作的服务器
调用 accept 要完成的动作较多。这是因为一个服务器必须能够同时处理多个连接。这样的服务器常称为并发方式 (concurrent) 工作的服务器。
2. 传送阶段
·客户和服务器都在 TCP 连接上使用 send 系统调用传送数据,使用 recv 系统调用接收数据。
·通常客户使用 send 发送请求,而服务器使用 send 发送回答。
·服务器使用 recv 接收客户用 send 调用发送的请求。客户在发完请求后用 recv 接收回答。
3. 连接释放阶段
·一旦客户或服务器结束使用套接字,就把套接字撤消。这时就调用 close 释放连接和撤销套接字。
欢迎一起学习~