目录

目录分析

第一篇从 1-4章节主要是介绍 计算机网络基础知识和 TCP/IP模型

第二篇 核心篇 5 章到 15 章节

5-6章节 主要介绍 套接字编程API的使用和介绍

7章 是linux 服务器方面的一个规范操作

8-9 服务器的架构模式  --也是本书最重要的章节 8是内核

10章 信号

11章定时器

12章 libevent 开源库

13-14 多进程线程编程开发

15章 进程池线程池

第三篇 高性能服务器优化监控  介绍了一个linux 下的工具和小技巧



这本书是我在上周面试 2月25号-28号之间看的,早上面试下午看书,从书本中学到的东西马上就在面试官面前卖弄,输入输出,让我感觉自己的收获还是挺大的。

看书小技巧:首先拿到一本书,看出版社看序言-一般作者或出版社会大概介绍本书,让后是书本目录,花个几分钟全书浏览一般,目的是为大致再了解一下本书,是否你有兴趣读,是否可以阅读有意义?让后再花一天时间将本书从头阅读一遍,遇到重点章节记录一下,难以理解的记住某一个章节,让后继续把这本书看完,到时候拿出具体都重点章节和难点章节啃掉。

---读书的方法可以看《如何阅读一本书》

目录分析

第一篇从 1-4章节主要是介绍 计算机网络基础知识和 TCP/IP模型

  1. ARP 原理 DNS 原理
  2. IP协议   特点:动力层,为上层提供无状态,无连接,不可靠服务。
    1. IP 头    --通常20字节
    2. 介绍 IP 数据报路由与转发
      1. IP路由 是为了找到目标机器的路径  --了解这个前提要了解IP模块工作流程
  3. 传输层 tcp
    1. tcp头部   --40个固定字节,用来连接和控制
    2. 三次握手四次挥手
      1. 半关闭状态   某一方不再发送,但是允许继续接受对方数据.
    3. 状态转移过程  -- 两段状态变化的过程。
      1. 复位报文手段   作用也就是通知对方关闭连接或者重新连接

        1. 访问不存在的端口  --什么情况下都可以收到复位报文段
        2. 异常终止连接   
          1. 一旦tcp发送了复位报文,发送端所等待的排队数据都被丢弃,可以使用 SO_LINGER来发送复位报文段,终止一个连接。
        3. 处理半打开连接  就是对方网络故障没有收到结束报文 网络故障等一些原因,但是服务器以为对方关闭成为半打开,可以写数据时发一个复位报文,就可以被关闭了
    4. 数据流 就是tcp与应用程序之间的数据通讯分析
      1. 交互数据 字节少,实时性高。

        1. nagle算法优化 将多个小的数据报文一起发了,减少小数据报文
      2. 成块数据 例如ftp
      3. 外带数据  用于迅速告诉对方本端发生的重要事件。
        1. 所以外带数据的优先级最高,无需排队,udp 没有该数据,tcp 也不是真正意义上的,只是利用紧急指针的两个字段,该缓存1字节,上层如何没有及时拿出下次就覆盖了。
    5. 数据流控制  超时重传和拥塞控制
      1. tcp 超时重传  也就是发生异常网络情况下

        1. tcp 模块维护的 重传定会器--如果对方没有应答那么就启动,传多少次? 经过分析 重传五次 0.2s 0.4 0.8 1.6 3.2s每次重传加倍,五次后由IP和ARP接管。
      2. 拥塞控制
        1. tcp 重要任务 提高网络利用率降低丢包,保证网络资源对数据流的公平性,这就是拥塞控制。

          1. 慢启动
          2. 拥塞避免
          3. 快速重传
          4. 快速恢复

-- 这里呢 也只是简单的介绍一下书,要看具体详情 网络这一块 可以看tcp/ip核心3卷

第二篇 核心篇 5 章到 15 章节

5-6章节 主要介绍 套接字编程API的使用和介绍

  1. socket地址API

    1. 主机字节序和网络字节序(大端:高位字节存储低位,低位字节存储高位,主机字节序反之)

      char union_bytes[sizeof(short)];if (sizeof(short) == 2) { if (test.union_bytes[0] == 1 && test.union_bytes[1] == 2) cout << "big endian" << endl; else if (test.union_bytes[0] == 2 && test.union_bytes[1] == 1) cout << "little endian" << endl;
      }  ---代码段
    2. 套接字地址族   含 地址族(IPV4,6) 端口号(网络字节序) IPV4地址结构体
    3. 创建socket  socket 它是一个可读可写可控制,可开关的文件描述符。
    4. 命名socket  bind 函数来做一个地址族绑定具体某一个socket
    5. 监听socket  listen函数 创建一个监听队列来存放待处理的客户连接。
    6. 接受连接 accept 
      1. 测试 :如果在accept 接受过程中客户端断开了,会不会影响到该函数的调用呢? 经过测试答案是不会的,它只是从队列中取出来数据而已。
    7. 发送请求 connect 客户端与服务器主动发出连接
    8. 关闭连接  close
  2. 数据读写
    1. tcp 数据写

      1. recv
      2. send
    2. udp数据读写
      1. recvfrom
      2. sendto
    3. 通用读写函数
      1. recvmsg
      2. sendmsg
    4. 外带标记 sockatmark
    5. 地址信息函数  获取本端的socket地址 获取远端的 getsockname getpeername
    6. socket 选项  getsocket  setsocket  --这个是专门用来设置socket文件描述符的属性,而fcntl 是POSIX方法。具体了解https://blog.csdn.net/swartz_lubel/article/details/79574472   该函数更多选项
  3. 网络信息API
    1. 根据主机名获取主机完整信息,根据ip 获取完整信息
    2. 根据名称获取某个服务的完整信息,根据端口获取某个服务完整信息  -- 具体函数就不列举出来了,只是告诉有这个功能
  4. 高级io 函数-----------------------
  5. pipe 管道,做进程间通讯
  6. dup dup2 函数  把标准输出重定向到另一个文件或者其它的。
  7. readv 和 writev 函数  将分散在内存块中的数据一并写入文件描述符中。
  8. sendfile 两个文件描述符之间直接传递数据,避免内核和用户缓冲区,提高效率。
  9. mmap munmap 用于申请一块内存,该内存作为进程间通讯的共享内存。
  10. splice 函数 用于连个文件描述符之间数据移动 ,零拷贝就是不消耗什么效率
  11. tee 两文件描述符之间复制数据
  12. fcntl 函数 提供对文件描述符的各种控制
    1. 复制文件描述符
    2. 设置获取文件描述符标志
    3. 设置获取它们状态
    4. 管理信号

7章 是linux 服务器方面的一个规范操作

  1. 系统日志  服务器的维护和调试都需要这个东西,系统也提供了 一些函数 rsyslogd
  2. 有时候不能以root 权限来操作,因为权限太大,所以应该使用用户  代码中做用户判断呢?
  3. 系统资源限制 
    1. 物理限制  cpu 内存数
  4. 服务器程序后台化 就是以守护进程的方式运行

8-9 服务器的架构模式  --也是本书最重要的章节 8是内核

  1. 服务器编程框架

    1. 模块 单个服务器程序 服务器集群  
      I/O处理单元 处理客户连接,读写网络数据 作为接入服务器实现负载均衡  
      逻辑单元 业务进程或现场 逻辑服务器  
      存储单元 本地数据库或文件缓存 数据库服务器  
      请求队列 各个单元之间通讯方法 各个服务器之间永远tcp连接  
             
      1. IO模型

        1. 将文件描述符设置为非阻塞  fcntl  设置为F_SETFL
        2. IO模型 读写操作和阻塞阶段  
          阻塞IO 程序阻塞利于读写函数  
          IO复用 程序阻塞与IO复用系统调用,可以同时监听多个IO事件  
          SIGIO信号 信号触发读写就绪事件,用户程序执行读写操作,程序不阻塞  
          异步IO 内核执行写操作并触发读写完成事件。  
               
      2. 两种高效事件处理模式
        1. Reactor

          1. 负责监听文件描述符是否具有事件发生,如果有事件则立即通知该事件的工作线程。 select
          2. 详细介绍https://www.cnblogs.com/doit8791/p/7461479.html
        2. Proactor 模式将所有IO操作都交给主线程和内核来处理,工作线程仅仅只负责处理业务逻辑
      3. 逻辑单元

10章 信号

11章定时器

12章 libevent 开源库

13-14 多进程线程编程开发

15章 进程池线程池

第三篇 高性能服务器优化监控  介绍了一个linux 下的工具和小技巧

