socket与TCPIP

数据链路层, 网络层, 传输层的协议实在内核中实现的, 因此操作系统需要实现一套系统调用, 使得应用程序能够访问这些协议提供的服务.

实现这组系统调用的API有两套: socket和XTI. 现在主流使用的是socket.

由socket定义的这组API提供两点功能:

  1. 将应用程序从用户缓冲区中复制到TCP/UDP内核发送缓冲区, 以交付内核来发送数据, 或者是从内核TCP/UDP接受缓冲区中复制数据到用户缓冲区, 以读取数据.

  2. 应用程序可以通过socket来修改内核中各层协议的某些头部信息或其他数据结构, 从而精细的控制底层通信的行为. 比如可以通过setsocketopt()函数来设置IP数据报在网络上的存活时间.

值得一提的是, socket是一套通用网络编程接口, 他不但可以访问内核中的TCP/IP协议栈, 而且可以访问其他网络协议栈(比如X.25协议栈, UNIX本地域协议栈等).