# Ca1mSocket **Repository Path**: ccjabc/ca1m-socket ## Basic Information - **Project Name**: Ca1mSocket - **Description**: Linux高性能服务器编程部分学习笔记。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-10-21 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux高性能服务器编程 学习笔记。 | 章节 | 内容 | | ---- | --------------------------------------- | | 5 | [Linux网络编程基础API](./chap05/README.md) | | 6 | [高级I/O函数](./chap06/README.md) | | 7 | [Linux服务器程序规范](./chap07/README.md) | | 8 | [高性能服务器程序框架](./chap08/README.md) | | 9 | [I/O复用](./chap09/README.md) | | 10 | [信号](./chap10/README.md) | | 11 | [定时器](./chap11/README.md) | ## TCP/IP协议族 > TCP/IP协议族是一个四层协议系统,自底向上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。数据链路层、网络层、传输层协议是在内核中实现的,因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务,实现这组系统调用的API即是socket。 ![image.png](./res/img1.png) - 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。ARP协议和RARP协议实现了IP地址和机器物理地址之间的相互转换。ARP协议的用途:网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务。ARP协议的工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。 - 网络层实现数据包的选路和转发,最核心的协议是IP协议(根据数据包的目的IP地址来决定如何投递它)。ICMP协议是IP协议的补充,用于检测网络连接,其并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供的服务(一般来说,上层协议使用下层协议提供的服务)。 - 传输层为两台主机上的应用程序提供端到端的通信。传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。协议主要有TCP协议(可靠的面向连接的流式服务)和UDP协议(不可靠的无连接的报式服务)。 - 应用层负责处理应用程序的逻辑。包括ping应用程序(利用ICMP报文检测网络连接)、telnet协议(远程登录协议)、DNS协议(提供机器域名到IP地址的转换)。 > 通过封装,上层协议可以使用下层协议提供的服务。每层协议都将在上层数据的基础上加上自己的头部信息(有时包括尾部信息),以实现该层的功能。 ![image.png](./res/img2.png) 经过数据链路层封装的数据称为帧(frame),帧是最终在物理网络上传输的字节序列。 > 当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。该过程即为分用。 ![image.png](./res/img3.png) ## IP协议特点 > IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。无状态是指IP通信双方不同步传输数据的状态信息。无连接是指IP通信双方都不长久地持有对方的任何信息。不可靠是指IP协议不能保证IP数据包准确地到达接收端。 ## TCP协议特点 > 使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即目标双方的数据读写可以通过一个连接进行。完成数据的交换后,通信双方都必须断开连接以释放系统资源。 # 12章 - 高性能I/O框架库Libevent ## I/O框架概述 > I/O框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更便于使用的接口。各种I/O框架库的实现原理基本相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时以这两种模式实现。 > 基于Reactor模式的I/O框架库包含如下几个组件:句柄(Handle)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)和具体的事件处理器(ConcreteEventHandler)。 1. 句柄:I/O框架库要处理的对象,即I/O事件、信号和定时事件,统一称为事件源。一个事件源通常和一个句柄绑定在一起。句柄的作用是:当内核检测到就绪事件时,它通过句柄来通知应用程序这一事件。 2. 事件多路分发器:I/O框架库一般将系统支持的I/O复用系统调用封装成统一的接口,称为事件多路分发器。 3. 事件处理器和具体事件处理器:I/O框架库提供的事件处理器通常是一个接口,用户需要继承它来实现自己的事件处理器,即具体事件处理器。 4. Reactor:I/O框架库的核心。 ## Libevent > Libevent是开源社区的一款高性能的I/O框架库,其学习者和使用者众多。