传输层协议分析实验报告

上传人:金手指1****983 文档编号:185454931 上传时间:2021-07-08 格式:DOCX 页数:9 大小:20.57KB
返回 下载 相关 举报
传输层协议分析实验报告_第1页
第1页 / 共9页
传输层协议分析实验报告_第2页
第2页 / 共9页
传输层协议分析实验报告_第3页
第3页 / 共9页
传输层协议分析实验报告_第4页
第4页 / 共9页
传输层协议分析实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《传输层协议分析实验报告》由会员分享,可在线阅读,更多相关《传输层协议分析实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、传输层协议分析实验报告 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

2、 数据部分 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 发出连接请求报

3、文段,其首部中的同步位 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 通知上层应用进

4、程,连接已经建立。当主机 A 向 B 发送第一个数据报文段时,其序号仍为 X+1,因为前一个确认报文段并不消耗序号。 当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。 另外,在 TCP 连接建立的过程中,还利用 TCP 报文段首部的选项字段进行双方最大报文段长度 MSS 协商,确定报文段的数据字段的最大长度。双方都将自己能够支持的 MSS 写入选项字段,比较之后,取较小的值赋给 MSS,并应用于数据传送阶段。 3) TCP 数据的传送 为了保证TCP传输的可靠性,TCP采用面向字节的方式,将报文段的数据部分进行编号,每个字节对应一个序号。并在

5、连接建立时,双方商定初始序号。在报文段首部中,序号字段和数据部分长度可以确定发送方传送数据的每一个字节的序号,确认号字段则表示接收方希望下次收到的数据的第一个字节的序号,即表示这个序号之前的数据字节均已收到。这样既做到了可靠传输,又做到了全双工通信。 当然,数据传送阶段有许多复杂的问题和情况,如流量控制、拥塞控制、重传机制等,本次实验不探究。 被动打开 主动打开 确认 确认 连接请求 4)TCP 连接的释放 在数据传输结束后,通信的双方都可以发出释放连接的请求。TCP 连接的释放采用“4次握手”。如图 应 用 进 程 释放连接通知主机应用进程A不再发送报文确认 应用进程释放连接确认B不再发送报

6、文FIN,SEQ-XACK,SEQ=Y,ACK=X+1FIN,ACK,SEQ=Y,ACK=X+1ACK,SEQ=X+1,ACK=Y+1AB 图 4 TCP 连接释放的 4 次握手过程 首先,设图 4 中主机 A 的应用进程先向其 TCP 发出释放连接的请求,并且不再发送数据。TCP 通知对方要释放从 A 到 B 这个方向的连接,将发往主机 B 的 TCP 报文段首部的中止位置 1,其序号 X 等于前面已传送过的数据的最后一个字节的序号加 1。 主机 B 的 TCP 收到释放连接通知后即发出确认,其序号为 Y,确认号为 X+1,同时通知高层应用进程,如图中的箭头。这样从 A 到 B 的连接就被释

7、放了,连接处于半关闭状态,相当于主机 A 对主机 B 说“我已经没有数据发送了。但是如果你还有数据要发送,我仍然接收。” 此后,主机 B 不再接收 A 发来的数据。但若主机 B 还有一些数据要发给 A,则可以继续发送(这种情况很少)。主机 A 只要正确收到数据,仍然向 B 发送确认。 若主机 B 不再向主机 A 发送数据,其应用进程就通知 TCP 释放连接,如图中的箭头。主机 B 发出的连接释放报文段必须将中止位 FIN 和确认位 ACK 置 1,并使其序号仍为 Y(因为签名发送的确认报文段不消耗序号),但是还必须重复上次已经发送过的 ACKX+1。主机A 必须对此发出确认,将 ACK 置 1

8、,ACK=Y+1,而自己的序号仍然是 X+1,因为根据 TCP 标准,前面发送过的 FIN 报文段要消耗掉一个序号。这样就把 B 到 A 的反方向的连接释放掉。主机A 的 TCP 再向其应用进程报告,整个连接已经全部释放。 2.4 实验步骤 骤 步骤 1 在 Wireshark 中设置过滤条件,协议为 TCP HTTP,地址为本机any,并开始截获报文; 步骤 2 打开 .,完成后,保存截获的报文并命名为“TCP 学号”, ,分析捕获的报文。 这里,TCP 的连接和建立采用的是: 三次握手 方式,本机是 192.168.3.3 ,远端主机是 192.168.3.183 。 步骤 3 分析 TC

9、P 连接建立过程的前 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 确认好

10、 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

11、 确认 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 协议中的各项设置都是为了在数据传输时提供可靠的面向连接的服

12、务。 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_dataU_MAXLEN; /UDP 中校验使用的伪首部 struct pseudo_header int srcIp; short udp_len; char rsv; char protocol; unsigned sh

13、ort src_port; ; unsigned short dsc_port; unsigned short len; unsigned short check_sum; char data2; ; 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;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号