关于反向代理,一个请求过来,实际反向代理服务器要和两个对象做3次握手

客户端到反向代理服务器,是一个3次握手

反向代理服务器请求后端web服务器,是一个3次握手

lvs的nat和反向代理不同。

lvs实际只修改数据包的目标地址,不做其它的操作。数据包的随机序列号seq等没变,实际还是客户端和后端web服务器做的3次握手

可以通过tcpdump抓取反向代理服务器的端口记录和后端web服务器的端口记录,看到一个请求过来之后,两个请求的seq是不一样的。

tcpdump 命令用法

-i 接网卡名 ,我这里网卡是是ens33,不是eth0,

port 接端口号 ,抓取哪个端口的数据

-vvv显示的信息多一点

查看抓取过程

可以看到Flag标志位,如果是S,表示syn。 序列号seq是个随机的值

接下来通过是研究证明,反向代理和后端web服务器,客户端和反向代理是2个3次握手

为了防止健康检查的干扰,把haproxy健康检查时间设置长一点,比如100秒,或者干脆取消健康检查

[root@linux-node1 ~]# vim /etc/haproxy/haproxy.cfg
[root@linux-node1 ~]# tail -3 /etc/haproxy/haproxy.cfg
option httpchk GET /index.html
balance roundrobin
server linux-node2 10.0.1.106:8080 check inter 100000 rise 3 fall 3 weight 1
[root@linux-node1 ~]# /etc/init.d/haproxy restart

然后客户端去访问http://10.0.1.105/test.js

这样请求一定是发送到node2,因为反向代理做了规则设置,js为结尾的文件都指向了node2上

抓取反向代理的80端口,看到seq是2964464279

[root@linux-node1 ~]# tcpdump -i ens33 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
02:39:39.219612 IP 10.0.1.72.56057 > linux-node1.example.com.http: Flags [S], seq 2964464279, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
02:39:39.219664 IP linux-node1.example.com.http > 10.0.1.72.56057: Flags [S.], seq 3532921320, ack 2964464280, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
02:39:39.221150 IP 10.0.1.72.56057 > linux-node1.example.com.http: Flags [.], ack 1, win 16425, length 0
02:39:39.221193 IP 10.0.1.72.56059 > linux-node1.example.com.http: Flags [S], seq 1955250633, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
02:39:39.221209 IP linux-node1.example.com.http > 10.0.1.72.56059: Flags [S.], seq 127908139, ack 1955250634, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
02:39:39.222792 IP 10.0.1.72.56059 > linux-node1.example.com.http: Flags [.], ack 1, win 16425, length 0
02:39:39.239383 IP 10.0.1.72.56057 > linux-node1.example.com.http: Flags [P.], seq 1:485, ack 1, win 16425, length 484
02:39:39.242443 IP linux-node1.example.com.http > 10.0.1.72.56057: Flags [P.], seq 1:123, ack 485, win 237, length 122
02:39:39.437364 IP 10.0.1.72.56057 > linux-node1.example.com.http: Flags [.], ack 123, win 16394, length 0
^C
9 packets captured
9 packets received by filter
0 packets dropped by kernel
[root@linux-node1 ~]#

抓取后端web服务器的8080端口,看到seq是4209329376

[root@linux-node2 conf]# tcpdump -i ens33 port 8080 -vvv
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
02:39:39.259521 IP (tos 0x0, ttl 64, id 35579, offset 0, flags [DF], proto TCP (6), length 60)
10.0.1.105.52292 > linux-node2.example.com.webcache: Flags [S], cksum 0xaac9 (correct), seq 4209329376, win 29200, options [mss 1460,sackOK,TS val 446549531 ecr 0,nop,wscale 7], length 0
02:39:39.259574 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
linux-node2.example.com.webcache > 10.0.1.105.52292: Flags [S.], cksum 0x1701 (incorrect -> 0xaaf9), seq 2283093898, ack 4209329377, win 28960, options [mss 1460,sackOK,TS val 446504562 ecr 446549531,nop,wscale 7], length 0
02:39:39.260064 IP (tos 0x0, ttl 64, id 35580, offset 0, flags [DF], proto TCP (6), length 52)
10.0.1.105.52292 > linux-node2.example.com.webcache: Flags [.], cksum 0x4a01 (correct), seq 1, ack 1, win 229, options [nop,nop,TS val 446549531 ecr 446504562], length 0
02:39:39.260236 IP (tos 0x0, ttl 64, id 35581, offset 0, flags [DF], proto TCP (6), length 534)
10.0.1.105.52292 > linux-node2.example.com.webcache: Flags [P.], cksum 0xb821 (correct), seq 1:483, ack 1, win 229, options [nop,nop,TS val 446549532 ecr 446504562], length 482
02:39:39.260276 IP (tos 0x0, ttl 64, id 8696, offset 0, flags [DF], proto TCP (6), length 52)
linux-node2.example.com.webcache > 10.0.1.105.52292: Flags [.], cksum 0x16f9 (incorrect -> 0x4817), seq 1, ack 483, win 235, options [nop,nop,TS val 446504563 ecr 446549532], length 0
02:39:39.260876 IP (tos 0x0, ttl 64, id 8697, offset 0, flags [DF], proto TCP (6), length 174)
linux-node2.example.com.webcache > 10.0.1.105.52292: Flags [P.], cksum 0x1773 (incorrect -> 0x3575), seq 1:123, ack 483, win 235, options [nop,nop,TS val 446504564 ecr 446549532], length 122
02:39:39.261330 IP (tos 0x0, ttl 64, id 35582, offset 0, flags [DF], proto TCP (6), length 52)
10.0.1.105.52292 > linux-node2.example.com.webcache: Flags [.], cksum 0x47a1 (correct), seq 483, ack 123, win 229, options [nop,nop,TS val 446549533 ecr 446504564], length 0
^C
7 packets captured
7 packets received by filter
0 packets dropped by kernel
[root@linux-node2 conf]#

  

