网络模型
Socket入门
什么是Socket?
Socket就是为网络服务提供的一种机制。
通讯的两端都有Sokcet
网络通讯其实就是Sokcet间的通讯
数据在两个Sokcet间通过IO传输。
TCP与UDP在概念上的区别:
udp: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立连接
b、每个数据报的大小在限制64k内
c、因无连接,是不可靠协议
d、不需要建立连接,速度快
tcp:
a、建议连接,形成传输数据的通道.
b、在连接中进行大数据量传输,以字节流方式
c 通过三次握手完成连接,是可靠协议
d 必须建立连接m效率会稍低
Http协议组成部分
http协议基于TCP协议封装成超文本传输协议,http分为请求与响应,http协议分为请求参数和方法类型、请求头、请求体,响应分为 响应状态、响应头、响应体等。
四层负载均衡与七层负载均衡区别
四层负载均衡,在网络模型中的传输层中,基于主要是基于tcp协议报文实现负载均衡(比如LVS、haproxy就是四层负载均衡器),使用改写报文的源地址和目的地址。
七层负载均衡,在网络模型中应用层中,基于URL或者HTTP协议实现负载均衡,Web服务器。
环境准备
测试环境 CentOS7
Nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。
stream模块默认不安装的,需要手动添加参数:–with-stream,根据自己系统版本选择nginx1.9或以上版本
./configure --add-module=../yaoweibin-nginx_tcp_proxy_module-121c026
安装软件
1.安装Nginx
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
tar -zxvf master
nginx 支持TCP转发和负载均衡的支持
编译Nginx
编译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-121c026/tcp_1_8.patch
如果报错
-bash: patch: 未找到命令 执行 yum -y install patch 安装即可。
4.编译Nginx
./configure --add-module=../yaoweibin-nginx_tcp_proxy_module-121c02
5.
make && make install
如果报错
In file included from ../nginx_tcp_proxy_module-master/ngx_tcp.h:32,
from ../nginx_tcp_proxy_module-master/ngx_tcp.c:5:
../nginx_tcp_proxy_module-master/ngx_tcp_upstream.h:144: error: expected specifier-qualifier-list before 'ngx_resolver_addr_t'
make[1]: *** [objs/addon/nginx_tcp_proxy_module-master/ngx_tcp.o] Error 1
make[1]: Leaving directory `/opt/apps_install/nginx-1.9.9'
make: *** [build] Error 2
修改第三方模块包里的头文,ngx_tcp_upstream.h 144 行将ngx_resolver_addr_t 改为 ngx_addr_t
Cd /usr/local/yaoweibin-nginx_tcp_proxy_modu件le-121c026
Vi
5.继续 make && make install
6.修改Nginx.conf配置文件
worker_processes 1;
events {
worker_connections 1024;
}
### 修改为TCP模块
tcp {
### 定义多个上游服务器
upstream test{
### 定义TCP模块上游服务器
server 192.168.5.165:80001;
server 192.168.5.165:80002;
}
server {
listen 9999;
server_name 192.168.212.137;
### 反向代理upstream
proxy_pass test;
}
}
7.启动Nginx服务器
8.创建两个Sokcet服务器端
Ngxin连接反向代理TCP服务器