【专题】Linux 网络相关

2010-04-10 topic linux network

简介

  • 基本介绍 主要是协议层的一些基本概念相关的介绍。
  • 惊群详解 当多个进程或线程在同时阻塞等待同一个事件时,事件发生会唤醒所有进程。
  • 流量控制 用来控制网络的流量,尤其是在某些测试场景下比较有效。
  • 网络加速 包括了基于网卡、SMP 等方式可以加快网络处理。
  • 隧道技术 一种封装技术,利用一种网络协议来传输另一种网络协议。
  • 超时重传 为了保证可靠性,在 TCP 的三次握手、数据传输、链接关闭阶段都有响应的重传机制。
  • 防火墙配置 通过 Netfilter 和 iptables 可以实现数据包过滤、网络地址转换和数据报文处理等功能。

TCP/IP

  • 协议简介 关于 TCP 协议的详细介绍,包括握手过程、滑动窗口、拥塞控制等等。
  • TimeWait 这是 TCP 协议中比较特殊的状态,目的是为了防止干扰,但在高性能场景下会有异常。
  • socketfs 内核中用户程序与网络协议栈之间的接口层。
  • 连接队列 很多的处理状态会在内核中维护队列。

内核解析

  • 网卡驱动 主要介绍网卡如何接收数据,然后又是如何交给上层处理。
  • loopback 主要是网络状态查看,例如正在监听的端口信息。
  • 相同网络端口 尤其是对于本地代码来说,目的地和源端分别采用相同的 IP 地址和端口会不会有问题。

其它

  • 报文超过 MTU 正常 TCP 报文不会超过 MTU 大小,但是通过 tcpdump 却能看到超过限制的报文。
  • Web 服务器 梳理一些常用的 Web 服务器,包括了一些很简单的实现。

负载均衡

  • 基本概念 当前的服务端大部分都是多机器提供服务,对于无状态服务其实有相关的通用均衡方案。
  • LVS 工作在内核层的负载均衡工具,相比来说效率很高,还可以参考 HAProxy

Nginx

异步框架的 Web 服务器,也可用作反向代理、负载均衡、HTTP 缓存等,采用 BSD 协议发布。

  • 基本概念 包括基本的安装配置、常用模块以及相关的报错信息。
  • 状态监控 主要是通过 ngxtop 进行监控,有部分插件同时提供了更详细的监控指标。
  • 日志解析 可以配置灵活的日志信息,关键的访问日志,可以以此统计错误、请求 QPS 等信息。
  • 源码解析 详细介绍相关的代码处理逻辑,同时包含了 Nginx 中的模块处理方式。
  • 通用网关 CGI 定义了客户端和服务器程序之间传输数据的标准,可以参考 Flask 示例,以及 uWSGI 的 C 实现。
  • HTTPS 配置 配置证书从而确保服务的安全性。

DNS

首先 www.google.com 并不是一个域名,这样的格式被称为主机名,也就是 Full Qualified Domain Name, FQDN;而 google.com 才是一个域名,在这个域内有很多主机,例如 wwwftpemail 等等。

DNS 就是一整套用来解析主机名的方案。

  • 基本概念 详细介绍 DNS 的基本概念,包括了不同记录类型的介绍。
  • 常用工具 详细介绍最常见的 dig nslookup 等命令行工具的使用,以及 BIND 服务器搭建。
  • 配置文件 也就是 /etc/resolv.conf 配置文件的使用,包括了参数的详细配置。
  • 协议详解 关于 DNS 协议的详细内容介绍。
  • dnsmasq 一个小巧且方便配置 DNS 和 DHCP 的工具,通常用于本地服务。
  • cares 提供了简单的异步 DSN 解析,很多开源工具使用。

其它

常用协议

简单介绍一些与网络相关的通讯协议。

  • ICMP 工作在第三层,用来解析网络路由情况。
  • SNMP 简单网络管理协议,用于网络设备之间交换管理信息。
  • ARP 通过解析网络层地址来找寻数据链路层地址的网络传输协议。
  • P2P 不同于传统的 C/S 服务模型,每个节点都可以作为客户端和服务端。
  • Socks5 详细介绍代理协议。
  • HTTP 基于 TCP 的基础协议,互联网的基础,还有基于此的 Proxy 代理服务器以及 HTTPS 协议。
  • HTTP2 对应 HTTP 的升级版本,支持多路复用、优先级、流量控制、服务器推送、HPACK 压缩 等。
  • WebSocket 简单通用的长连接二进制协议,可以基于 HTTP 转换,还可以参考 Golang 中的使用。
  • Telnet 非常简单古老的远程终端协议,一些简单设备上还在使用,不过建议使用 SSH 类似协议。
  • Protobuf 用于序列化和反序列化的工具库,采用二进制编码,还可以参考 序列化详解
  • FTP 比较古老的协议,通常用于网络传输文件等,这里介绍协议以及软件的使用。

常用命令

  • curl 除了常见的发送 HTTP 相关请求,还可以统计耗时等,其它常用命令还有 wgetnetcat
  • tcpdump 在 Linux 中最常用的抓包工具。
  • wireshark 用来更方便的分析网络包,还可以查看如何分析 TLS/SSL 相关报文。
  • openssl 除了是一个常用的依赖库之外,还是常用的命令行工具。
  • nmap 网络扫描和主机检测的非常有用的工具,可以用来收集信息、漏洞探测或安全扫描。

杂项