<aside>
💡 socket(套接字):对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,也是网络环境中进程间通信的接口(API)
</aside>
- 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
- 从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口
- socket 可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概
念。
- 它是网络环境中进程间通信的 API,也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程
- 通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 socket 中,该 socket 通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 socket 中,使对方能够接收到这段信息。
- socket 是由 IP 地址和端口结合而成的,提供向应用层进程传送数据包的机制。
Linux环境下的socket
- 在 Linux 环境下,socket用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件
- 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字
- 与管道类似的,Linux 系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。
- 区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。
网络栈如何记录TCP通信的四元组?
- 网络栈通过维护连接表(或连接状态表)来记录和管理每个活动的TCP连接的四元组