IP 地址分类
在计算机网络中有著名的 OSI 七层协议体系结构,概念清楚,理论完整,但是它既复杂又不实用。TCP/IP 体系结构则不同,得到的广泛的应用。最终结合 OSI 和 TCP/IP 的优点,采用了一种只有五层协议的体系结构,本文的讲述的 IP 都是基于五层协议模型中的 网络层 \。
网络模型介绍
OSI 体系结构
TCP/IP 体系结构
五层体系结构
7 应用层
应用层
5 应用层
6 表示层
5 会话层
4 传输层
传输层
4 传输层
3 网络层
网络层
3 网络层
2 数据链路层
网络接口层
2 数据链路层
1 物理层
1 物理层
分类的 IP 地址IP 地址的表示方法IP 地址就是给英特网上的每个主机(路由器)的每个接口分配一个在全世界范围内是唯一的 32 位的标识符。其组成第一个字段是网络号,第二个字段是主机号。一个主机号在前面的网络号所指明的网络范围内必须是唯一的,所以一个 IP 地址在整个网络中都是唯一的。目前分为 A、B、C、D、E 五类 IP 地址。
在 A、B、C 三类地址中灰色的部分即为网络号,网络号的 ...
Linux 性能分析工具 - sar
sar 是 System Activity Reporter(系统活动情况报告)的缩写。sar 工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar 是目前 Linux 上最为全面的系统性能分析工具之一,可以从 14 个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等,使用也是较为复杂。
sar 是查看操作系统报告指标的各种工具中,最为普遍和方便的;它有两种用法;
追溯过去的统计数据(默认)
周期性的查看当前数据
安装有的 linux 系统下,默认可能没有安装这个包,使用 apt-get 来安装;
1$ apt-get install sysstat
安装完毕,将性能收集工具的开关打开:
12$ vim /etc/default/sysstatENABLED="true"
启动这个工具来收集系统性能数据:
1$ /etc/init.d/sys ...
Linux 内存分析工具 - free
free 工具用来查看系统可用内存
12345/opt/app/tdev1 $ free total used free shared buffers cachedMem: 8175320 6159248 2016072 0 310208 5243680-/+ buffers/cache: 605360 7569960Swap: 6881272 16196 6865076
解释一下 Linux 上 free 命令的输出。
ree 的输出看成一个二维数组 FO (Free Output)。例如:
12345678FO [2][1] = 24677460FO [3][2] = 10321516 1 2 3 4 5 61 total used free ...
实践 Linux 编程之叁 - 优化
根据木桶效应,一个程序瓶颈决定它的性能,所以性能优化的核心是找出系统的瓶颈点。
分析系统瓶颈系统响应变慢,首先得定位大致的问题出在哪里,是 IO 瓶颈、CPU 瓶颈、内存瓶颈还是程序导致的系统问题;
使用 top 工具能够比较全面的查看我们关注的点:
1234567891011$top top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00 Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie Cpu (s): 0.0% us, 0.2% sy, 0.0% ni, 99.7%id, 0.0% wa, 0.0% hi, 0.0% si, 0.2% st Mem: 377672k total, 322332k used, 55340k free, 32592k buffers Swap: 397308k total, 67192k us ...
实践 Linux 编程之贰 - 调试
现代的 IDE 已经提供了相当丰富的调试功能,但有的时候在服务器环境中,我们还是要利用 Linux 的工具来对运行的进程来进行调试和分析。
进程调试gdb 程序交互调试GDB 是一个由 GNU 开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具。
对于一名 Linux 下工作的 c++ 程序员,gdb 是必不可少的工具;
GDB 中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。
以下从一个完整的调试过程简单说明最基本的几个命令;
1234567$ gdb programmer # 启动 gdb>break main # 设置断点 >run # 运行调试程序 >next # 单步调试 >print var1 # 在调试过程中,我们需要查看当前某个变量值的时候,使用 print 命令打印该值 >list # 显示当前调试处的源代码 >info b ...
如何理解版本号
一句话概括语义化版本号的格式为主版本号。次版本号。修订号 (x.y.z),递增规则如下
x: 主版本号,做了不兼容的 API 修改
y: 次版本号,做了向下兼容的功能性更新
z: 修订号,一般是向下兼容的 bugfix 和优化
(以下,皆以 x 代表主版本号,y 代表次版本号,z 代表修订号)
为什么要版本号“依赖地狱” 问题大型软件系统往往依赖于众多套件、库,这些依赖关系相当复杂,依赖关系过高会导致版本控制被锁死的问题。想象一下,某一个库依赖于其他库,这些库又依赖于另一些库,那么其中某个库的升级导致的不兼容问题,则会因影响整个系统。依赖关系太松散,则会导致版本的混乱。这就被称之为依赖地狱。
解决方案一个合理的语义化的版本号约束规则,可以明确版本中的依赖问题。例如 x1.y1.z1 软件依赖于 x11.y11.z11 这个特定版本的库,在库的整个 x11 的主版本,x1 版本的软件可以确保使用正常。这套规则针对于定义的公共 API 而制定:
重大版本更新: x 递增,大量新功能的更新,可能不向下兼容
版本功能更新:y 递增,API 保持向下兼容的新增及修改
版本修订,z 递增,修复 ...
实践 Linux 编程之壹 - 构建
一般源代码提供的程序安装需要通过配置、编译、安装三个步骤;
配置做的工作主要是检查当前环境是否满足要安装软件的依赖关系,以及设置程序安装所需要的初始化信息,比如安装路径,需要安装哪些组件;配置完成,会生成 makefile 文件供第二步 make 使用;
编译是对源文件进行编译链接生成可执行程序;
安装做的工作就简单多了,就是将生成的可执行文件拷贝到配置时设置的初始路径下;
配置查询可用的配置选项:
1./configure --help
配置路径:
1./configure --prefix=/usr/local/snmp
–prefix 是配置使用的最常用选项,设置程序安装的路径;
编译编译使用 make 编译:
1make -f myMakefile
通过 -f 选项显示指定需要编译的 makefile;如果待使用 makefile 文件在当前路径,且文件名为以下几个,则不用显示指定:
makefile Makefile
makefile 编写的要点
必须满足第一条规则,满足后停止
除第一条规则,其他无顺序
makefile 中的全局自变量
$@ 目标文件名
@^ 所有前 ...
Linux 中的 wget
wget - web getLinux 系统中的 wget 是一个下载文件的工具,它用在命令行下,是最常用的 CLI 工具之一。wget 非常稳定,支持断点续传,支持 HTTP,HTTPS 和 FTP 协议,可以使用 HTTP 代理。
wget 可以跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,因此可以作为网络爬虫工具。
命令格式wget 参数 URL
命令参数:启动参数:
-V, –version 显示 wget 的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行’.wgetrc’格式的命令,wgetrc 格式参见 /etc/wgetrc 或~/.wgetrc
记录和输入文件参数
-o, –output-file=FILE 把记录写到 FILE 文件中
-a, –append-output=FILE 把记录追加到 FILE 文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式 (没有输出)
-v, –verbos ...
Linux 动态库编译指南
Linux 下动态库文件的文件名形如 libxxx.so,其中 so 是 Shared Object 的缩写,即可以共享的目标文件。
在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。
程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。
Linux 下生成和使用动态库的步骤如下:
编写源文件。
将一个或几个源文件编译链接,生成共享库。
通过 -L<path> -lxxx 的 gcc 选项链接生成的 libxxx.so。
把 libxxx.so 放入链接库的标准路径,或指定 LD_LIBRARY_PATH,才能运行链接了 libxxx.so 的程序。
源文件样例
12345678//max.cint max(int n1, int n2, int n3){ int max_num = n1; max_num = max_num < n2? n2: max_num; max_num = max_num < n3? n3: max_num; ...
Linux 常用网络命令
网络工具Linux 中提供了强大的网络工具包,用于监测系统中的网络通信状态。
查询网络服务和端口netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
列出所有端口 (包括监听和未监听的):
1$netstat -a
列出所有 tcp 端口:
1$netstat -at
列出所有有监听的服务状态:
1$netstat -l
使用 netstat 工具查询端口:
123456$netstat -antp | grep 6379tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 25501/redis-server$ps 25501 PID TTY STAT TIME COMMAND25501 ? Ssl 28:21 ./redis-server ./redis.conf
查看文件状态lso ...