运维开发宝典046-四层负载均衡集群3
大家好我是云计算磊哥从业20年的IT老鸟。IT架构师培训15年总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文手把手从安装软件讲起从linux系统管理shell脚本编程mysql运维架构备份核心技术Apache/nginx/tomcatWEB服务器管理ansible自动化运维redis集群哨兵LVM/HAproxy/keepalived集群架构rabbitMQ消息队列dockerK8S集群资源管理K8S自愈K8S自动扩容PYTHON编程基础PYTHON自动化运维从行业到产品从过去到未来从理论到操作从视频到文档工具100篇系列文章一站式发布。从零基础入门到30k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续AI大模型开发课程更精彩。五、网络抓包分析1网络抓包介绍1、Tcpdump简介tcpdump 命令是基于unix系统的命令行的数据报嗅探工具可以抓取流动在网卡上的数据包。它的原理大概如下**linux 抓包是通过注册一种虚拟的底层网络协议来完成对网络报文准确的是网络设备消息的处理权。**当网卡接收到一个网络报文之后它会遍历系统中所有已经注册的网络协议如以太网协议、x25协议处理模块来尝试进行报文的解析处理。当抓包模块把自己伪装成一个网络协议的时候系统在收到报文的时候就会给这个伪协议一次机会让它对网卡收到的包进行一次处理此时该模块就会趁机对报文进行窥探也就是将报文完完整整的复制一份假装是自己接收的报文汇报给抓包模块。2、Wireshark 简介Wireshark 是一个网络协议检测工具支持Windows平台、Unix平台、Mac平台一般只在图形界面平台下使用Wireshark如果是Linux的话直接使用 tcpdump了因为一般而言 Linux 都自带的 tcpdump或者用 tcpdump 抓包以后用 Wireshark 打开分析。在Mac平台下Wireshark 通过 WinPcap 进行抓包封装的很好使用起来很方便可以很容易的制定抓包过滤器或者显示过滤器具体简单使用下面会介绍。Wireshark是一个免费的工具。所以tcpdump是用来抓取数据非常方便Wireshark则是用于分析抓取到的数据比较方便。2、Tcpdump 语法1、查看本地网卡状态[rootxulei ~]# netstat -iKernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg docker015004040900020376000BMU eth015002299989494100025581016784000BMRU lo65536850291094000850291094000LRUIface存在的网卡。MTU最大传输单元。RX-OK RX-ERR RX-DRP RX-OVR正确接收数据报的数量以及发生错误、流式、碰撞的总数。TX-OK TX-ERR TX-DRP TX-OVR正确发送数据报的数量以及发生错误、流式、碰撞的总数。[rootxulei ~]# tcpdump --helptcpdump version4.9.0 libpcap version1.5.3 OpenSSL1.0.1e-fips11Feb2013Usage: tcpdump[-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][-Cfile_size][-Ealgo:secret][-Ffile][-Gseconds][-iinterface][-jtstamptype][-Msecret][--number][-Q|-Pin|out|inout][-rfile][-ssnaplen][--time-stamp-precision precision][--immediate-mode][-Ttype][--version][-Vfile][-wfile][-Wfilecount][-ydatalinktype][-zpostrotate-command][-Zuser][expression]2、 Tcpdump 抓包分类1、类型的关键字host指明一台主机。如host 192.168.152.110net指明一个网络地址如net 192.168.152.0port指明端口号如port 80902、确定方向的关键字srcip包的源地址如src 192.168.152.110dstip包的目标地址。如dst 192.168.152.1103、协议的关键字缺省是所有协议的信息包fddi、ip、arp、rarp、tcp、udp。4、其它关键字gateway、broadcast、less、greater。5、常用表达式! or not or and|| or or3、Tcpdump 参数详解A以ascii编码打印每个报文不包括链路的头。a将网络地址和广播地址转变成名字。c抓取指定数目的包。C用于判断用 -w 选项将报文写入的文件的大小是否超过这个值如果超过了就新建文件文件名后缀是1、2、3依次增加d将匹配信息包的代码以人们能够理解的汇编格式给出dd将匹配信息包的代码以c语言程序段的格式给出ddd将匹配信息包的代码以十进制的形式给出D列出当前主机的所有网卡编号和名称可以用于选项 -ie在输出行打印出数据链路层的头部信息f将外部的Internet地址以数字的形式打印出来F表达文件从指定的文件中读取表达式,忽略其它的表达式i网络界面监听主机的该网卡上的数据流如果没有指定就会使用最小网卡编号的网卡在选项-D可知道但是不包括环路接口linux 2.2 内核及之后的版本支持 any 网卡用于指代任意网卡l如果没有使用 -w 选项就可以将报文打印到 标准输出终端此时这是默认n显示ip而不是主机名nn显示port而不是服务名N不列出域名O不将数据包编码最佳化p不让网络界面进入混杂模式q快速输出仅列出少数的传输协议信息r数据包文件从指定的文件中读取包(这些包一般通过-w选项产生)s数据包大小指定抓包显示一行的宽度-s0表示可按包长显示完整的包经常和-A一起用默认截取长度为60个字节但一般ethernet MTU都是1500字节。所以要抓取大于60字节的包时使用默认参数就会导致包数据丢失S用绝对而非相对数值列出TCP关联数t在输出的每一行不打印时间戳tt在输出的每一行显示未经格式化的时间戳记T数据包类型将监听到的包直接解释为指定的类型的报文常见的类型有rpc 远程过程调用和snmp简单网络管理协议v输出一个稍微详细的信息例如在ip包中可以包括ttl和服务类型的信息vv输出详细的报文信息x/-xx/-X/-XX以十六进制显示包内容几个选项只有细微的差别详见man手册w数据包文件直接将包写入文件中并不分析和打印出来expression用于筛选的逻辑表达式4、Tcpdump 参数含义[rootxulei ~]# tcpdump host 192.168.152.110 -i eth0 -c 10 -l -ntcpdump: verbose output suppressed, use-vor-vvforfull protocol decode listening on ens5f0, link-type EN10MB(Ethernet), capture size262144bytes10:59:51.071567 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1715331653:1715331865, ack2259278754, win65535, length21210:59:51.071699 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq212:408, ack1, win65535, length19610:59:51.071794 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq408:572, ack1, win65535, length16410:59:51.071861 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq572:736, ack1, win65535, length16410:59:51.071910 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq736:900, ack1, win65535, length16410:59:51.071958 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq900:1064, ack1, win65535, length16410:59:51.072006 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1064:1228, ack1, win65535, length16410:59:51.072053 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1228:1392, ack1, win65535, length16410:59:51.072141 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1392:1556, ack1, win65535, length16410:59:51.077438 IP192.168.152.110.760810.1.87.25.ssh: Flags[.], ack212, win63360, length010packets captured13packets received by filter0packets dropped by kernel1、第一行tcpdump: verbose output suppressed, use-vor-vvforfull protocol decode使用选项v和vv可以看出更全的详细内容。2、第二行listening on ens5f0, link-type EN10MB(Ethernet), capture size262144bytes说明监听的是ens5f0这个NIC设备的网络包且它的链路层是基于以太网的要抓的包大小限制262144装包大小限制可以用利用-s来控制。3、第三行10:59:51.071567 IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1715331653:1715331865, ack2259278754, win65535, length212。 -10:59:51.071567抓包时间为时、分、秒、微妙。 -IP192.168.152.21.ssh192.168.152.110.7608: Flags[P.],seq1715331653:1715331865, ack2259278754, win65535, length212这里用mandump这个命令引用说明 上面视图简单的解释就是该包192.168.152.21传到192.168.152.110通过的端口是22ssh的端口向7608前几个是使用的是PUSH的标识最后一个是返回的ACK标识。5、Tcpdump 命令实践1、直接启动tcpdump将抓取所有经过第一个网络接口上的数据包[rootxulei ~]# tcpdump2、抓取所有经过指定网络接口上的数据包[rootxulei ~]# tcpdump -i eth03、抓取所有经过 eth0目的或源地址是 192.168.152.255 的网络数据[rootxulei ~]# tcpdump -i eth0 host 192.168.152.1004、抓取主机192.168.152.255和主机192.168.152.61或192.168.152.95的通信[rootxulei ~]# tcpdump host 192.168.152.100 and 192.168.152.101 (或者用 or)5、抓取主机192.168.1523.210除了和主机192.168.152.61之外所有主机通信的数据包[rootxulei ~]# tcpdump -n host 192.168.152.100 and ! 192.168.152.1016、抓取主机192.168.152.255除了和主机192.168.152.61之外所有主机通信的ip包[rootxulei ~]# tcpdump ip -n host 192.168.152.100 and ! 192.168.152.1017、抓取主机192.168.152.3发送的所有数据[rootxulei ~]# tcpdump -i eth0 src host 192.168.152.100 (注意数据流向)8、抓取主机192.168.152.3接收的所有数据[rootxulei ~]# tcpdump -i eth0 dst host 192.168.152.100 (注意数据流向)9、抓取主机192.168.152.3所有在TCP 80端口的数据包[rootxulei ~]# tcpdump -i eth0 host 192.168.152.3 and tcp port 8010、抓取HTTP主机192.168.152.3在80端口接收到的数据包[rootxulei ~]# tcpdump -i eth0 host 192.168.152.3 and dst port 8011、抓取所有经过 eth0目的或源端口是 25 的网络数据[rootxulei ~]# tcpdump -i eth0 port 25#源端口[rootxulei ~]# tcpdump -i eth0 src port 25#目的端口[rootxulei ~]# tcpdump -i eth0 dst port 25 # 网络过滤12、抓取所有经过 eth0网络是 192.168上的数据包[rootxulei ~]# tcpdump-i eth0 net 192.168[rootxulei ~]# tcpdump -i enh0 src net 192.168[rootxulei ~]# tcpdump -i eth0 dst net 192.168[rootxulei ~]# tcpdump-i eth0 net 192.168.152[rootxulei ~]# tcpdump -i eth0 net 192.168.152.0/2413、协议过滤[rootxulei ~]# tcpdump -i eth0 arp[rootxulei ~]# tcpdump-i eth0 ip[rootxulei ~]# tcpdump -i eth0[rootxulei ~]# tcptcpdump -i eth0 udp[rootxulei ~]# tcpdump -i eth0 icmp14、抓取所有经过 eth0目的地址是 192.168.152.254 或 192.168.152.200 端口是 80 的 TCP 数据[rootxulei ~]# tcpdump -i eth0 ((tcp) and (port 80) and ((dst host 192.168.152.254) or (dst host 192.168.152.200)))15、抓取所有经过 eth0目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据[rootxulei ~]# tcpdump -i eth1 ((icmp) and ((ether dst host 00:01:02:03:04:05)))16、抓取所有经过 eth0目的网络是 192.168但目的主机不是 192.168.152.200 的 TCP 数据[rootxulei ~]# tcpdump -i eth0 ((tcp) and ((dst net 192.168) and (not dst host 192.168.152.200)))17、只抓 SYN 包[rootxulei ~]# tcpdump -i eth0 tcp[tcpflags] tcp-syn18、抓 SYN, ACK[rootxulei ~]# tcpdump -i eth0 tcp[tcpflags]19、抓 SMTP 数据抓取数据区开始为”MAIL”的包”MAIL”的十六进制为 0x4d41494c[rootxulei ~]# tcpdump -i eth0 ((port 25) and (tcp[(tcp[12]2):4] 0x4d41494c))20、抓 HTTP GET 数据”GET “的十六进制是 0x47455420[rootxulei ~]# tcpdump -i eth0 tcp[(tcp[12]x2):4] 0x47455429# 0x4745为GET前两个字母GE,0x4854为HTTP前两个字母HT[rootxulei ~]# tcpdump -XvvennSs 0 -i eth0 tcp[20:2]0x4745 or tcp[20:2]0x485421、抓 SSH 返回”SSH-“的十六进制是 0x5353482D[rootxulei ~]# tcpdump -i eth0 tcp[(tcp[12]2):4]-0x5353482D# 抓老版本的SSH返回信息,如SSH-1.99..[rootxulei ~]# tcpdump -i eth0 (tcp (tcp[12]2):4] 0x5353482D) and (tcp[((tcp[12]2)4):2] 0x312E3)22、高级包头过滤如前两个的包头过滤首先了解如何从包头过滤信息proto[x:y]# :过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第二字专从研始排)操作符:,, 抓取端口大于1024的TCP数据包[rootxulei ~]# tcpdump -i eth0 tcp[0:2] 1024‘23、抓 DNS 请求数据[rootxulei ~]# tcpdump -i eth0 udp dst port 5324、其他-c 参数对于运维人员来说也比较常用因为流量比较大的服务器靠人工 CTRLC 还是抓的太多于是可以用-c 参数指定抓多少个包。[rootxulei ~]# time tcpdump -nn -i eth0 tcp[tcpflags] tcp-syn -C 10000 /dev/null上面的命令计算抓10000个SYN包花费多少时间,可以判断访问量大概是多少。实时抓取端口号8000的GET包,然后写入GET.log[rootxulei ~]# tcpdump -i eth0 ((port 8000) and (tcp[(tcp[12]2):4]0x47455420)) -nnAL -w /tmp/GET.log6、Tcpdump 抓包示例想抓取访问某个网站时的网络数据。比如网站 http://www.baidu.com/ 怎么做1、通过tcpdump截获主机 www.baidu.com 发送与接收所有的数据包[rootxulei ~]# tcpdump -i eth0 host www.baidu.com2、访问这个网站[rootxulei ~]# wget www.baidu.cn查看控制台输出 确认序列号ack为何是1。这是相对值,如何显示绝对值[rootxulei ~]# tcpdump -S -i eth0 host www.baidu.com[rootxulei ~]# wget www.baidu.com再次查看控制输出3、想要看到详细的http报文。怎么做[rootxulei ~]# tcpdump -A -i eth0 host www.baidu.com将抓取的结果存到文件,比如文件file1[rootxulei ~]# tcpdump -A -i eth0 -w filel host www.baidu.com如何读取这个文件的基本信息[rootxulei ~]# tcpdump -r filel想要了解更多,比如上面的http报文[rootxulei ~]# tcpdump -A -r filel也同时想要将确认序列号ack打印成绝对值[rootxulei ~]# tcpdump -AS -r filel注无参数的选项比如-A,-S,-e,等。均可以共用一个减号src host www.baidu.cn属于expression ,如果太长,可以用单引号括起来:[rootxulei ~]# tcpdump -i eth0 src host www. baidu.com4、分析抓取到的报文16:50:11.916308 IP192.168.152.3.5234661.135.169.121.http: Flags[P.],seq1888894293:1888894434, ack2526934942, win8192, Length141: HTTP: GET/ HTTP/1.1 第一列是时间戳时、分、秒、微秒 第二列是网际网路协议的名称 第三列是报文发送方的十进制的网际网路协议地址以及紧跟其后的端口号(偶尔会是某个协议名如http如果在此处仍然显示端口号加上-n选项 第四列是大于号 第五列是报文接收方的十进制的网际网路协议地址,以及紧跟其后的端口号(偶尔会是某个协议名如http,如果在此处仍然显示端口号加上-n选项)第六列是冒号第七列是Flags标识,可能的取值是[S.][][P.][F.]第八、九、.…列是tcp协议报文头的一些变量值: seq是请求同步的序列号 ack是已经同步的序列号 win是当前可用窗口大小 length是tcp协议报文体的长度 如果加入了-5选项,会看到的seg, ack是两个冒号分割的值,分别表示变更前后的值。7、Tcpdump 抓取 TCP 包分析TCP传输控制协议是面向连接的可靠的传输层协议在进行数据传输之前需要在传输数据的两端客户端和服务器端创建一个连接这个连接由一对插口地址唯一标识即是在IP报文首部的源IP地址、目的IP地址以及TCP数据报首部的源端口地址和目的端口地址。TCP首部结构如下注意通常情况下一个正常的TCP连接都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手其中在TCP连接和断开连接过程中的关键部分如下源端口号即发送方的端口号在TCP连接过程中对于客户端端口号往往由内核分配无需进程指定目的端口号即发送目的的端口号序号即为发送的数据段首个字节的序号确认序号在收到对方发来的数据报发送确认时期待对方下一次发送的数据序号SYN同步序列编号Synchronize Sequence NumbersACK确认编号Acknowledgement NumberFIN结束标志FINish1、TCP三次握手三次握手的过程如下step1. 由客户端向服务器端发起TCP连接请求。Client发送同步序列编号SYN置为1发送序号Seq为一个随机数这里假设为X确认序号ACK置为0step2. 服务器端接收到连接请求。Server响应同步序列编号SYN置为1并将确认序号ACK置为X1然后生成一个随机数Y作为发送序号Seq因为所确认的数据报的确认序号未初始化step3. 客户端对接收到的确认进行确认。Client发送将确认序号ACK置为Y1然后将发送序号Seq置为X1即为接收到的数据报的确认序号为什么是三次握手而不是两次对于step3的作用假设一种情况客户端A向服务器B发送一个连接请求数据报然后这个数据报在网络中滞留导致其迟到了虽然迟到了但是服务器仍然会接收并发回一个确认数据报。但是A却因为久久收不到B的确认而将发送的请求连接置为失效等到一段时间后接到B发送过来的确认A认为自己现在没有发送连接而B却一直以为连接成功了于是一直在等待A的动作而A将不会有任何的动作了。这会导致服务器资源白白浪费掉了因此两次握手是不行的因此需要再加上一次对B发过来的确认再进行一次确认即确认这次连接是有效的从而建立连接。对于双方发送序号的初始化为何值有的系统中是显式的初始化序号是0但是这种已知的初始化值是非常危险的因为这会使得一些黑客钻漏洞发送一些数据报来破坏连接。因此初始化序号因为取随机数会更好一些并且是越随机越安全。1.Tcpdump抓TCP三次握手抓包分析[rootxulei ~]# tcpdump host 192.168.152.3 -i lo and tcp port 8080# 接着再运行[rootxulei ~]# curl http://192.168.152.3:8080/atbg/doc2.控制台输出# TCP三次握手start16:00:13.486776 IP192.168.152.3.61725192.168.152.3.8080: Flags[S],seq1944916150win65535options[mss16344,nop ,wscale5, nop,nop,TS val906474698ecr O,sackoK,eol], length016:00:13.486850 IP192.168.152.3.8080192.168.152.3.61725: Flags[S.],seq1119565918 ack1944916151, win65535 options_[mss16344,nop,wscale5,nop ,nop,TS val906474698ecr906474698, sackOK, eol], length016:00:13.486860 IP192.168.152.3.61725192.168.152.3.8080: Flags[.]ack1119565919win12759options[nop ,nop,TS val906474698ecr906474698] length016:00:13.486868IP192.168.152.3.8080192.168.152.3.61725: Flags[.], ack1944916151 win12759 options[nop ,nop,TS val906474698ecr906474698] length0# TCP三次握手end#传输数据start16:00:13.486923 IP192.168.152.3.61725192.168.152..3.8080: Flags[P.],seq1944916151:1944916238ack1119565919, win12759options[nop,nop,TS val906474698ecr906474698], length87: HTTP: GET /atbg/doc HTTP/1.116:00:13. .486944 IP192.168.152.3.8080192.168.152.3.61725: FLags[.]ack1944916238, win12756options[nop ,nop,TS val906474698ecr906474698] length016:00:13.489750 IP192.168.152.3.8080192.168.152.3.61725: Flags[P.],seq1119565919:1119571913, ack1944916238, win12756, options[nop , nopp,ts val906474701ecr906474698] length5994: HTTP: HTTP/1.12000K16:00:13.489784 IP192.168.152.3.61725192.168.152.3.8080: FLags[.]ack1119571913, win12572, options[nop,nop,TS val906474701ecr906474701] length❷#传输数据end# TCP四次挥手start16:00:13.490836 IP192.168.152.3.61725192.168.152.3.8080: Flags_[F.],seq1944916238 ack1119571913win12572options[nop,nop,TS val906474702ecr906474701]length016:00:13490869 IP192.168.152.3.808010.37.63.3.61725: Flags[.]ack1944916239 win12756, options[nop ,nop,TS val906474702ecr906474702] length016:00:13.490875 IP192.168.152.3.61725192.168.152.3.8080: Flags[.], ack_1119571913, win12572 options[nop,nop,TS val906474702ecr906474702] length016:00:13.491004 IP192.168.152.3.8080192.168.152.3.61725: Flags[F.]seq1119571913 ack1944916239win12756 options[nop,nop,TS val906474702ecr906474702]length16:00:13.491081 IP10.37.63.3.61725192.168.152.3.8080: Flags[.]ack1119571914, win12572, options[nop ,nop,TS val906474702ecr906474702] length0# TCP四次挥手end每一行中间都有这个包所携带的标志SSYN发起连接标志。PPUSH传送数据标志。FFIN关闭连接标志。ack表示确认包。RSTRESET异常关闭连接。.表示没有任何标志。第1行16:00:13.486776从192.168.152.3client的临时端口61725向192.168.152.3server的8080监听端口发起连接client初始包序号seq为1944916150滑动窗口大小为65535字节滑动窗口即tcp接收缓冲区的大小用于tcp拥塞控制mss大小为16344即可接收的最大包长度通常为MTU减40字节IP头和TCP头各20字节。【seq1944916150ack0syn1】第2行16:00:13.486850server响应连接同时带上第一个包的ack信息为client端的初始包序号seq加1即1944916151即server端下次等待接受这个包序号的包用于tcp字节流的顺序控制。Server端的初始包序号seq为1119565918mss也是16344。【seq1119565918ack1944916151syn1】第3行15:46:13.084161client再次发送确认连接tcp连接三次握手完成等待传输数据包。【ack1119565919seq1944916151】2、TCP四次挥手连接双方在完成数据传输之后就需要断开连接。由于TCP连接是属于全双工的即连接双方可以在一条TCP连接上互相传输数据因此在断开时存在一个半关闭状态即有有一方失去发送数据的能力却还能接收数据。因此断开连接需要分为四次。主要过程如下step1. 主机A向主机B发起断开连接请求之后主机A进入FIN-WAIT-1状态step2. 主机B收到主机A的请求后向主机A发回确认然后进入CLOSE-WAIT状态step3. 主机A收到B的确认之后进入FIN-WAIT-2状态此时便是半关闭状态即主机A失去发送能力但是主机B却还能向A发送数据并且A可以接收数据。此时主机B占主导位置了如果需要继续关闭则需要主机B来操作了step4. 主机B向A发出断开连接请求然后进入LAST-ACK状态step5. 主机A接收到请求后发送确认进入TIME-WAIT状态等待2MSL之后进入CLOSED状态而主机B则在接受到确认后进入CLOSED状态为何主机A在发送了最后的确认后没有进入CLOSED状态反而进入了一个等待2MSL的TIME-WAIT主要作用有两个第一确保主机A最后发送的确认能够到达主机B。如果处于LAST-ACK状态的主机B一直收不到来自主机A的确认它会重传断开连接请求然后主机A就可以有足够的时间去再次发送确认。但是这也只能尽最大力量来确保能够正常断开如果主机A的确认总是在网络中滞留失效从而超过了2MSL最后也无法正常断开第二如果主机A在发送了确认之后立即进入CLOSED状态。假设之后主机A再次向主机B发送一条连接请求而这条连接请求比之前的确认报文更早地到达主机B则会使得主机B以为这条连接请求是在旧的连接中A发出的报文并不看成是一条新的连接请求了即使得这个连接请求失效了增加2MSL的时间可以使得这个失效的连接请求报文作废这样才不影响下次新的连接请求中出现失效的连接请求。为什么断开连接请求报文只有三个而不是四个因为在TCP连接过程中确认的发送有一个延时即经受延时的确认一端在发送确认的时候将等待一段时间如果自己在这段事件内也有数据要发送就跟确认一起发送如果没有则确认单独发送。而我们的抓包实验中由服务器端先断开连接之后客户端在确认的延迟时间内也有请求断开连接需要发送于是就与上次确认一起发送因此就只有三个数据报了。3、Wireshark 分析 Tcpdump 抓包结果1、Tcpdump 抓包tcpdumphost10.37.63.3-ilo and port8080-n-w./Desktop/tcpdump_10.37.63.3_8080_20160525.cap# 然后再执行curlcurlhttp://10.37.63.3:8080/atbg/doc2、Wireshark 分析使用Wireshark打开tcpdump_10.37.63.3_8080_20160525.cap文件No. 1-4 行TCP三次握手环节No. 5-8 行TCP传输数据环节No. 9-13 行TCP四次挥手环节3、查看 http 请求和响应的方法弹窗如下图所示上面红色部分为请求信息下面蓝色部分为响应信息以上是 Wireshark 分析 tcpdump 的简单使用Wireshark更强大的是过滤器工具大家可以自行去多研究学习Wireshark.这三篇四层负载均衡器运维文章主要先讲了负载均衡基础区分了四层和七层负载重点详细讲解了内核级四层工具 LVS介绍它的四种工作模式、各类调度算法还附带 NAT、DR 两种模式完整搭建脚本之后又实操教学 tcpdump 抓包工具拆解 TCP 三次握手、四次挥手等网络报文顺带介绍七层负载工具 Nginx 轻便易上手、适合中小型 Web 业务HAProxy 功能全面适配大型多协议高并发场景。