|
|
|
@ -8,7 +8,7 @@
|
|
|
|
|
|
|
|
|
|
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、
|
|
|
|
|
可靠的、基于字节流的传输层通信协议。
|
|
|
|
|
本实验通过运用Wireshark对网络活动进行抓包分析,
|
|
|
|
|
本实验通过运用Wireshark对网络活动进行分析,
|
|
|
|
|
观察TCP协议报文,分析通信时序,理解TCP的工作过程,
|
|
|
|
|
掌握TCP工作原理与实现;
|
|
|
|
|
学会运用Wireshark分析TCP连接管理、流量控制和拥塞控制的过程,发现TCP的性能问题。
|
|
|
|
@ -21,10 +21,10 @@ TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、
|
|
|
|
|
\item 连接管理:观察正常TCP连接中的三次握手与四次挥手报文,
|
|
|
|
|
绘制出时序图,并标出双方TCP状态变化。
|
|
|
|
|
\item 异常情况分析:观察分析TCP连接建立过程的异常
|
|
|
|
|
(例如,尝试连接未存活的主机或未监听端口或客户端发送了第一个SYN连接请求而服务端无响应);
|
|
|
|
|
(例如,尝试连接未存活的主机或未监听端口,客户端发送了第一个SYN连接请求而服务端无响应);
|
|
|
|
|
观察SYN洪泛影响;观察分析TCP通信过程中的各类异常报文(例如数据超时、乱序),
|
|
|
|
|
了解其触发机制与含义。
|
|
|
|
|
\item 流量控制(进阶):运行一组TCP连接客户端/服务器程序(Python代码见节后附件),
|
|
|
|
|
\item 流量控制(进阶):运行一组TCP连接客户端/服务器程序,
|
|
|
|
|
制造收发不平衡场景,观察收发报文中通告窗口的变化,分析与窗口机制相关的类型报文,
|
|
|
|
|
了解滑动窗口工作原理。
|
|
|
|
|
\item 拥塞控制(进阶):改变带宽、时延、丢包率等网络参数,观察大文件传输过程,
|
|
|
|
@ -48,7 +48,7 @@ TCP协议基于“尽力而为”的网络层为应用层提供可靠的进程
|
|
|
|
|
\\
|
|
|
|
|
|
|
|
|
|
TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
采用20字节的报文段头并有最长40字节的可选项。
|
|
|
|
|
采用20字节的报文段头以及不超过40字节的可选项。
|
|
|
|
|
|
|
|
|
|
\small
|
|
|
|
|
\begin{figure}[!ht]
|
|
|
|
@ -111,7 +111,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
然后,客户端进入SYN\_SEND状态,等待服务器的确认;
|
|
|
|
|
\item 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,
|
|
|
|
|
需要对这个SYN报文段进行确认,设置确认号为x+1;
|
|
|
|
|
同时,将SYN位置为1,系列号为y。
|
|
|
|
|
同时,将SYN位置为1,序号为y。
|
|
|
|
|
服务器端将上述信息放入SYN+ACK报文段中,
|
|
|
|
|
一起发送给客户端,此时服务器进入SYN\_RECV状态;
|
|
|
|
|
\item 第三次握手:客户端收到服务器的SYN+ACK报文段之后,
|
|
|
|
@ -200,9 +200,12 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
|
|
|
|
|
两台实验机本地相互连接(如图\ref{fig:c:wireshark_TCP-topo}),
|
|
|
|
|
在实验机中仿真不同的网络条件,以便观察TCP的各种控制现象。
|
|
|
|
|
方案一使用虚拟机:VMware Player中通过“虚拟机设置->硬件->网络适配器->高级”(如图\ref{fig:c:wireshark_VM-advance-setup})
|
|
|
|
|
设置虚拟机的网卡传入/传出带宽、数据包丢失率、延迟等;
|
|
|
|
|
方案二使用物理机:使用tc进行流量控制场景仿真,使用wondershaper对网卡进行限速。
|
|
|
|
|
方案一使用VMware Player运行两台虚拟机,并
|
|
|
|
|
通过“虚拟机设置->硬件->网络适配器->高级”
|
|
|
|
|
(如图\ref{fig:c:wireshark_VM-advance-setup})
|
|
|
|
|
设置虚拟机的网卡传入/传出带宽、数据包丢失率、延迟等。
|
|
|
|
|
方案二直接在两台PC机上操作,
|
|
|
|
|
使用tc进行流量控制场景仿真,使用wondershaper对网卡进行限速。
|
|
|
|
|
本实验需要使用的命令和工具,如表\ref{tab:c:wireshark_tools-command}所列。
|
|
|
|
|
常用的Linux命令还包括:echo、cat、sysctl、ping、ftp等。
|
|
|
|
|
|
|
|
|
@ -287,7 +290,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
使用Wireshark内置的绘制流功能,选择菜单栏中的Statistics$\rightarrow$Flow Graph,
|
|
|
|
|
Flow Type选择TCP flows可以直观地显示TCP序号和确认号是如何工作的。
|
|
|
|
|
\item 观察TCP三次握手与四次挥手报文,注意报文收发过程中,双方TCP状态的变化。
|
|
|
|
|
以本次抓得报文为据,分别画出本次TCP连接三次握手与四次挥手的时序图,
|
|
|
|
|
以本次捕获的报文为依据,分别画出本次TCP连接三次握手与四次挥手的时序图,
|
|
|
|
|
结合TCP状态机,在双方各阶段标出对应的TCP状态。选择其中一个TCP报文,
|
|
|
|
|
配合Wireshark截图,分析该报文TCP首部各字段的定义、值及其含义。
|
|
|
|
|
\end{enumerate}
|
|
|
|
@ -321,7 +324,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
|
|
|
|
|
\texttt{sudo iptables -I INPUT -s 192.168.100.144 -p tcp -m tcp --tcp-flags ALL SYN, ACK -j DROP}
|
|
|
|
|
\item 再次尝试连接并启动wireshark抓包,并在双方多次用ss -tan观察TCP状态。
|
|
|
|
|
\item 观察TCP的状态变化,分析wireshark抓到的TCP异常报文。
|
|
|
|
|
\item 观察TCP的状态变化,分析wireshark捕获的TCP异常报文。
|
|
|
|
|
\item 服务端的SYN-RECV 状态何时释放?
|
|
|
|
|
\item SYN ACK重传了几次,时间间隔有何变化?
|
|
|
|
|
\item 参考1中的操作,在服务端修改SYN ACK重传次数(tcp\_synack\_retries),
|
|
|
|
@ -333,8 +336,8 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
指定所能接受SYN同步包的最大客户端数量为6;
|
|
|
|
|
在客户端运用netwox工具对服务器监听的端口产生大量SYN连接请求
|
|
|
|
|
(如\texttt{sudo netwox 76 -i 192.168.100.144 -p 23}),
|
|
|
|
|
再使用正常的连接工具(如telnet)连接,观察现象(特别是服务器端的TCP连接状态),
|
|
|
|
|
抓包总结分析,解释SYN泛洪攻击原理与对策。
|
|
|
|
|
再使用正常的连接工具(如telnet)尝试连接,观察交互情况(特别是服务器端的TCP连接状态),
|
|
|
|
|
抓包分析,解释SYN洪泛攻击原理与对策。
|
|
|
|
|
\item 异常报文分析。在服务器端产生一个100M的大文件,
|
|
|
|
|
利用1中的web服务器,在客户端上用wget下载它。
|
|
|
|
|
参考命令:
|
|
|
|
@ -351,8 +354,8 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
|
|
|
|
|
抓包记录以上过程,分析黑色标签错误报文,结合TCP实现机制,
|
|
|
|
|
分析这些报文产生的原因。此类报文也可以从现实网络行为抓取获得,
|
|
|
|
|
请结合实际抓得报文分析,报文附件随报告提交。
|
|
|
|
|
分析这些报文产生的原因。此类报文也可以从现实网络行为捕获,
|
|
|
|
|
请结合捕获的报文进行分析,报文附件随报告提交。
|
|
|
|
|
包括但不限于以下几种类型报文:
|
|
|
|
|
[Duplicate ACK]、[TCP Retransmission]、[Fast Retransmission]、
|
|
|
|
|
[TCP Spurious Retransmission]、[TCP Out-Of-Order]、
|
|
|
|
@ -368,10 +371,10 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
在客户端快速发送数据给服务端,而服务端则有意缓慢地接收数据,
|
|
|
|
|
观察TCP如何用窗口大小值进行流量控制。虚拟机两端分别运行
|
|
|
|
|
\texttt{python3 server.py}和\texttt{python3 client.py}。
|
|
|
|
|
\item 抓取两端通信报文数据,分析报文中的Win值变化,联系上下报文,
|
|
|
|
|
\item 捕捉两端通信报文数据,分析报文中的Win值变化,联系上下报文,
|
|
|
|
|
解释为什么出现[TCP Windows Full]、[TCP ZeroWindows]、[TCP Keep-Alive]
|
|
|
|
|
等和窗口大小相关的流量控制报文。
|
|
|
|
|
抓取的原始报文存成附件随实验报告提交。
|
|
|
|
|
捕获的原始报文存成附件随实验报告提交。
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
|
|
|
|
|
\subsubsection{拥塞控制}
|
|
|
|
@ -380,7 +383,7 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
在VMWare Player中的虚拟机设置$\rightarrow$网络适配器$\rightarrow$高级中设置;
|
|
|
|
|
物理机可使用wondershaper命令进行限速。
|
|
|
|
|
再启动应用(可以是http wget,也可以ftp下载/上传)传输大文件观察。
|
|
|
|
|
\item Wireshark抓取全部传输过程数据,找出该网络活动的拥塞点,
|
|
|
|
|
\item Wireshark捕捉全部传输过程数据,找出该网络活动的拥塞点,
|
|
|
|
|
并结合Analyze$\rightarrow$Expert Information、Statistic$\rightarrow$IO Graphs、
|
|
|
|
|
Statistic$\rightarrow$TCP Stream Graphs(如图\ref{fig:c:wireshark_io-graphs}),
|
|
|
|
|
分析此传输过程中的慢启动、拥塞避免、快速恢复等阶段。
|
|
|
|
@ -423,11 +426,11 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
\item 本次实验观察了Linux环境下的TCP实现,在Windows、macOS环境下,
|
|
|
|
|
操作系统又是如何实现TCP的呢?
|
|
|
|
|
类似Linux TCP参数,在不同系统环境下如何查看或设置,
|
|
|
|
|
请尝试通过抓包其通信过程发现其实现异同。
|
|
|
|
|
请尝试通过捕捉其通信过程、比较其实现异同。
|
|
|
|
|
\item 在TCP状态机(图\ref{fig:c:wireshark_TCP-status-machine})中,
|
|
|
|
|
有些状态停留时间较长,易观察到,有些状态很短暂不易观察到。
|
|
|
|
|
试列出不易观察到的状态,并考虑观察到它们的可能方法。
|
|
|
|
|
\item TCP是封装单元为MSS,可是我们在抓包过程中常发现远大于此值的TCP包,
|
|
|
|
|
\item TCP是封装单元为MSS,可是我们在捕捉过程中常发现远大于此值的TCP报文,
|
|
|
|
|
为什么TCP可以提交如此大的报文呢?
|
|
|
|
|
此类型的包远超出链路层的MTU,它是如何被处理的呢?请从两端同时抓包观察比对。
|
|
|
|
|
|
|
|
|
@ -471,9 +474,9 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
\item (20分) 完成流量控制操作要求,结合上下分析报文窗口变化,
|
|
|
|
|
解释说明相关的类型报文成因。
|
|
|
|
|
\item (20分) 完成拥塞控制操作要求,
|
|
|
|
|
成功从抓得数据分析出了一次完整TCP流的各阶段(慢启动、拥塞控制、快速恢复)。
|
|
|
|
|
成功从捕获的数据分析出一次完整TCP流的各个阶段(慢启动、拥塞控制、快速恢复)。
|
|
|
|
|
\item (10分)完成任2道思考题。
|
|
|
|
|
\item (10分)记录自己在本次实验中所遇到的问题,以及心得感悟实验总结。
|
|
|
|
|
\item (10分)记录自己在本次实验中所遇到的问题,以及心得感悟。如果遇到异常情况,或者无法完成任务时,也请分析错误产生的原因。
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
|
|
|
|
|
\subsection{附件}
|
|
|
|
|