当前位置:文档之家› 传输层协议分析实验报告

传输层协议分析实验报告

2. 传输层协议分析

2.A 数据包捕获分析部分

2.1 实验目的

理解TCP报文首部格式和字段的作用,TCP连接的建立和释放过程,TCP数据传输中编号与确认的作用。

2.2 实验容

应用TCP应用程序传输文件,截取TCP报文,分析TCP报文首部信息,TCP连接的建立过程,TCP数据的编号和确认机制。

2.3 实验原理

TCP协议是传输控制协议的简称,工作在网络层协议之上,是面向连接的,可靠的,端到端的传输层协议。

1) TCP的报文格式

TCP报文段分为头部和数据两部分,如图1:

TCP报文段首部又分为固定部分和选项部分,固定部分为20B,如图2所示,这些字段的组合实现了TCP的所有功能。

图2 TCP报文段的首部

TCP采用传输输连接的方式传送TCP报文,传输连接包括连接建立、数据传输和连

接释放三个阶段。

2) TCP连接的建立

TCP连接建立采用“3次握手”方式。

首先,主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步位SYN应置1,同时选择一个序号X,表明在后面传送数据时的第一个数据字节的序号是X+1,如图3所示:

然后,主机B的TCP收到连接请求报文段后,若同意,则发回确认。在确认报文段中应将SYN和ACK都置1,确认号应为X+1,同时也为自己选择一个序号Y。

最后,主机A的TCP收到B的确认后,要向B发回确认,其ACK置1,确认号为Y+1,而自己的序号为X+1。TCP的标准规定,SYN置1的报文段都要消耗掉一个序号。同时,运行客户进程的主机A的TCP通知上层应用进程,连接已经建立。当主机A向B发送第一个数据报文段时,其序号仍为X+1,因为前一个确认报文段并不消耗序号。

当运行服务器进程的主机B的TCP收到主机A的确认后,也通知其上层应用进程,连接已经建立。

另外,在TCP连接建立的过程中,还利用TCP报文段首部的选项字段进行双方最大报文段长度MSS协商,确定报文段的数据字段的最大长度。双方都将自己能够支持的MSS写入选项字段,比较之后,取较小的值赋给MSS,并应用于数据传送阶段。

3) TCP数据的传送

为了保证TCP传输的可靠性,TCP采用面向字节的方式,将报文段的数据部分进行编号,每个字节对应一个序号。并在连接建立时,双方商定初始序号。在报文段首部中,序号字段和数据部分长度可以确定发送方传送数据的每一个字节的序号,确认号字段则表示接收方希望下次收到的数据的第一个字节的序号,即表示这个序号之前的数据字节均已收到。这样既做到了可靠传输,又做到了全双工通信。

当然,数据传送阶段有许多复杂的问题和情况,如流量控制、拥塞控制、重传机制等,本次实验不探究。

4)TCP 连接的释放

在数据传输结束后,通信的双方都可以发出释放连接的请求。TCP 连接的释放采用“4次握手”。如图

应用进程释放连接

A不再发送报文

放连接确认

B不再发送报文

A

图4 TCP 连接释放的4次握手过程

首先,设图4中主机A 的应用进程先向其TCP 发出释放连接的请求,并且不再发送数据。TCP 通知对方要释放从A 到B 这个方向的连接,将发往主机B 的TCP 报文段首部的中止位置1,其序号X 等于前面已传送过的数据的最后一个字节的序号加1。

主机B 的TCP 收到释放连接通知后即发出确认,其序号为Y ,确认号为X+1,同时通知高层应用进程,如图中的箭头①。这样从A 到B 的连接就被释放了,连接处于半关闭状态,相当于主机A 对主机B 说“我已经没有数据发送了。但是如果你还有数据要发送,我仍然接收。”

此后,主机B 不再接收A 发来的数据。但若主机B 还有一些数据要发给A ,则可以继续发送(这种情况很少)。主机A 只要正确收到数据,仍然向B 发送确认。

若主机B 不再向主机A 发送数据,其应用进程就通知TCP 释放连接,如图中的箭头②。主机B 发出的连接释放报文段必须将中止位FIN 和确认位ACK 置1,并使其序号仍为Y (因为签名发送的确认报文段不消耗序号),但是还必须重复上次已经发送过的ACK =X+1。主机A 必须对此发出确认,将ACK 置1,ACK=Y+1,而自己的序号仍然是X+1,因为根据TCP 标准,前面发送过的FIN 报文段要消耗掉一个序号。这样就把B 到A 的反方向的连接释放掉。主机A 的TCP 再向其应用进程报告,整个连接已经全部释放。

2.4 实验步骤

步骤1 在Wireshark 中设置过滤条件,协议为TCP HTTP ,地址为本机->any ,并开始截获报文;

步骤2 打开www.sina..,完成后,保存截获的报文并命名为“TCP 学号”,分析捕获的报文。 这里,TCP 的连接和建立采用的是: 三次握手 方式,本机是 192.168.3.3 ,远端主机是 192.168.3.183 。

步骤3 分析TCP 连接建立过程的前3个报文,填写下表1:

Sequence Nunber 830 849 835

ACK Number 289 291 237 ACK 1 291 1

SYN 1 1 1

步骤4 分析截获报文中数据发送部分的第一条TCP报文及其确认报文,将报文中的字段值填写在表格2中。

表2 TCP报文首部信息

字段名长度字段值字段意义

发送报文确认报文

源端口16 发送

目标端口16 确认端口号是唯一标识序号32

确认好32 确认

头部长度 4

保留 6 保留字段

窗口16

校验和16

紧急指针16

选项(长度可变)

步骤5 TCP连接建立时,其报文首部与其它TCP报文不同,有一个option字段,它的作用

是什么?结合IEEE802.3协议规定的以太网最大帧长分析此数据是怎么得出来的?

步骤6分析TCP数据传送阶段的前8个报文,将报文信息填入表3:

表3 TCP数据传送部分的前8个报文

报文

序号

报文种类序号字段确认号

字段

数据长度被确认报文序号窗口3744 确认289 1 324 289 123 3754 发送 1 0 66 16580 3764 确认 1 1 344 291 123 3784 发送 1 0 66 16579 3794 确认237 1 290 237 123 3804 发送 1 0 66 16593 3814 确认289 0 290 290 16768 3824 确认290 1 290 290 16768

2.5 实验总结

在实验中,通过分析截获的TCP报文首部信息,可以看到首部中的序号、确认号等字段

是TCP可靠连接的基础。

分析TCP头部信息,分析“3次握手”过程。通过对数据传送阶段报文的初步分析,了

解数据的编码和确认机制。

总之,TCP协议中的各项设置都是为了在数据传输时提供可靠的面向连接的服务。

2.B 编程构造UDP数据包部分

使用C语言构造UDP数据包程序。

1) UDP首部和伪首部结构体定义

/* UDP 首部*/

struct udphdr{

unsigned short u_src;

unsigned short u_dst;

unsigned short u_len;

unsigned short u_cksum;

char u_data[U_MAXLEN];

};

//UDP中校验使用的伪首部

struct pseudo_header

{int srcIp;

short udp_len;

char rsv;

char protocol;

unsigned short src_port;

unsigned short dsc_port;

相关主题