Socket的来龙去脉
下面的分析主要是参阅了计算机网络(谢希仁第7版)进行总结的,从系统调用—>应用编程接口API—>套接字接口来分析Socket的来龙去脉,当然维基百科上也有对Socket的详细解释
1. 系统调用
大多数操作系统使用系统调用的机制在应用程序和操作系统之间传递控制权。对程序员来说,系统调用和一般程序设计中的函数调用非常相似
2. 应用编程接口API
当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口,此接口再将控制权传递给计算机的操作系统。操作系统将此调用转给某个内部过程,并执行所请求的操作。内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。
系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口API
3. 套接字
由于TCP/IP协议族被设计成能够运行在多种操作系统的环境下,TCP/IP标准允许系统设计者能够选择有关API的具体实现细节。
目前,可供应用程序使用TCP/IP的应用编程接口API的最著名的是套接字接口
而套接字不是物理实体,而是一种抽象,套接字是提供应用程序创建和使用的数据结构
4. 套接字描述符
当应用进程(客户或者服务器)需要使用网络进行通信时,必须首先发出socket系统调用,请求操作系统为其创建一个”套接字”。这个调用的实际效果是请求操作系统把网络通信所需要的一些 系统资源(存储器空间,CPU时间,网络带宽等) 分配给该应用进程。
操作系统为这些资源的总和用一个叫做套接字描述符(socket descriptor)的号码(小的整数) 来表示,然后把这个套接字描述符返回给应用进程。
Socket通信图示
由图可以看出Socket通信与TCP/IP协议是分不开的,要使主机A和主机B能够通信,必须建立Socket连接,建立Socket连接必须通过底层TCP/IP协议来建立TCP连接。
Socket通信协议分析
上面就提到,Socket通信与TCP/IP协议是紧密相关的,关于Socket编程通信我们有两种协议可以选择,那就是常见的TCP协议和UDP协议
UDP协议
UDP协议是一种无连接的协议,也称为数据报协议。每次发送数据报时,需要同时发送本机的socket描述符(就是上面所说的套接字描述符)和接收端的socket描述符。所以,每次通信都要发送额外的数据。
TCP协议
TCP协议是一种有连接的协议,使用应用程序之前,必须先建立TCP连接。所以每次在进行通信之前那,我们需要先建立Socket连接&#