\documentclass[../public/实验报告模板]{subfiles} \renewcommand{\mydate}{2023年12月15日} \renewcommand{\mylabname}{传输控制协议(TCP)} \renewcommand{\mychapternum}{6} \begin{document} \mytitle \begin{enumerate} \myitem{实验目的}{ \item 掌握 TCP 协议的报文格式 \item 掌握 TCP 连接的建立和释放过程 \item 掌握 TCP 数据传输中编号与确认的过程 \item 掌握 TCP 协议校验和的计算方法 \item 理解 TCP 重传机制 } \myitem{实验设备或环境}{ \item 采用网络拓扑结构一 } \myitem{实验原理}{ \item TCP协议简介 \item TCP报文格式 \item TCP封装 \item TCP校验和 \item TCP连接建立与释放 \item 流量控制 \item 差错控制 } \myitemx[label=练习\arabic*\ ]{实验步骤}{ \item 察看TCP连接的建立和释放 } \myitemx[label=练习\arabic*\ , itemsep=1em]{实验结果总结}{ \item 察看TCP连接的建立和释放 \begin{table}[H] \centering \caption{实验结果} \begin{tabular}{cccc} \toprule 字段名称 & 报文1 & 报文2 & 报文3 \\ \midrule 序列号 & 23308859 & 4100194079 & 263308860 \\ 确认号 & 0 & 263308860 & 4100194080 \\ ACK & 0 & 1 & 1 \\ SYN & 1 & 1 & 0 \\ \bottomrule \end{tabular} \end{table} TCP 连接建立时,前两个报文的首部都有一个“最大字段长度”字段,它的值是1460,作用是防止报文被分片。根据IEEE 802.3 协议规定的以太网最大帧长度(MTU)为1500字节,而TCP头部一般为20字节,IP头部一般也为20字节,所以这里的最大字段长度为$1500-20-20=1460$。 \begin{table}[H] \centering \caption{实验结果} \begin{tabular}{ccccc} \toprule 字段名称 & 报文4 & 报文5 & 报文6 & 报文7 \\ \midrule 序列号 & 263308860 & 4100194080 & 263308861 & * \\ 确认号 & 4100194080 & 263308861 & 4100194081 & * \\ ACK & 1 & 1 & 1 & * \\ FIN & 1 & 1 & 0 & * \\ \bottomrule \end{tabular} \end{table} 这里只有三个报文是因为报文5把FIN和ACK合并了,而且报文4的ACK也为1,猜测可能也是捎带确认的原因。 \begin{figure}[H] \includegraphics[width=1\linewidth]{imgs/2024-01-02-21-24-05.png} \caption{握手与挥手} \end{figure} 结合步骤 3、5 所填的表,理解 TCP 的三次握手建立连接和四次握手的释放连接过程,理解序号、确认号等字段在 TCP 可靠连接中所起的作用。 三次握手过程为SYN、ACK+SYN,ACK,四次挥手过程为FIN、ACK、FIN、ACK。序号、确认号在TCP可靠连接中用于确保分组正确以及不乱序。 \thinkingquestion{ \item 为什么在 TCP 连接中需要 3 次握手,如不这样做可能会出现什么情况? 假设A与B建立连接,如果只有2次握手,那么B不知道A接收报文的功能是否正常,也就是B的SYN发出去后A不一定收到(可能由于被防火墙拦截了或超时了等原因),但此时B已经认为建立连接了;使用三次握手就可以避免这种情况,让B确认连接能够建立。 \item 解释TCP协议的释放过程? 假设A与B建立连接,A发送FIN数据包,B发送ACK确认;B发送FIN数据包,A发送ACK确认。 } } \end{enumerate} \end{document}