From 7bf83ad84e9ab97ce9f9fe2cb7ee705618578ce9 Mon Sep 17 00:00:00 2001 From: Jeff Chen Date: Fri, 26 Feb 2021 21:37:24 +0800 Subject: [PATCH] 2-26 night, wondershaper and VMWare player option --- data/appendix/cheat_sheet.tex | 4 +- data/ch_wireshark/sec_arp.tex | 4 +- data/ch_wireshark/sec_tcp.tex | 53 +++++++++++--------- figure/chapters/wireshark/TCP-structure.png | Bin 20411 -> 22473 bytes 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/data/appendix/cheat_sheet.tex b/data/appendix/cheat_sheet.tex index ec0a9fb..a85b30e 100644 --- a/data/appendix/cheat_sheet.tex +++ b/data/appendix/cheat_sheet.tex @@ -84,8 +84,8 @@ & 2 & $\star\star$ \\ \cline{2-5} & TCP与拥塞控制 & - \tabitem{观察TCP报文,分析通信时序,理解TCP的工作过程;} \par - \tabitem{分析TCP连接管理、流量控制和拥塞控制的过程,能够分析TCP的性能问题。} + \tabitem{观察TCP报文,分析通信时序,理解TCP的工作机制;} \par + \tabitem{分析TCP流量控制和拥塞控制的过程,学会排查TCP性能问题。} & 4 & $\star\star\star$ \\ \hline & 套接字基础与UDP通信 & diff --git a/data/ch_wireshark/sec_arp.tex b/data/ch_wireshark/sec_arp.tex index e5d1828..cd3bd4f 100644 --- a/data/ch_wireshark/sec_arp.tex +++ b/data/ch_wireshark/sec_arp.tex @@ -41,7 +41,7 @@ Wireshark软件是目前全球使用最广泛的开源网络数据包分析工 能够分析各层网络协议的性能、掌握通信主体的运行情况, 确认带宽分配和时延大小、查看应用的快慢并改进优化, 识别网络中存在的攻击或恶意行为、解决网络异常和故障。 -Wireshark可以在Windows、Linux和MacOS操作系统中运行, +Wireshark可以在Windows、Linux和macOS操作系统中运行, 具备友好的图形界面、丰富的统计及图表分析功能。 \subsubsection{以太网MAC帧格式} @@ -125,7 +125,7 @@ IP地址长度为4字节。每个字段的含义如下: \begin{itemize} \item PC机一台,连入局域网; - \item Wireshark软件,建议3.0以上。 + \item Wireshark软件,建议3.0以上版本。 \end{itemize} \subsection{实验步骤} diff --git a/data/ch_wireshark/sec_tcp.tex b/data/ch_wireshark/sec_tcp.tex index 65e5a7f..68ce846 100644 --- a/data/ch_wireshark/sec_tcp.tex +++ b/data/ch_wireshark/sec_tcp.tex @@ -41,7 +41,7 @@ TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、 TCP协议基于“尽力而为”的网络层为应用层提供可靠的进程间通信服务, 具体地说是可靠的全双工的端对端字节流传输服务。 在TCP的协议传输单元中(TCP报文段,TCP Segment), -收发双方以字节为单位使用序列号(Sequence Number)明确收发的数据, +收发双方以字节为单位使用序号(Sequence Number)明确收发的数据, 使用ACK反馈(Acknowledgment)机制,实现端对端的可靠传输控制。 \paragraph{TCP报文段(Segment)}~{} @@ -64,7 +64,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示, 与源IP地址一起标识发送该TCP报文段的通信进程。端口号范围0-65535。 \item \textbf{目的端口号(Destionation Port):}16位目的端口, 与目的IP地址一起标识接收该TCP报文段的通信进程。 - \item \textbf{序号(Sequence Number):}该TCP报文段中第一个数据字节的序号,占4个字节。在TCP连接建立时,通常生成一个随机数作为字节序列号的初始值(ISN)。 + \item \textbf{序号(Sequence Number):}该TCP报文段中第一个数据字节的序号,占4个字节。在TCP连接建立时,通常生成一个随机数作为字节序号的初始值(ISN)。 \item \textbf{确认号(Acknowledgement Number):} 表示期望收到对方下一个报文段的字节序号,占4个字节。 \item \textbf{标志位(TCP Flags):} @@ -101,7 +101,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示, \textbf{建立过程:}TCP是面向连接的,数据传输之前必须在双方之间建立一条连接, 并通过三次握手过程完成。 -其主要目的是,同步连接双方的序列号和确认号,并交换TCP窗口大小等控制信息。 +其主要目的是,同步连接双方的序号和确认号,并交换TCP窗口大小等控制信息。 一般地,客户端主动向服务器端发起连接请求,具体过程如下: \begin{enumerate} @@ -180,7 +180,7 @@ cwnd初始值为1个MSS(Maximum Segment Size); 则启用快重传算法,并将cwnd重置为1,ssthresh减半。 TCP拥塞控制算法一直处在不断的改进之中,围绕对网络环境因素感知和拥塞避免的控制, -涌现了策略算法。TCP Reno继承Tahoe的三个算法并增加了快速恢复(Fast Recovery)算法。 +涌现出新的策略算法。TCP Reno继承Tahoe的三个算法并增加了快速恢复(Fast Recovery)算法。 收到三个重复的ACK后,Reno会把当前的ssthresh的值设置为当前cwnd的一半, 并将cwnd更新为ssthresh+3MSS;然后每收到一个重复ACK则cwnd+1, 直至收到新确认号的ACK则将cwnd更新为ssthresh。 @@ -197,11 +197,13 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \subsubsection{实验方法和手段} -使用VMWare软件配置两台本地虚拟机,本地相互连接(如图\ref{fig:c:wireshark_TCP-topo})。 -通过“虚拟机设置->硬件->网络适配器->高级”(如图\ref{fig:c:wireshark_VM-advance-setup}) -设置虚拟机的网卡传入/传出带宽、数据包丢失率、延迟等,仿真不同的网络条件。 +两台实验机本地相互连接(如图\ref{fig:c:wireshark_TCP-topo}), +在实验机中仿真不同的网络条件,以便观察TCP的各种控制现象。 +方案一使用虚拟机:VMware Player中通过“虚拟机设置->硬件->网络适配器->高级”(如图\ref{fig:c:wireshark_VM-advance-setup}) +设置虚拟机的网卡传入/传出带宽、数据包丢失率、延迟等; +方案二使用物理机:使用tc进行流量控制场景仿真,使用wondershaper对网卡进行限速。 本实验需要使用的命令和工具,如表\ref{tab:c:wireshark_tools-command}所列。 -常用的Linux操作系统命令还包括:echo、cat、sysctl、ping、ftp。 +常用的Linux命令还包括:echo、cat、sysctl、ping、ftp等。 \begin{figure}[!ht] \centering @@ -223,7 +225,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \centering \caption{主要工具及命令列表} \label{tab:c:wireshark_tools-command} - \begin{tabular}{|m{1.5cm}<{\centering}|m{3cm}<{\centering}|m{8.5cm}|} + \begin{tabular}{|m{2.5cm}<{\centering}|m{3cm}<{\centering}|m{8.5cm}|} \hline \heiti 命令 & \heiti 作用 & \multicolumn{1}{c|}{\heiti 参考}\\ \hline \texttt{ifconfig} & 配置网络 & \url{https://man.linuxde.net/ifconfig}\\ \hline @@ -235,6 +237,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \texttt{netwox} & 网络工具 & \url{https://sourceforge.net/projects/ntwox/}\\ \hline \texttt{ss} & Socket状态 & \texttt{ss –atn}\\ \hline \texttt{netstat} & 显示网络状态 & \texttt{netstat –atn}\\ \hline + \texttt{wondershaper} & 网卡限速工具 & \texttt{wondershaper [网口] [下载速率] [上行速率] wondershaper clear [网口]}\\ \hline \texttt{iperf3} & 网络性能分析 & \url{https://iperf.fr/}\\ \hline \end{tabular} \end{table} @@ -243,7 +246,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \label{subsec:c:wireshark:s:tcp_requirement} \begin{enumerate} - \item 硬件:处于同一局域网的两台PC机。 + \item 硬件:处于同一局域网的两台PC机(可使用虚拟机也可使用物理机)。 \item 软件:Ubuntu系统(18.04版), 预装wireshark、curl、vsftp、netwox、telnet、nmap和iperf3。 \item 环境准备:分别以PC1、PC2作为TCP的客户端与服务端; @@ -269,20 +272,20 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \begin{enumerate} \item 利用python自带的SimpleHTTPServer模块, - 在2\#机上启动一个简易的web服务器。 + 在PC2上启动一个简易的web服务器。 终端上运行\texttt{echo "TCP lab test" > index.html}创建index.html文件为测试站首页, 运行\texttt{sudo python -m SimpleHTTPServer 80}启动一个简易web服务器; 打开新终端,键入\texttt{ss -tln}查看当前主机打开的TCP连接,确认80端口处理监听状态。 - \item 在1\#机上打开一个终端,键入\texttt{sudo wireshark}启动抓包软件; - 再打开一个新终端,键入 curl <2\#机IP> ; + \item 在PC1上打开一个终端,键入\texttt{sudo wireshark}启动抓包软件; + 再打开一个新终端,键入 curl ; 停止抓包,在wireshark过滤出TCP类型报文。 观察首个TCP报文头,并分析各段值代表的意义。 - 如果想要关闭相对序列号/确认号, + 如果想要关闭相对序号/确认号, 可以选择Wireshark菜单栏中的 Edit$\rightarrow$Preference$\rightarrow$protocols$\rightarrow$TCP, 去掉Relative sequence number勾选项。 使用Wireshark内置的绘制流功能,选择菜单栏中的Statistics$\rightarrow$Flow Graph, - Flow Type选择TCP flows可以直观地显示TCP序列号和确认号是如何工作的。 + Flow Type选择TCP flows可以直观地显示TCP序号和确认号是如何工作的。 \item 观察TCP三次握手与四次挥手报文,注意报文收发过程中,双方TCP状态的变化。 以本次抓得报文为据,分别画出本次TCP连接三次握手与四次挥手的时序图, 结合TCP状态机,在双方各阶段标出对应的TCP状态。选择其中一个TCP报文, @@ -305,7 +308,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \item 再次curl访问,观察抓包内容。 \item 关闭服务器端的SimpleHTTPServer(ctrl+C中断,或关闭所在终端), 客户端curl访问服务器80端口,观察应答报文。 - \item 运行\texttt{nmap -sS <2\#机IP>}扫描服务器,并抓包。 + \item 运行\texttt{nmap -sS }扫描服务器,并抓包。 \item 在报告中总结以上观察结果,解释SYN扫描原理。 \end{enumerate} \item 客户端发送了第一个SYN连接请求,服务器无响应的情景。 @@ -321,8 +324,8 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \item 观察TCP的状态变化,分析wireshark抓到的TCP异常报文。 \item 服务端的SYN-RECV 状态何时释放? \item SYN ACK重传了几次,时间间隔有何变化? - \item 参考(1)在服务端修改SYN ACK重传次数(tcp\_synack\_retries), - 再次观察,此任务结束后清空防火墙规则(iptables -F)。 + \item 参考1中的操作,在服务端修改SYN ACK重传次数(tcp\_synack\_retries), + 再次观察,此任务结束后清空防火墙规则(iptables -F)。 \end{enumerate} \item SYN洪泛。 在服务器端\texttt{sudo echo "0">/proc/sys/net/ipv4/tcp\_syncookies}禁用syncookies, @@ -339,18 +342,18 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \item 产生一个100M文件: \texttt{dd if=/dev/zero of=100M.file bs=1M count=100} - \item 模拟网络抖动: + \item 模拟网络延迟、包重复、包乱序、包损坏: \texttt{tc qdisc add dev ens33 root netem delay 70ms 10ms 30\% duplicate 1\% reorder 5\% 10\% corrupt 0.1\%} - (将此行命令的add改为change/del即修改/删除此规则)。 + (调整上述命令中的数值,以达到期望效果;将此行命令的add改为change/del即修改/删除此规则。) \item 下载服务器上的大文件:\texttt{wget 192.168.100.144/100M.file} \end{enumerate} 抓包记录以上过程,分析黑色标签错误报文,结合TCP实现机制, 分析这些报文产生的原因。此类报文也可以从现实网络行为抓取获得, 请结合实际抓得报文分析,报文附件随报告提交。 - 包含但不限于以下几种类型报文: + 包括但不限于以下几种类型报文: [Duplicate ACK]、[TCP Retransmission]、[Fast Retransmission]、 [TCP Spurious Retransmission]、[TCP Out-Of-Order]、 [TCP Previous segment not captured]。 @@ -373,8 +376,9 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \subsubsection{拥塞控制} \begin{enumerate} - \item 在VMWare中的虚拟机设置$\rightarrow$网络适配器$\rightarrow$高级中设置, - 设置两台虚拟机的网卡传入/传出带宽为10Mbps以下, + \item 任一端限制网卡传入/传出带宽为10Mbps以下:使用虚拟机作为实验机,可 + 在VMWare Player中的虚拟机设置$\rightarrow$网络适配器$\rightarrow$高级中设置; + 物理机可使用wondershaper命令进行限速。 再启动应用(可以是http wget,也可以ftp下载/上传)传输大文件观察。 \item Wireshark抓取全部传输过程数据,找出该网络活动的拥塞点, 并结合Analyze$\rightarrow$Expert Information、Statistic$\rightarrow$IO Graphs、 @@ -448,7 +452,8 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion- \item 环境还原:前面操作的iptables、tc遗留规则可能会影响后面的操作效果, \texttt{iptables --list}查看核对一下当前的规则, \texttt{iptables -F}清空当前规则; - 同样,使用\texttt{tc qdisc del dev eth0 root RULE}清除网卡eth0队列规则。 + 同样,使用\texttt{tc qdisc del dev eth0 root RULE}清除网卡eth0队列规则; + wondershaper限速使用clear参数清除。 使用虚拟机的快照功能是更原始、更彻底的还原方式。 \item 批量网络扫描是危害网络行为,仅在实验室环境下进行试验学习, 不得用于运营网络。 diff --git a/figure/chapters/wireshark/TCP-structure.png b/figure/chapters/wireshark/TCP-structure.png index 0bf5716d8a32c515c03dc77bd930b5d44a0c921b..6950d814247520d030ff52ff8d2cabc3c456a091 100644 GIT binary patch literal 22473 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 R07mrkfWfFo=_s%0e*r5!NQD3Z literal 20411 zcmc$_c{tQx_&}$rBBq_2tlp+*aLLXX@ zq)~Q73uR5#Lh+pWxsRT1Eqva*7PhN|P=`fgrC zznzX$6_h{+vi9D79{!=h;1Op7ekm(~VmJysfe&h+J?k+{4RHeeK?VeniS|T-sW(+h z1)~aASAeU5Vp&ro8#AnwiavNId;1c>A48(MuRp7aN03{ng10}Yu8dFsgn%M_Qjk9d zRKjSeD<~--R5X+TeW3h*O$-A_2LC{rwVS6~koW%>j5TK>)y?bgdM2H{9Ecl4Dogcbf`$d4Zu=+c)NK8xq;?N z-aD&lY9FQ%n$idabv0#o zeLOMDIK&5yvP1gk1!kWxVz+uEBs27|#- zVd{7cAReWr4&E?uEHVh~hWDhI+L3JnOdW%9_J$10%%rnjH!bM zQPt5SJVb+H666_-HHKphgEaj}Ml^z>2dErk*lYD@&T14UQ5RZiRHJv9(Ilq2AVi8HR}MJY8cs#5`hZQuro141gZL15{*Kv@ql_f z5fw&2n%SuvlFh^L2I_`rRZAa#D+@G{h&Ko&m1cQaDA3ME_7!i?Y+#Bd8A z9Licvof3v2;6N8tWlfp|PTvYn!kQ8d!mMn;e69S$!fF2G2%Y%Vea8JBS5Zb{*)z`|MQ%FdSH!D>QQvvok@g3Ut^Mkrg7Ciom=97>C@ zHX@npYX*3jU~!IqSS6a3IT~YNVW{R~qHpS_g0M8UR5Ld5Mtgz!Y6j%6a7XoUvIho< zFf&3K(}>16B+A{!*ozwMiBiINXwXd5X>d0%S_s_Dz$aAQE<_orOhmi+hrtQK@NlYS zIL2Mo+C#$w9~d5}O7#nZn?DSO-=Kf(wbBs|q&5Wk5sfo6?&_`Gkl+acPH?kUF zH+MTL(5sqPke>%U06bwWFlG^&2o=0agoSOW2hvlSO2AQY!5DvcUlTxUs1*SNjxYwN zOhuRwXpPEK8I6F^dm16arku z#ztA)!-#A}Gzy6D_71nQCIihH>Sz>f&ysW+rlI;8SbI|f!Nfx?+%wP~9~2mD?8RC_ zPa~>2)n6U2X+;aQv@+Gi8W`FKsM%|hNkIrDPYk}!Oow~ffIv1m6hNT!8lTdKDigysw3g>9X5*=<!ju>SVGq|lfsOauV zA%@@qNgApSZh?WpJ|wtCL|8ZrJ_Lh-Rn%1MtwPaiUcm;cZb}w76>n?+iDc;*ObYO} zHr5XXu*WDOh$T4OO@a)t#&~linrv=sqK0-eP!7X}csYcdTX+#XY)q(r7G@zNWFXi+ zk_U}SAy72D+&;|x(NGr>*K&k`L+Z1mc5a8uW zMq_cB{wO7^m8Yt)a!9zPz8luV)}DZM0PXGlti#la`UIBFCLn-L0-%WX!@?l{0jht| z6?oslvTy_0K>T$!Hc>WXG}0#Q+|Q8FqW0*uvlLX|~;4EO&rQz6w>dTL1-N-^ask zow>jEfq|Eo*7QT&O}XOyZ>NKcmJ1>mG=COFwtd_D=iWZCnV-L-3WMK-kH1+j2o~fz z$SKOk4$))d;GIf&Typ8H6#n0rI5tjEQ3#I~`+uJcp?V~0QZ`*|r?wu6x%dBWd65lO z3a^vg|F@$!HdKPnPPI5aFHT-qAw$aTzixS9EB{sF)RKr}PVJZH(g(w{MvPYYEv++g zxJ~3xW@%y0`Te47@sgaNoIl0uM)k3 z)7Lmr?l;pZZE2X_!hD(c4)m8WJPWqx9F%xr67!{no_+&!uez%XJ#n84`2rG?Hoi=i zzG7s!-I}}lN0zTK2c;St-DuyvF@2pFkd52$&#e_;AAg(L)3#CkGgmULy?ajdW&)pJ z`j$4)MYERr_V9G?z=Vk^;vj@h0^UHX?3d6AEGZa+aUlWu8 zn(N^|JG{>pzXjRfRibPxQ@A#0(8;xPA_~AU)6^!Qc4}GZvoVl|

B9kv^A4oG?r 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 Yirj2$SZr#mfdV)%P9Bcc_QZsL0n@wZ4*&oF