# 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。

- 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。ARP协议和RARP协议实现了IP地址和机器物理地址之间的相互转换。ARP协议的用途:网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务。ARP协议的工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
- 网络层实现数据包的选路和转发,最核心的协议是IP协议(根据数据包的目的IP地址来决定如何投递它)。ICMP协议是IP协议的补充,用于检测网络连接,其并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供的服务(一般来说,上层协议使用下层协议提供的服务)。
- 传输层为两台主机上的应用程序提供端到端的通信。传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。协议主要有TCP协议(可靠的面向连接的流式服务)和UDP协议(不可靠的无连接的报式服务)。
- 应用层负责处理应用程序的逻辑。包括ping应用程序(利用ICMP报文检测网络连接)、telnet协议(远程登录协议)、DNS协议(提供机器域名到IP地址的转换)。
> 通过封装,上层协议可以使用下层协议提供的服务。每层协议都将在上层数据的基础上加上自己的头部信息(有时包括尾部信息),以实现该层的功能。

经过数据链路层封装的数据称为帧(frame),帧是最终在物理网络上传输的字节序列。
> 当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。该过程即为分用。

## 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框架库,其学习者和使用者众多。