|
|
|
@ -24,7 +24,7 @@ TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、
|
|
|
|
|
(例如,尝试连接未存活的主机或未监听端口或客户端发送了第一个SYN连接请求而服务端无响应);
|
|
|
|
|
观察SYN洪泛影响;观察分析TCP通信过程中的各类异常报文(例如数据超时、乱序),
|
|
|
|
|
了解其触发机制与含义。
|
|
|
|
|
\item 流量控制(进阶):运行一组TCP连接客户端/服务器程序(Python代码见附录),
|
|
|
|
|
\item 流量控制(进阶):运行一组TCP连接客户端/服务器程序(Python代码见节后附件),
|
|
|
|
|
制造收发不平衡场景,观察收发报文中通告窗口的变化,分析与窗口机制相关的类型报文,
|
|
|
|
|
了解滑动窗口工作原理。
|
|
|
|
|
\item 拥塞控制(进阶):改变带宽、时延、丢包率等网络参数,观察大文件传输过程,
|
|
|
|
@ -41,10 +41,10 @@ TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、
|
|
|
|
|
TCP协议基于“尽力而为”的网络层为应用层提供可靠的进程间通信服务,
|
|
|
|
|
具体地说是可靠的全双工的端对端字节流传输服务。
|
|
|
|
|
在TCP的协议传输单元中(TCP报文段,TCP Segment),
|
|
|
|
|
发送方和接收方使用字节序号(Sequence Number)明确收发的数据,并精确到字节单位;
|
|
|
|
|
收发双方以字节为单位使用序列号(Sequence Number)明确收发的数据,
|
|
|
|
|
使用ACK反馈(Acknowledgment)机制,实现端对端的可靠传输控制。
|
|
|
|
|
接下来,简要介绍TCP报文段的结构,
|
|
|
|
|
TCP的连接管理、差错控制、流量控制和拥塞控制的原理。
|
|
|
|
|
TCP的连接管理、流量控制和拥塞控制等原理。
|
|
|
|
|
|
|
|
|
|
\paragraph{TCP报文段(Segment)}~{}
|
|
|
|
|
\\
|
|
|
|
@ -63,16 +63,16 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item \textbf{源端口号(Source Port):}16位的源端口,
|
|
|
|
|
与源IP地址一起标识发送该TCP 报文段的通信进程。端口号范围0\~65535。
|
|
|
|
|
与源IP地址一起标识发送该TCP 报文段的通信进程。端口号范围0-65535。
|
|
|
|
|
\item \textbf{目的端口号(Destionation Port):}16位目的端口,
|
|
|
|
|
与目的IP地址一起标识接收该TCP 报文段的通信进程。端口号范围0\~65535。
|
|
|
|
|
\item \textbf{序号(Sequence Number):}该TCP 报文段中第一个数据字节的序号,占4个字节。在TCP连接建立时,通常生成一个随机数作为字节序列号的初始值(ISN)。
|
|
|
|
|
与目的IP地址一起标识接收该TCP 报文段的通信进程。端口号范围0-65535。
|
|
|
|
|
\item \textbf{序号(Sequence Number):}该TCP 报文段中第一个数据字节的序号,占4个字节。在TCP连接建立时,通常生成一个随机数作为字节序列号的初始值(ISN)。
|
|
|
|
|
\item \textbf{确认号(Acknowledgement Number):}
|
|
|
|
|
表示期望收到对方下一个报文段的字节序号,占4个字节。
|
|
|
|
|
\item \textbf{标志位(TCP Flags):}
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item 确认ACK (Acknowledgement):置1表示确认号字段有效。
|
|
|
|
|
\item 推送PSH (Push):置1表示该报文段优先级高,
|
|
|
|
|
\item 确认ACK(Acknowledgement):置1表示确认号字段有效。
|
|
|
|
|
\item 推送PSH(Push):置1表示该报文段优先级高,
|
|
|
|
|
接收方 TCP 应该尽快推送给接收应用程序。
|
|
|
|
|
\item 复位RST(Reset):置1表示需要释放 TCP 连接并重新建立连接。
|
|
|
|
|
一般称携带 RST 标志的 TCP 报文段为「复位报文段」。
|
|
|
|
@ -103,7 +103,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
|
|
|
|
|
\textbf{建立过程:}TCP是面向连接的,数据传输之前必须在双方之间建立一条连接,
|
|
|
|
|
并通过三次握手过程完成。
|
|
|
|
|
其主要目的是,同步连接双方的序列号和确认号,并交换 TCP窗口大小等控制信息。
|
|
|
|
|
其主要目的是,同步连接双方的序列号和确认号,并交换TCP窗口大小等控制信息。
|
|
|
|
|
一般地,客户端主动向服务器端发起连接请求,具体过程如下:
|
|
|
|
|
|
|
|
|
|
\begin{enumerate}
|
|
|
|
@ -128,7 +128,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
服务器端完成数据发送之后,也发出FIN=1的报文请求释放连接,
|
|
|
|
|
并进入 LAST-ACK状态,直至客户端返回确认(第四次挥手)才关闭TCP连接。
|
|
|
|
|
客户端收到服务器的FIN报文后,则进入TIME\_WAIT状态,
|
|
|
|
|
并等待 2MSL(最大存活时间- Maximum Segment Lifetime)时间之后,完全关闭TCP连接。
|
|
|
|
|
并等待2MSL(最大存活时间- Maximum Segment Lifetime)时间之后,完全关闭TCP连接。
|
|
|
|
|
(注:释放连接也可由服务器端先发起)
|
|
|
|
|
|
|
|
|
|
\paragraph{TCP流量控制}~{}
|
|
|
|
@ -138,7 +138,7 @@ TCP 报文段结构如图\ref{fig:c:wireshark_TCP-structure}所示,
|
|
|
|
|
TCP利用滑动窗口(Sliding Window)机制实施流量控制,
|
|
|
|
|
其基本原理是用TCP报文段中的窗口大小字段来控制数据发送速率,
|
|
|
|
|
即发送方的发送窗口应小于接收方回应报文中的通告窗口值。
|
|
|
|
|
为了提高信道利用率,TCP采用了连续ARQ (Automatic Repeat reQuest),
|
|
|
|
|
为了提高信道利用率,TCP采用了连续ARQ(Automatic Repeat reQuest),
|
|
|
|
|
TCP两端都可以连续发出若干个分组然后等待确认,
|
|
|
|
|
也都设有发送/接收窗口和发送/接收缓存。
|
|
|
|
|
其中发送窗口可以用3个指针表示,
|
|
|
|
@ -200,8 +200,8 @@ BBR\footnote{\href{https://queue.acm.org/detail.cfm?id=3022184}{BBR: Congestion-
|
|
|
|
|
\subsubsection{实验方法和手段}
|
|
|
|
|
|
|
|
|
|
使用VMWare软件配置两台本地虚拟机,本地相互连接(如图\ref{fig:c:wireshark_TCP-topo})。
|
|
|
|
|
在VMWare中的虚拟机设置->网络适配器->高级中虚拟机的网卡传入/传出带宽、
|
|
|
|
|
传输速率、时延等,用来仿真不同的网络条件(如图\ref{fig:c:wireshark_VM-advance-setup})。
|
|
|
|
|
通过“虚拟机设置->硬件->网络适配器->高级”(如图\ref{fig:c:wireshark_VM-advance-setup})
|
|
|
|
|
设置虚拟机的网卡传入/传出带宽、数据包丢失率、延迟等,仿真不同的网络条件。
|
|
|
|
|
本实验需要使用的命令和工具,如表\ref{tab:c:wireshark_tools-command}所列。
|
|
|
|
|
常用的Linux操作系统命令还包括:echo、cat、sysctl、ping、ftp。
|
|
|
|
|
|
|
|
|
|