\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}