TCP 协议分析|青训营笔记

350 阅读9分钟

实验4 TCP协议分析|青训营笔记

1、实验目的


  • 了解运输层TCP协议基本概念、报文结构
  • 分析TCP报文头部
  • 分析TCP连接建立过程、TCP连接释放
  • 掌握利用tcpdump和wireshark进行tcp协议分析技术。

2、实验环境


  • 硬件要求:阿里云云主机ECS 一台。
  • 软件要求:Linux/ Windows 操作系统

3、实验内容


TCP是面向连接的、在不可靠的互联网络上提供可靠的端到端通信。它是TCP/IP协议集的核心协议。

TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

利用wget下载新疆大学主页www.xju.edu.cn,与此同时使用tcpdump抓包。使用wireshark分析TCP数据报文头部,分析建立连接三次握手和分析释放连接的四次挥手。

4、实验结果与分析


4.1 抓取TCP数据包并分析

  1. 利用wget下载新疆大学主页www.xju.edu.cn,记录下新疆大学主页的ip地址111.115.76.75,与此同时使用tcpdump抓包。

    tcpdump -i eth0 -w test.pcap
    wget www.xju.edu.cn
    
  2. 在本地主机终端使用scp命令将数据报下载到本地,使用wireshark打开分析TCP数据报文头部,并在wireshark中过滤出云主机与新疆大学主页之间的网络交流。

    scp root@139.196.154.208:./test.pcap /Users/libingyao/Downloads/
    tcp and ip.addr == 111.115.76.75
    

4.2 填写表格

根据捕获的数据包,分析TCP的报文结构,将TCP协议中个字段名,字段长度,字段值,字段含义填入下表:

字段名字段长度字段值字段含义
Source Port2字节80源端口
Destination Port2字节42444目的端口
Sequence Number4字节1369序号
Acknowledgment Number4字节113确认号
Header Length32bytes(8)首部长度
Flags6位0x010(ACK)控制位
URG1位0紧急比特
ACK1位1确认比特
PSH1位0推送比特
RST1位0复位比特
SYN1位0同步比特
FIN1位0终止比特
Window2字节227窗口
Checksum2字节0x9bc7(unverified)检验和
Urgent Pointer2字节0紧急指针
Options长度可变,最长40字节12bytes,NOP,NOP,Timestamps选项
Timestamps10字节(图中可见)时间戳
TCP payload1368bytes有效载荷
TCP segment data1368bytes数据段长度

4.3 分析建立连接三次握手

通过分析实验结果,TCP报文结构由哪几部分组成,其功能是什么?

TCP报文结构由源端口、目的端口、序号、确认号、控制位(紧急URG,确认ACK,推送PSH,复位RST,同步SYN,终止FIN)、窗口、检验和、紧急指针、选项、时间戳、数据段长度组成。

源端口:一般是客户端程序请求时,由系统自动指定,端口号范围是 0 ~ 65535,0~ 1023为 知名端口号。

目的端口:一般是服务器的端口,一般是由编写程序的程序员自己指定,这样客户端才能根据ip地址和 port 成功访问服务器。

序号:TCP连接中传送的字节流中的每一个字节都按顺序编号。

确认号:期望收到对方下一个报文段的第一个数据字节的序号。

紧急URG:URG=1时,表示紧急指针字段有效,将紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。与紧急指针字段配合使用。

确认ACK:仅当ACK=1时确认号字段才有效,当ACK=0,确认号无效。

推送PSH:PSH=1的报文段,接收方收到以后就尽快地交付接受应用进程。

复位RST:RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。

同步SYN:在连接建立时用来同步序号,当SYN=1而ACK=0,表明这是一个连接请求报文段,当SYN=1且ACK=1,表明这是一个连接接受报文段。

终止FIN:当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放连接。

窗口:发送本报文段的一方的接受窗口值,窗口值作为接收方让发送方设置其发送窗口的依据。

检验和: 用于检查数据在传输中是否出错,是否出现bit反转的问题。

紧急指针:指出本报文段中的紧急数据的字节数。

选项:补充。

时间戳:用来计算往返时间RTT和防止序号绕回PAWS。

数据段长度:TCP报文段中数据段的长度。

分析三次握手的标志位和序号。

  1. 抓取三次握手的数据报:

  2. 第一次握手,发送连接请求报文段,此时首部的标志位为0x002(SYN),表示同步位SYN=1,并选择一个初始序号Seq=0。

  3. 第二次握手,发送确认连接报文段,此时首部的标志位为0x012(SYN,ACK),表示同步位SYN=1,确认位ACK=1,并确认号为1,并选择一个初始序号Seq=0。

  4. 第三次握手,客户端向服务端发送确认报文段,主要是为了防止已失效的连接请求报文段突然又传送到了服务端,产生错误。此时首部的标志位为0x010(ACK),表示确认位ACK=1,序号Seq=1,序号Seq = 0+1 = 1。

分析TCP数据报窗口,序号。

  1. 选取连续的三个TCP数据报进行详细的观察:

  2. 第一个TCP数据报是由新大官网端向云主机发送的,窗口值为227,序号为1,确认号为113。。

  3. 第二个TCP数据报是由云主机向新大官网发送的,窗口值为250,序号为上一个数据报的确认号113,表示序号在113号之前的数据报都被确认接受了。

  4. 第三个TCP数据报是由新大官网向云主机发送的,窗口值为227,序号为上一个数据报的确认号1369,表示序号在1369号之前的数据报都被确认接受了。

  5. 我们发现由于云主机是向新大官网执行wget指令下载新大官网网页后,并不进行其他任何操作,只向新大官网发送确认报文段,所以新大官网向云主机的TCP数据报中确认号不变,而序号会每次都增加。而窗口值是在动态变化的。

4.4 分析释放连接的四次挥手

分析四次挥手的报文标志和序号

  1. 抓取四次挥手的TCP数据报。

  2. 第一次挥手,云主机应用程序向新大官网发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,此时报文标志0x011,控制位FIN=1,ACK=1确认之前收到的数据报,此时序号为u = 113。

  3. 接收到连接释放报文段后,由于新大官网向云主机传输的数据已经传输完了,节约资源与提高效率,第二次挥手和第三次挥手报文段合并了一个报文段,此时也发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,此时报文标志0x011,控制位FIN=1,ACK=1且ack=u+1=114表示同意云主机断开与新大官网方向的连接,此时序号为w=104447。

  4. 第四次挥手,云主机收到新大官网发送的连接释放报文段后,必须对此发出确认,在确认报文段中把ACK=1,序号=u+1=114。

5、实验小结(包括遇到的特定问题和解决方法、心得体会、意见与建议等)


5.1 问题与解决方法:

问题:

  1. 对wget指令不熟悉。
  2. 对TCP协议中各字段不熟悉。
  3. 对TCP三次握手的过程不够清晰明白。
  4. 对TCP数据报的窗口不知道怎么分析。
  5. 分析TCP数据报的序号时,发现新大官网向云主机发送的TCP数据报中确认号不改变。
  6. 在对TCP释放连接的四次挥手的分析中,发现wireshark中只有三次。

解决方法:

  1. 上网查询相关wget指令的资料并学习。
  2. 翻阅书籍重温知识。
  3. 翻看书本查看相关知识及其流程并学习掌握,通过上课学习得更加透彻。
  4. 翻看书本查看相关知识,并加深学习有关TCP数据报窗口的知识点。
  5. 查看wireshark上的实验结果,并结合所学知识,是由于云主机对新大官网进行wget操作后,只发送确认报文段。
  6. 根据自己的所学知识,认为有可能是由于服务端没有数据再对客户端进行传输所以减少了一次挥手,具体还得上网搜索资料并加深学习。发现是服务端对客户端没有进行数据传输,所以第二次挥手和第三次挥手进行合并。

5.2 心得体会:

  1. 通过这些指令的学习和实践,有助于我们理解计算机网络的有关内容。
  2. 通过这次内容我学会了通过wget指令在命令行界面下载文件。
  3. 通过这次内容我学会了通过scp指令从阿里云主机上传输文件到本地。
  4. 通过这次内容我学会了在阿里云主机上通过tcpdump指令抓取数据包,在本地主机上使用wireshark分析数据包。
  5. 通过这次内容我对TCP报文段的首部固定部分的各字段进行了深刻的了解。
  6. 通过这次内容我对TCP建立连接时的三次握手加深了理解并掌握。
  7. 通过这次内容我对TCP数据报的传输加深了理解并掌握。
  8. 通过这次内容我对TCP释放连接时的四次挥手加深了理解并掌握。
  9. 通过这次内容学习,我学习到TCP规定SYN报文段和FIN报文段都会消耗掉一个序号,且不能携带数据。