资源描述
2、 传输层协议分析
2、A 数据包捕获分析部分
2、1 实验目得
理解TCP报文首部格式与字段得作用,TCP连接得建立与释放过程,TCP数据传输中编号与确认得作用。
2、2 实验内容
应用TCP应用程序传输文件,截取TCP报文,分析TCP报文首部信息,TCP连接得建立过程,TCP数据得编号与确认机制。
2、3 实验原理
TCP协议就是传输控制协议得简称,工作在网络层协议之上,就是面向连接得,可靠得,端到端得传输层协议。
1) TCP得报文格式
TCP报文段分为头部与数据两部分,如图1:
图1 TCP报文段得总体结构
TCP首部
TCP数据部分
TCP报文段首部又分为固定部分与选项部分,固定部分为20B,如图2所示,这些字段得组合实现了TCP得所有功能。
图2 TCP报文段得首部
0 15 31
源端口
目得端口
序号
确认号
头部
长度(4bit)
保留
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
窗口
校验与
紧急指针
选项(长度可变)
填充
TCP采用传输输连接得方式传送TCP报文,传输连接包括连接建立、数据传输与连接释放三个阶段。
2) TCP连接得建立
TCP连接建立采用“3次握手"方式。
首先,主机A得TCP向主机B得TCP发出连接请求报文段,其首部中得同步位SYN应置1,同时选择一个序号X,表明在后面传送数据时得第一个数据字节得序号就是X+1,如图3所示:
被动打开
主动打开
确认
连接请求
图3 TCP连接建立得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次握手”。如图
图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 ,地址为本机-〉any,并开始截获报文;
步骤2 打开、,完成后,保存截获得报文并命名为“TCP学号”,分析捕获得报文。
这里,TCP得连接与建立采用得就是: 三次握手 方式,本机就是 192、168、3、3 ,远端主机就是 192、168、3、183 .
步骤3 分析TCP连接建立过程得前3个报文,填写下表1:
表1 TCP建立过程得三个报文信息
字段名称
第一条报文
第二条报文
第三条报文
报文序号
1704
1716
1718
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
8
3824
确认
29
68
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;
unsigned short len;
unsigned short check_sum;
char data[2];
};
2)构建UDP报文数据
int build_udp_Package(struct socket_pair * sp,const unsigned char *buf,int len,unsigned char *udpPacket[],int *udpPacketLen){
*udpplen=sizeof(struct udp_hdr)+len;
struct udp_hdr*uh=(struct udp_hdr*)udppkt;
unsigned char*dbuf=(udppkt+sizeof(struct udp_hdr));
memcpy(dbuf,buf,len);
Uh—>source=htons(s_port);
Uh—〉dest=htons(d_port);
Uh-〉len=htons(sizeof(struct udp_hdr0)+len);
Uh->check=0;
Un—>check=udpcksum(d_ip,d_port,s_ip,udppkt,sizeof(struct udp_hdr)+len);
return udppkt;
}
展开阅读全文