计算机网络-TCP协议分析
TCP协议分析
实验目的:
•了解TCP报文段的结构;
•掌握TCP数据流追踪的方法;
•理解TCP三次握手的基本过程;
•理解TCP连接终止的基本过程;
•认识TCP重置;
•理解TCP可靠数据传输的基本原理。
实验环境说明:
Windows、wireshark
实验过程、步骤(可另附页、使用网络拓扑图等辅助说明)及结果:
1、学习TCP报文结构
TCP报文有首部和数据部分组成,首部的大小为20~60字节,长度可变,而数据部分是可选的,即TCP报文中可以不包括数据。
下面分析每个字段的作用:
(1)源端口号(source port): 该端口号为16位,并且与源IP地址一起标识发送该TCP报文段的通信进程。
(2)目的端口号(destination port): 该端口号为16位,与目的IP地址一起标识接受该TCP报文段的通信进程。
(3)序号(sequence number): 占4个字节,标示TCP报文段中第一个数据字节的序号。
(4)确认号(acknowledgement number): 占4个字节,标示希望收到对方下一个报文段的字节序号。
(5)偏移量(offset): 告诉你数据从哪里开始(有一个偏移量)
(6)保留号(reserved): 长度为6位,必须为0,为将来定义新用途保留的
(7)紧急(Urgent bit): 标示该报文较为紧急,需要紧急发送
(8)确认(Ack bit): 一般发送的第一个报文该号为0,为1时标示确认号字段有效
(9)推送(Push bit): 标示该报文的传输优先级高,需要尽快推送给应用程序
(10)复位(Reset bit): 标示需要释放TCP连接并且重新建立连接(为1时)
(11)同步(SYN bit): 标示TCP请求连接(为1时)
(12)终止(FIN bit): 标示数据终止发送,要求释放连接TCP连接(为1时)
(13)窗口(window): 这是为了滑动窗口(sliding window)设置的,为了告诉另一端发送端的接受缓冲空间(receive buffer space)有多大
(14)校验和(checksum): 16位,由发送端计算和存储,到接受端后,由接受端进行验证。
(15)紧急指针(urgent pointer): 告诉你需要紧急发送的数据在哪一个部分(segment)
(16)选项(options): 包含最长报文大小、窗口扩大选项等。
(17)填充(padding): 必须为0,保证报头的结合和数据的开始处偏移量能够被32整除
接下来选取一个TCP数据包进行分析。
该报文为一个普通的数据传输TCP报文,源端口Src Port: https (443),目的端口 Dst Port: 50069 , 序列号Seq: 47850(相对),使用wireshark显示原始序列号,为38249967226,确认号 Ack: 1195(相对),原始确认号为330730167, 报文长度Len: 1440,标记号中仅Acknowledgement设置为1,表示确认号字段有效。滑动窗口Window size为31360,校验和为0x2c23,紧急指针字段为00。
2、分析TCP三次握手。
①访问hdu.edu.cn并使用wireshark抓包,选中hdu的ip过滤显示tcp包。
②选中TCP三次握手中的第一个数据包,即SYN数据包。
分析该数据包,发现该数据包不含数据,SYN为1,MSS为1460,是以太网帧最大取值1500减去TCP首部和IP报头部40个字节后的取值。
②选中TCP三次握手的第二个数据包。
服务端向客户端发送一个SYN包并附带一个表示确认已经收到了SYN包的ACK(acknowledge)包,在wireshark中就会提示 [SYN, ACK]状态。观察报文,发现ACK与SYN位均为1,该报文同样不包含任何数据。由于IPv6中的IP头的大小是40bytes,所以本段MSS为1440。
③抓取TCP三次握手的第三个数据包。
客户端会向server端发送一个ACK包,这个时候客户端和服务端就建立起了TCP连接。三个数据包交换完成后,双方就可以开始进行通信及数据传输。
3、分析TCP四次挥手。
①使用tcp.flags.fin==1筛选挥手过程。
服务器发送了一个FIN标志置位的报文段表示希望结束服务器端到客户端的数据传输,客户端给出ACK确认包并加1。然后客户端也发送一个FIN标志置位的报文段表示希望结束客户端到服务器端的数据传输,服务器端给出ACK确认包并加1。TCP四次挥手结束,断开连接。
4、分析TCP重置。
①理想情况下TCP正常关闭,但当遇到特殊情况断掉后,会使用RST标志置位的数据包指出连接异常。使用tcp.flags.reset==1筛选该类型包。
可以看出,RST除了RST、ACK标志置位以外没有其他信息。
5、TCP可靠数据传输的基本原理
TCP为了提供可靠传输:
(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。
(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议,拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。
(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。
网络拥塞是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。当网络发生拥塞时,一般会出现数据丢失,时延增加,吞吐量下降,严重时甚至会导致“拥塞崩溃”(congestion collapse)。拥塞控制就是对发送方拥塞窗口cwnd的调整,TCP常用的拥塞控制有: 1. 慢开始、拥塞控制 2. 快重传、快恢复。