1 网络模型
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 |
文件传输、电子邮件、文件服务、虚拟终端 | TFTP、HTTP 、SNMP、FTP 、SMTP、DNS、RIP、Telnet |
表示层 | 数据格式化、代码转换、数据加密 | 没有协议 |
会话层 | 解除或建立与别的接点的联系 | 没有协议 |
传输层 |
提供端对端的接口 |
TCP 、UDP |
网络层 | 为数据包选择路由 | IP、ICMP、OSPF、BGP、IGMP、ARP、RARP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP、CSLIP、PPP、MTU、ARP、RARP |
物理层 | 以二进制数据形式再物理媒体上传输数据 | ISO2110、IEEE802、IEEE802.2 |
2 Socket
什么是
Socket
?
Socket 就是为网络服务提供的一种机制
通讯的两端都有 Sokcet
网络通讯其实就是 Sokcet 间的通讯
数据在两个 Sokcet 间通过IO传输
TCP 与 UDP 在概念上的区别:
udp
:
- 是面向无连接,将数据及源的封装成数据包中,不需要建立连接
- 每个数据报的大小在限制64k内
- 因无连接,是不可靠协议
- 不需要建立连接,速度快
tcp
:
- 建议连接,形成传输数据的通道.
- 在连接中进行大数据量传输,以字节流方式
- 通过三次握手完成连接,是可靠协议
- 必须建立连接,效率会稍低
3 HTTP 协议组成部分
http
协议基于 TCP
协议封装成超文本传输协议,http
分为请求与响应,http
协议分为请求参数和方法类型、请求头、请求体,响应分为 响应状态、响应头、响应体等。
4 四层负载均衡与七层负载均衡区别
四层负载均衡
:在网络模型中的传输层中,基于主要是基于 tcp
协议报文实现负载均衡(比如 LVS
、haproxy
就是四层负载均衡器),使用改写报文的源地址和目的地址。
七层负载均衡
:在网络模型中应用层中,基于 URL
或者 HTTP
协议实现负载均衡,Web 服务器。
5 安装软件
5.1 环境准备
CentOS7
Nginx1.9
开始支持tcp
层的转发,通过stream
实现的,而socket
也是基于tcp
通信
stream模块默认不安装的,需要手动添加参数:–with-stream,官方下载地址:download,根据自己系统版本选择nginx1.9或以上版本
./configure --add-module=…/yaoweibin-nginx_tcp_proxy_module-121c026
5.2 下载软件
cd /usr/local
1、下载
Nginx
扫描二维码关注公众号,回复: 10122297 查看本文章
wget http://nginx.org/download/nginx-1.9.10.tar.gz
作用:实现反向代理、负载负载库
2、下载
nginx_tcp_proxy_module
插件
wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master
3、解压
nginx_tcp_proxy_module
插件
tar -zxvf master
nginx
支持 TCP
转发和负载均衡的支持
5.3 编译 Nginx
1. 解压
nginx
文件
tar -zxvf nginx-1.9.10.tar.gz
2. 进入到
Nginx
目录
cd nginx-1.9.10
3. 下载
tcp.patch
最新补丁
patch -p1 < ../yaoweibin-nginx_tcp_proxy_module-b8a3028/tcp.patch
如果报错
-bash: patch: 未找到命令
执行下面命令安装即可
yum -y install patch
4. 编译
Nginx
./configure --add-module=../yaoweibin-nginx_tcp_proxy_module-b8a3028
5.
make && make install
make && make install
如果报错:
In file included from ../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.h:32:0,
from ../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.c:5:
../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp_upstream.h:144:9: error: unknown type name ‘ngx_resolver_addr_t’
ngx_resolver_addr_t *addrs;
^
make[1]: *** [objs/addon/yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.o] Error 1
make[1]: Leaving directory `/usr/local/nginx-1.9.10'
make: *** [build] Error 2
解决:
修改第三方模块包里的头文件,ngx_tcp_upstream.h
的第 144
行将ngx_resolver_addr_t
改为 ngx_addr_t
cd /usr/local/yaoweibin-nginx_tcp_proxy_module-b8a3028/
vi ngx_tcp_upstream.h
修改为:
ngx_addr_t
6. 继续
make && make install
make && make install
7. 修改
Nginx.conf
配置文件
worker_processes 1;
events {
worker_connections 1024;
}
### 修改为TCP模块
tcp {
### 定义多个上游服务器
upstream test {
### 定义TCP模块上游服务器
server 192.168.153.1:8001;
server 192.168.153.1:8002;
}
server {
listen 9999;
server_name 192.168.153.11;
### 反向代理upstream
proxy_pass test;
}
}
8. 启动
Nginx
服务器
/usr/local/nginx/sbin/nginx
9. 创建两个
Sokcet
服务器端
启动服务:
Ngxin
连接反向代理 TCP
服务器
连接:
发现连接到 8002 这台服务器:
测试
客户端发送消息,对应的服务器接收到消息: