socat( SOcket CAT )是一个多用途双向套接字数据转接工具。
socat 跟 NetCat 类似,但功能更强大,也更安全(支持 chroot )。它兼容多种协议,支持操作 文件 ( file )、 管道 ( pipe )、 设备 ( device )、 TCP 套接字、 Unix 套接字、 SOCKS 客户端、 CONNECT 代理以及 SSL 等等。
安装
Linux
在 Linux 系统,使用包管理器进行安装,以 Debian/Ubuntu 为例:
|
|
socat( SOcket CAT )是一个多用途双向套接字数据转接工具。
socat 跟 NetCat 类似,但功能更强大,也更安全(支持 chroot )。它兼容多种协议,支持操作 文件 ( file )、 管道 ( pipe )、 设备 ( device )、 TCP 套接字、 Unix 套接字、 SOCKS 客户端、 CONNECT 代理以及 SSL 等等。
在 Linux 系统,使用包管理器进行安装,以 Debian/Ubuntu 为例:
|
|
HAProxy 是一款开源负载均衡软件,同时提供 4 层( TCP )和 7 层( HTTP )代理。
由于普通机器单机处理能力以及可靠性的限制,服务需要在多台机器进行部署,形成集群。这主要出于以下两方面的考虑:
那么,用户(或客户端)如何访问多实例服务呢?
最简单的方案是在客户端进行重试。以 DNS 解析为例,用户可以配置多台 DNS 服务器,一台查询失败则尝试另外一台:
进行网络编程、服务部署时,经常需要临时对一些端口进行转发。
举个例子,笔者开发过一个 Agent 软件——它部署于集群每台服务器上,对其上的某个服务进行管理,需要连接服务端口。我在本地进行开发,需要部署一套相同的服务,这多少有些麻烦。如果可以在本地部署端口转发服务,监听服务端口,将请求转发至部署有该服务的测试机,便可完美解决问题。
端口转发方案很多,SSH端口转发 , NAT 端口转发,甚至 HAProxy 之类的工具都可以排上用场。然而,应对开发调试这种 临时需求 ,rinetd 就能胜任,它足够简单轻量级,依赖也少。
请不要将 rinetd 应用到生产服务!
rinetd 底层采用 select 而不是 epoll 实现。众所周知, select 有致命缺陷,一次能处理的 文件描述符(套接字)非常有限,效率也比较低下。
因此,在高并发环境采用rinetd无异于自杀 。
更多细节可参考文章:rinetd 在生产环境要谨慎使用 。
Python 标准库中,smtplib 模块提供 SMTP 协议发送接口,使用起来十分方便。先来写一个用于发送邮件的函数,一睹为快:
|
|
对 Web 应用进行压力测试,一般使用 Apache 提供的压力测试工具 ab 。
ab 的功能非常强大,可以发起各种 HTTP 请求,并且支持设置 并发数 。测试完毕后,ab 还对测量数据进行统计分析,最终生成一份非常详细的测试报告。
那么,ab 工具如何使用呢?本文将演示 ab 若干用法,以此抛砖引玉。
Web 应用一般部署在 Linux 服务器上,因此主流 Linux 发行版软件包都提供了 Apache 工具 ab 。以 Ubuntu 为例,我们只需按照 apache2-utils 包,即可得到 ab 命令:
|
|
VRRP 是 Virtual Router Redundancy Protocol 的简称,即 虚拟路由冗余协议 。
VRRP 最早被设计来解决网关的高可用问题:
我们知道,计算机进行网络通讯时,需要网关来传输网络报文。每台机器只能配置一个网关地址,这时网关的可靠性就非常重要了。如果网关不幸故障了,那么使用该网关的所有机器都将受影响——断网了!
解决网关单点问题的思路非常直观——部署一个备用网关,在主网关故障时切换过去。
然而,由于机器只能配置一个网关地址,因此每次切换网关都需要修改该配置。 这个解决方案没能做到自动化,并不优雅。
这时, VRRP 协议应运而生!接下来,以一个简单的例子介绍 VRRP 是如何工作的:
先准备好 JDK 包以及 Tomcat 二进制包,下载链接如下:
接下来,我们将 JDK 部署在 /data/jdk 目录下;将 Tomcat 部署在 /data/tomcat/clusters/default 目录下。
Tomcat 部署目录选择支持多实例, clusters 目录下可以部署多个实例,default 是其中一个。
接下来,我们将 JDK 包解压至选定目录:
|
|
curl 是一个用来发送网络请求的工具命令, 在 网络服务开发 以及 网络调试 中特别有用。 它支持的协议包括:
本文以 HTTP 协议为例,介绍 curl 命令的操作方式,及其在 Web 开发中的应用。
给定一个 URL , curl 对其发起请求并将响应数据输出到标准输出:
|
|
ifconfig 是一个用于 配置网卡 的工具命令。
ifconfig 是一个古老的工具,现在有些过时了。更推荐使用 ip命令 ,这是网络配置工具的集大成者。
ifconfig 不带任何参数即可查询当前所有已 启用( up )网卡的状态:
|
|
ssh 命令除了登录服务器,还可以在两台机器之间建立隧道。
通过隧道,你可以打通一些本来不可访问的网络或者系统,让不可能成为可能。因此,完全有必要花点时间,学习如何使用 ssh 命令打洞。
本文将介绍,如何利用 ssh 隧道进行端口转发。端口转发可分为两种:
下文图例用颜色区分不同的服务器,称蓝色服务器为蓝服,其他以此类推。
如上图,蓝服需要访问绿服 80 端口,但是直连不通。蓝服可以通过 22 端口登录红服,而红服可以连接到绿服。