2-26 night, wondershaper and VMWare player option

merge-requests/7/head
Jeff Chen 4 years ago
parent 419f743a36
commit 7bf83ad84e

@ -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通信 &

@ -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{实验步骤}

@ -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重置为1ssthresh减半。
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>
\itemPC1上打开一个终端键入\texttt{sudo wireshark}启动抓包软件;
再打开一个新终端,键入 curl <PC2的IP>
停止抓包在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 <PC2的IP>}扫描服务器,并抓包。
\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 批量网络扫描是危害网络行为,仅在实验室环境下进行试验学习,
不得用于运营网络。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Loading…
Cancel
Save