02-socket通信模型and05-套接字概述

264 阅读2分钟

socket通信模型

image-20220512164049316.png

套接字概述

1. 套接字概念

  • 在Linux中,把一切的,无论是进程,线程,管道,设备文件等等都是将其定义为文件,在Linux中一切皆文件;操作这些不管是真实的还是虚拟的文件,都是通过文件句柄fd去操作的;
  • 网络套接字也是一样,它跟读写普通文件很多地方是相似的;
  • 网络上面接收发送信息,跟从文件中读取写信息是一样的(read,write);
  • Socket中文意思是“插座”,在Linux环境下,用于表示进程x间网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件;
  • 数据来了会先到缓冲区,再从里面read,write
  • 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致,区别是文件主要应用于本地持久化数据的读写(磁盘)。(内存不是持久化,断电就没有了)而套接字多应用于网络进程间数据的传递。
  • 在TCP/IP协议中,“IP地址+TCP或UDP(传输层协议)端口号” 来唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket(无论是客户端还是服务器端);
  • 欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair(配成一对)就唯一标识一个连接(这两个就建立了一个通道,一对socket),因此可以用socket来描述网络连接的一对一关系。
  • 前面写的客户端的代码中,客户端直接连到服务器,虽然自己本身没有绑定IP和端口号, 但是这里是由系统自己完成的,因为本机系统知道自己的IP地址是多少;在服务器端可以看到客户端的IP地址和端口号。
  • 虽然没有绑定IP地址和端口号,但是系统的内核在处理的时候已经自动绑定了IP地址和端口号,客户端是不用去做这些的;
  • ps -ef | grep echo
  • 套接字通信原理如下图所示:
  • image-20220516150601477.png
  • 在网络通信中,套接字一定是成对出现的,一端的发送缓冲区对应一端的接收缓冲区,我们使用同一个文件描述符发送缓冲区和接收缓冲区