使用tcpdump测试反向代理和lvs的nat区别的更多相关文章

  1. 使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度

    碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1.在移动机房放置一台nginx反向代理服务器2.通过域名DNS智能解析,所有移动用户访问www.osyunwei.co ...

  2. JDK动态代理和CGLIB代理的区别

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  3. Spring <tx:annotation-driven>注解 JDK动态代理和CGLIB动态代理 区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  4. 07 nginx反向代理和nfs服务

    作业一:nginx服务二进制安装nginx包 作为web服务修改配置文件 让配置生效,验证配置 作业二:nfs服务二进制安装nfs作为共享存储挂载在三台web的网站根目录下实现,在任意一台web上修改 ...

  5. 反向代理和HTTP重定向

    1.什么是正向代理(前向代理)? 在NAT技术(Network Address Translation)出现之前,所有主机无法直接与外网相连,要想上网,需要连接到一台能够访问外网的Web服务器,再通过 ...

  6. Nginx反向代理和Node.js后端解决跨域问题

    最近在写自己的博客,涉及到跨域的问题,自己捣鼓许久,终于解决了.然后总结一下,记录一下,日后遇到类似的问题的时候也可以得到一些启发. 一.什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏 ...

  7. nginx反向代理和tomcat集群(适用于ubutnu16.04及其centos7)

    下面示例,本人亲测有效 为什么要反向代理和集群? 因为并发问题,很多请求如果全部分发给一个tomcat,一个tomcat优化最好的话,据说可达到800负载,但是面对成千上万的请求,单单一个tomcat ...

  8. 大型网站架构演化(六)——使用反向代理和CDN加速网站响应

    随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大.有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开.为了提供更 ...

  9. 浅谈正向代理、反向代理和CDN的区别

    一.正向代理 1.正向代理位于客户端和源服务器之间的服务器(代理服务器): 2.隐藏客户端:由代理服务器代替客户端去访问目标服务器,用户需要设置代理服务器的IP和端口: 3.每一次请求是到代理服务器, ...

随机推荐

  1. 【转载】Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  2. Angular 学习笔记 (Material Select and AutoComplete)

    记入一些思考 : 这 2 个组件有点像,经常会搞混. select 的定位是选择. 目前 select 最糟糕的一点是 not search friendly. 还有当需要 multiple sele ...

  3. 『流畅的Python』第12章:继承的优缺点

  4. MongoDB学习笔记——数据库的创建与初始

    Part1:MongoDB与SQL的概念对比 图片来源--菜鸟教程 Part2:MongoDB安装地址 直接下载地址:戳这里 备用地址:戳这里 通过备用地址(官网)下载时,要注意下面这个地方 Part ...

  5. Python多线程基本操作

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...

  6. 树形结构表的存储【转自:http://www.cnblogs.com/huangfox/archive/2012/04/11/2442408.html】

    在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系.在传统的关系型数据库中,就已经产生了各种解决方案. 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型 ...

  7. 将SD卡的音频设置为手机铃声后删除,手机铃声没有恢复到默认的问题

    1. Android7.0,将存储卡中MP3设置为铃声,删除该MP3后,settings中的铃声没有变化,来电铃声也没有变化. 原因:android7.0的新特性 google 默认如此设计,在选择铃 ...

  8. 实力封装:Unity打包AssetBundle(大结局)

    →→前情提要:让用户选择要打包的文件←← 大结局:更多选择 Unity打包AssetBundle从入门到放弃系列终于要迎来大结局了[小哥哥表示实在写不动了o(╥﹏╥)o]... 经过上一次的教程,其实 ...

  9. cut语法2

    linux每日一命令--cut--按文件大小排序 显示前100行 显示后五列 ll -Sh|head -n 100|cut -d ' ' -f 5- 一.基本语法cut是一个选取命令,以行为单位,用指 ...

  10. 蓝牙协议分析(9)_BLE安全机制之LL Privacy

    1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...