linux高性能服务器编程书本总结相关推荐

  1. 《Linux高性能服务器编程》——导读

    前 言 为什么要写这本书 目前国内计算机书籍的一个明显弊病就是内容宽泛而空洞.很多书籍长篇大论,恨不得囊括所有最新的技术,但连一个最基本的技术细节也无法解释清楚.有些书籍给读者展现的是网络上随处可见的 ...

  2. 《Linux高性能服务器编程》学习笔记

    <Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...

  3. Linux 高性能服务器编程——多线程编程

    问题聚焦:     在简单地介绍线程的基本知识之后,主要讨论三个方面的内容:     1 创建线程和结束线程:     2 读取和设置线程属性:     3 线程同步方式:POSIX信号量,互斥锁和条 ...

  4. 【Todo】【读书笔记】Linux高性能服务器编程

    在读 /Users/baidu/Documents/Data/Interview/服务器-检索端/<Linux高性能服务器编程.pdf> 其实之前读过,要面试了,需要温习. P260 So ...

  5. Linux高性能服务器编程——书籍阅读笔记

    目录 前言 正文 第一章 1. 零拷贝函数 2. TCP/IP协议族 3. OSPF 4. ARP协议 5. RARP 6. ICMP协议 7. TCP协议 8. UDP协议 9. 封装 第四章 TC ...

  6. linux高性能服务器编程第八章(高性能服务器程序框架)

    C/S模型 传统C/S,一端作为客户端,一端作为服务器,这里不做多介绍. P2P模型 peer 2 peer ,每台机器使用服务的同时也提供服务,通俗的讲,没有绝对客户端和服务端的概念,当下云计算的模 ...

  7. 强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍

    目录 第1章 TCP/IP协议 1.1 TCP/IP协议族体系结构以及主要协议 1.1.1 数据链路层 1.1.2 网络层 1.1.3 传输层 1.1.4 应用层 1.2 封装 1.3 分用 1.5 ...

  8. linux高性能服务器编程学习总结(二)

    第三章 TCP详解 TCP的连接是一对一的,所以基于多播和广播的应用程序不能使用TCP服务,而UDP非常适合广播和多播.发送端应用连续执行多次写操作,TCP模块将数据放入TCP缓冲区.TRP模块真正开 ...

  9. Linux高性能服务器编程 第5章 Linux网络编程基础API

    5.1 socket 地址 API 现代CPU的累加器一次都能装载(至少)4 字节(这里考虑32位机,下同),即一个整 数.那么这4 字节在内存中排列的顺序将影响它被累加器装载成的整数的值.这就是字节 ...

最新文章

  1. Eclipse+Maven配置
  2. Java面向对象--小游戏2
  3. TextView实现自动滚动滚动.
  4. dotConnect for Oracle控件免费下载及使用方法
  5. 手把手教你用C语言画“心”!
  6. 《scikit-learn》随机森林之深入学习
  7. CentOS7下初始化PostgreSQL
  8. stm32以中断方式扫描矩阵键盘
  9. c语言中四种简单的数组排序
  10. 陇原战“疫“2021网络安全大赛 Re
  11. Mac eclipse下载地址 Java开发
  12. Finclip小程序宿主环境与微信小程序宿主环境
  13. macOs 静默安装dmg文件
  14. Layui使用入门教程
  15. 在线教育平台搭建的几种方案
  16. Python笔记 | 数据筛选
  17. SQL SERVER使用STUFF函数拼接
  18. css浮动布局自适应,CSS 几种常用自适应布局
  19. 口袋妖怪 java_简单的Java口袋妖怪扑灭模拟器
  20. E4A MPChart折线图 曲线图

热门文章

  1. 达人评测 i5-1155g7和i5-1235u选哪个 i51155g7和1235u差距
  2. Java获取两个日期之间的工作日天数
  3. Elasticsearch学习--查询(prefix、wildcard、regexp、fuzzy)
  4. DouPHP模块化企业网站管理系统源码 v1.6
  5. 用KDL在C++中控制UR5机器人的TCP位置——逆向运动学解释
  6. linux 目录中的文件和子目录生成jar包文件的方法
  7. deepin升级到20.2,开机显示deepin LOGO之后屏幕黑屏解决办法
  8. setHeader方法的参数说明
  9. Rsync命令参数以及配置使用
  10. 屏幕录制和编辑神器ScreenFlow轻松上手