TCP和UDP数据包发送程序的设计与实现

TCP和UDP数据包发送程序的设计与实现
TCP和UDP数据包发送程序的设计与实现

摘要:在TCP/IP协议族中,传输层主要包括TCP和UDP两种通信协议,它们以不同的方式实现两台主机中的不同程序间之间的数据传输,即数据的端到端传输。TCP提供一种面向连接的、可靠的数据传输服务,保证了端到端数据传输的可靠性;而UDP提供一种无连接的、不可靠的数据传输方式,但保证了数据传输的实时性。本课程设计用C#语言分别编写了基于TCP的C/S聊天程序和基于UDP 的C/S聊天程序。经测试,本文程序基本实现了聊天功能,即实现了TCP和UDP数据包发送程序的设计。

关键词:TCP、UDP、C#、C/S聊天程序、数据包发送程序

Design and Realization of the Sending Program of TCP and UDP Packets Student:Zhou Ruijie Instructor:WangJing

Abstract:In the TCP / IP protocol clan, the transport layer mainly includes two communication protocols TCP and UDP, which had achieved the data transmission among different programs between two hosts in different ways, namely the end-to-end data transmission. TCP provides a connection-oriented, reliable data transmission service, ensuring the reliability of the end-to-end data transmission; While UDP provides a connectionless, unreliable way of data transmission, but guaranteeing the data transmission in real-time. This course design has separately written TCP-based C/S chat program and UDP-based C/S chat program in C#. By test, this paper program has basically achieved chat function, namely realized the design of the sending program of TCP and UDP packets.

Keywords:TCP、UDP、C#、C/S chat program、sending program of packets

目录

1引言 (1)

1.1课程设计的目的 (1)

1.2本设计任务和主要内容 (1)

2开发工具及相关技术 (2)

2.1 C#简介 (2)

2.2 TCP和UDP概述 (2)

2.3 C/S模式 (4)

3 基于TCP的C/S聊天程序的详细设计 (6)

3.1 TCP设计思路 (6)

3.2 客户端编程步骤 (8)

3.3 服务器端编程步骤 (9)

4 基于UDP的C/S聊天程序的详细设计 (11)

4.1 UDP设计思路 (11)

4.2 客户端编程步骤 (12)

4.3 服务器端编程步骤 (13)

5 结果分析 (14)

5.1 TCP聊天程序运行结果 (14)

5.2 UDP聊天程序运行结果 (17)

5.3 结果分析 (17)

6 结束语 (18)

7 参考文献 (19)

附录1:TCP源程序清单 (20)

附录2:UDP源程序清单 (33)

1引言

自进入信息化社会以来,人们的生活发生了翻天覆地的变化,所有这一切的实现都要归功于计算机网络。自从计算机网络出现以来,网络发展越来越迅速,其重要性更是不可估量。现在,网络已经进入到我们生活的各个角落,大到网上理财、网上会议、网上战争,小到上网购物、查找资料,网上聊天等,可以说网络把我们的世界变“小”了,即使在天涯海角,我们也可以随时联系。一个最简单且应用最广泛的例子——网上聊天,就是最好的证明。本课程设计将基于TCP 和UDP协议,使用C#语言分别实现一个C/S聊天程序。

1.1课程设计的目的

本次课程设计是用C#分别编写基于TCP和UDP协议的C/S聊天程序,所以其基本任务就是要实现客户端和服务器端的通信,即客户端和服务器对端能够互相发送数据和接收数据。其中TCP是面向连接的协议,所以在客户端和服务器端在通信之前必须先由服务器端监听,客户端发送连接请求,成功建立连接后才能进行通信,这个机制保证了数据传输的可靠性。实现了这个过程,就达到了本次课程设计TCP和UDP数据包发送程序的设计和实现的目的。

1.2本设计任务和主要内容

(1)掌握TCP和UDP的概念和工作原理;

(2)熟练掌握C#语言的编程原理;

(3)实现基于TCP协议的聊天程序设计;

(4)实现基于UDP协议的聊天程序设计;

(5)运行程序,并合理分析实验结果。

2开发工具及相关技术

2.1 C#简介

C#(C Sharp)是微软(Microsoft)为.NET Framework量身订做的程序语言,C#拥有C/C++的强大功能以及Visual Basic简易使用的特性,是第一个组件导向(Component-oriented)的程序语言,和C++与Java一样亦为对象导向(object-oriented)程序语言。C#具有以下特点:

(1)语法简洁。

(2)面向对象设计。

(3)与Web紧密结合。

(4)完整的安全性和错误处理。

(5)版本控制。

(6)兼容性。

(7)灵活性。

2.2 TCP和UDP概述

在TCP/IP协议族中,传输层主要包括TCP和UDP两种通信协议,它们以不同的方式实现两台主机中的不同应用程序之间的数据传输,即数据的端到端传输。由于它们的实现方式不同,因此各有一套属于自己的端口号,且相互独立。可以采用如下五元组来描述两个应用进程之间的通信关联。(协议,信源机IP地址,信源应用进程端口,信宿机IP地址,信宿应用进程端口)即端到端之间的一条通信连接就可以表示为上述五元组,这也是进行网络程序设计最基本的概念。

其中,传输控制协议(Transmission Control Protocol,TCP)提供一种面向连接的、可靠的数据传输服务,保证了端到端数据传输的可靠性。也正因为这样,使TCP协议成为传输层最常用的协议,同时也是一个比较复杂的协议,其提供了传输层几乎所有的功能。因此和IP协议一样,成为了TCP/IP协议族中最重要

的协议之一。其主要特点如下:

(1)向应用进程提供面向连接的服务,两个需要通过TCP协议进行数据传输的应用进程之间首先必须建立一个TCP连接,并且在数据传输完成后要释放连接。一般将请求连接的应用进程称为客户进程,而响应连接请求的应用进程称为服务器进程,即TCP连接的建立采用的是一种客户机/服务器工作模型。

(2)提供全双工数据传输服务,只要建立了TCP连接,就能在两个应用进程间进行双向的数据传输服务,但是这种传输只是端到端的传输,不支持广播和多播。(3)提供面向字节流的服务,即TCP协议的数据传输是面向字节流的,两个建立了TCP连接的应用进程之间交换的是字节流。发送进程以字节流形式发送数据,接收进程也把数据作为字节流来接收。端到端之间不保留数据记录的边界,也就是说,在传输的层面上不存在数据记录的概念。

用户数据报协议(User Datagram Protocol,UDP)是传输层的两个主要协议之一,相对TCP协议来说,UDP是一种非常简单的协议,在网络层的基础上实现了应用进程之间端到端的通信。与TCP协议不同,UDP协议是一种无连接的协议,数据在传输之前通信双方不需要建立连接。信宿在收到UDP数据报之后也不需要给出任何应答报文。发送方发出的每一个UDP用户数据报都是独立的,都携带了完整的目的地址。每个数据报都可以被网络系统独立路由。因此从同一个信源发往同一个信宿的多个UDP报文可能选择不同的路径达到信宿,它们达到的先后顺序也可能不同于发送顺序。所以,UDP协议提供的是一种无连接的、不可靠的数据传输方式,在数据传输过程中没有流量控制和确认机制,数据报可能会丢失、延迟、乱序到达信宿。UDP协议只是提供了利用校验和检查数据完整性的简单差错控制,属于一种尽力而为的数据传输方式。

虽然UDP用户数据报提供不可靠的传输方式,但它具有其自身的一些特点:(1)UDP是一个无连接协议,传输数据之前信源和信宿不需要建立连接,因此不存在连接建立的时延。在信源端,UDP传送数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在信宿端,UDP把每个数据报放在队列中,应用程序每次从队列中读一个数据报。

(2)由于传输数据不需要建立连接,也就不需要维护连接状态,包括收发状态等,这样一台服务机可同时向多个客户机传输相同的数据,例如实现多播。

(3)UDP数据报的首部很短,只有8字节,相对于TCP的20字节首部的开销要小很多。

(4)吞吐量不受流量控制算法的调节,只受应用软件生成数据的速率、传输带宽、信源和信宿主机性能的限制。

由于UDP具有这些特点,有许多应用更适合使用UDP协议,如:

(1)只需要简单数据交换的应用,例如DNS服务,它不需要复杂的可靠性保证机制,这样,利用UDP来传输数据既可以节省系统开销又提高了网络的传输效率。

(2)不需要关心数据的差错控制和流量控制的应用。

(3)实时性要求较高但可承受一定的数据错误的应用,例如实时语音传输、实时视频通信等。

(4)实现一对多数据发送的应用,例如广播和组播。

2.3 C/S模式

在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网,Client/Server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。

它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

C/S工作过程如下:

服务器端描述:S端启动服务进程,并监听相应端口。然后,若收到C端发出的有关请求,按如下情况给出相应的反映:将收到的包进行检测,若收到的包有错则抛弃(discard),并发给C端一个negtive ACK。若收到的包正常,则将此

包进行解包,将内容输出至一临时文件;并发给C端一个positive ACK。依次收到来自C端的包,直到收到end为止,并关闭此进程,转回监听状态。

客户端描述为:若收到的为Positive ACK,则继续发包;若收到的为Negtive ACK,则将应发的包重发。直到C端将所有要发的包都发完,并都已经收到S端的回应,最后发一个End包,直接关闭此进程。

综上所述,应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止。

3 基于TCP的C/S聊天程序的详细设计

3.1 TCP设计思路

为了简化编程,.NET提供面向TCP编程的相关类,主要包括TcpClient和TcpListener。

TcpClient类为TCP网络服务提供客户端连接,它构建于Socket类之上,以提供较高级别的TCP服务,即提供了通过网络连接、发送和接收数据的简单方法。用于在同步阻止模式下通过网络来连接、发送和接收流数据。另外,通过与NetworkStream对象的关联,使得用户可以通过流操作方式实现对网络连接状态下数据的发送和接收。通过TcpClient类实现与TCP主机的通信流程如下图所示:

图3-1 TcpClient类通信流程图

TcpClient类实现了客户端编程抽象,因此构建客户端网络应用程序便可以直接使用TcpClient取代Socket,更加方便易用。同样,对于服务器端应用程序的构建,C#提供了TcpListener类。该类也是构建于Socket之上,提供了更高抽象级别的TCP服务,使得程序员能更方便地编写服务器端应用程序。

通常情况下,服务器端应用程序在启动时将首先绑定本地网络接口的IP地址和端口号,然后进入侦听客户请求的状态,以便于客户端应用程序提出显式请求。一旦侦听到有客户端应用程序请求连接侦听端口,服务器端应用将接受请求,并建立一个负责与客户端应用程序通信的信道,即通过创建连接套接字与客户端应用程序建立连接,由连接套接字完成与客户端应用程序的数据传送操作,服务器端应用程序继续侦听更多的客户端连接请求。TcpListener通过实例创建过程完成与本地网络接口的绑定,并由所创建的实例调用Start方法启动侦听;当侦听到客户端应用程序的连接请求后,根据客户端应用程序的不同请求方式,可以通过AcceptTcpClient方法接受传入的连接请求并创建TcpClient实例以处理请求,或者通过AcceptSocket方法接受传入的连接请求并创建Socket实例以处理请求,并由所创建的TcpClient实例或Socket实例完成与客户端应用程序的网络数据传输。最后,需要使用Stop关闭用于侦听传入连接的Socket,同时也必须关闭从AcceptSocket或AcceptTcpClient返回的任何实例,以释放相关资源。其实现流程如下图所示:

图3-2 TcpListener 类通信流程图

3.2 客户端编程步骤

(1)新建一个客户端窗口程序:FormClient

(2)对窗口程序进行界面设计,由于功能比较简单,并没有做做到尽善尽美,只是做到简单的通信与显示信息,主要用到了三个主要空间:LlistBoxStatus,TextBox,Button,其中,LlistBoxStatus用来显示与服务器端的连接状态,两个TextBox分别表示接收的信息和准备发送的信息,两个Button分别用来表示连接和发送。将各控件的名字改为有实际意义,容易标记的名字。

(3)核心代码编写

进入编写代码模式,在开头中添加所要用到的命名空间如:

using https://www.360docs.net/doc/1a1164893.html,; //提供一个统一、简单的编程接口

using https://www.360docs.net/doc/1a1164893.html,.Sockets;//提供Windows套接字接口的托管实现

using System.Threading;//提供类和接口支持线程程序设计所需实现功能

如下代码描述了TcpClient实例的创建以及与指定远程主机的连接过程。

client = new TcpClient(AddressFamily.InterNetwork);//创建实例

client.BeginConnect(serverIP[0], 51888, requestCallback, client); listBoxStatus.Invoke(setListBoxCallback, string.Format("本机EndPoint:{0}",client.Client.LocalEndPoint));

listBoxStatus.Invoke(setListBoxCallback, "开始与服务器建立连接");

与远程主机连接成功后,利用NetworkStream实例发送和接收数据。该方法首先通过client.GetStream来返回NetWorkStream实例,进而利用所获取的NetworkStream实例的读写方法Write和Read来发送和接收数据,其实现代码如下所示:

try

{

//获取连接成功后得到的状态参数

client = (TcpClient)ar.AsyncState;

//异步接受传入的连接尝试,使BeginConnect正常结束

client.EndConnect(ar);

listBoxStatus.Invoke(setListBoxCallback,

string.Format("与服务器{0}连接成功",

client.Client.RemoteEndPoint));

//获取接收和发送数据的网络流

networkStream = client.GetStream();

//接收服务器发送的数据,BeginRead完成后,会自动调用ReadCallback

TCP数据包格式

TCP数据包格式(zz) 修改浏览权限| 删除TCP提供一种面向连接的、全双工的、可靠的字节流服务。 在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。 TCP的接收端必须丢弃重复的数据。 TCP对字节流的内容不作任何解释。对字节流的解释由TCP连接双方的应用层解释。TCP通过下列方式来提供可靠性: 应用数据被分割成TCP认为最适合发送的数据块,称为报文段或段。 TCP协议中采用自适应的超时及重传策略。 TCP可以对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 TCP的接收端必须丢弃重复的数据。 TCP还能提供流量控制。 TCP报文段格式

源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。 序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。 保留字段——占6bit,保留为今后使用,但目前应置为0。

紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 复位比特RST(Reset) ——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。 终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。 检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP 报文段的前面加上12字节的伪首部。 紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。 选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。 填充字段——这是为了使整个首部长度是4字节的整数倍。 TCP首部的主要选项: 最大报文段长度MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”窗口扩大因子,用于长肥管道。 时间戳,可用于测量往返时延RTT。 TCP的数据编号与确认 TCP协议是面向字节的。TCP将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。 在连接建立时,双方要商定初始序号。TCP每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。 TCP的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。为提高效率,TCP可以累积确认,即在接收多个报文段后,一次确认。 一、TCP的流量控制 TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。 TCP报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。 发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。

TCP数据包的发送和接收设计报告

湖北工业大学 课程设计报告 设计题目:TCP数据包的发送和接收专业:计算机科学与技术 班级:10计科2班 学号:11 姓名:吕红杰 指导老师:涂军

一.设计题目 发送和接收TCP数据包 二.设计要求 1.正确理解题意; 2.具有良好的编程规范和适当的注释; 3.有详细的文档,文档中应包括设计题目涉及的基础知识、设计思路、程序流程图、程序清单、开发中遇到的问题及解决方法、设计中待解决的问题及改进方向。 三.需求分析 TCP是一种面向连接的、可靠的传输层协议。TCP协议工作在网络层IP协议的基础上。本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个TCP数据包,发送给目的主机,并在目的主机接收此TCP数据包,将数据字段显示显示在标准输出上。 四.具体设计 1.创建一个原始套接字,并设置IP头选项 SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPE D); 这里,设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。 为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,

设置IP头操作选项。其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。 setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)); int timeout=1000; setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout)); 在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。 2.构造IP头和TCP头 这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。typedef struct _iphdr 算校验和的子函数 在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下: USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size ) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16);

利用Ethereal分析TCP数据包

利用Ethereal分析TCP数据包一.分析过程: 1.图1 TCP协议图 图2 TCP协议的内容 图3 TCP协议的数据包 2.数据分析 1) 分析:546代表的是Frame的序号,54 bytes代表的是54字节的数据包的长度

2) 分析:其中代表的是MAC地址 字节: 6 6 2 以太网的MAC帧格式 目的地址:00 e0 5c 15 f1 cd(十六进制) 源地址:00 1f d0 b8 da 78(十六进制) 类型:一般类型字段的值是0x0800是,就是宝石上层使用的是IP数据报。如果类型字段分值是0x8137则宝石该帧是由Novell IPX发过来的。

3)分析: 版本:使用的是IP协议版本号为4(即IPv4) 首部长度:20个字节的长度 服务类型(新版本称区分服务):00,这个字段只有在使用区分服务时,才起作用。在一般的情况下都不使用这个字段的。 总长度:40字节,总长度指的是首部和数据之和的长度 标识:d0 34(十六进制)IP软件在存储器中维持一个计时器,每产生一个数据报,计时器就加1,并将此值赋给标志字段。 标志:001(二进制),目前标志只有两位有意义: 标志最低位记为MF(More Fragment)。MF=1表示后面“还有分片”的数据报, MF=0表示这已是若干数据报片中的最后一个。 标志中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0 是才允许分片。 片偏移:0,0000,0000,0000(二进制) 生存时间:80(十进制128s)生存时间表明的是数据报在网络中的寿命,一般以秒作为其单元。 协议:协议字段指出次此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分交给那个处理过程。 首部检验和:5167(二进制:0101,0001,0110,0111)这个字段值检验数据报的首部,但不包括数据部分。 源IP地址:192.168.1.3 目的IP地址:219.133.60.3 4)

发送TCP数据包

四川理工学院 课程设计书 学院计算机学院 专业计算机科学与技术 班级09级04班 题目发送TCP数据包 教师王非,何绍荣,陈超 学生赵清勇,谭凯,唐红琴

实验分工: 程序设计、编写代码由全小组成员共同完成 谭凯:在vc下调试运行程序、文档编写 赵清勇:在dos下运行检查、初步完成课程设计报告唐红琴:查找资料、整理课程设计报告

目录 一课程设计准备 (4) 1.1课程设计目的 (4) 1.2课程设计的要求 (4) 1.3相关知识 (5) 1.4工作环境 (7) 二课程设计分析 (7) 2.1使用原始套接字 (7) 2.2定义IP头部、TCP头部和伪头部的数据结构 (8) 2.3计算校验和的子函数 (10) 2.4程序流程图 (11) 三源代码 (12) 四运行结果与运行情况 (18) 五自我评析和总结 (19) 六参考文献 (20)

发送TCP数据包 一课程设计准备 1.1课程设计目的 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP协议的工作原理有更深入的认识。 1.2课程设计的要求 本程序的功能是填充一个TCP数据包,并发送给目的主机。1)以命令行形式运行:SendTCP sourse_ip sourse_port dest_ip dest_port 其中,SendTCP为程序名;sourse_ip为源端IP地址;sourse_port 为源埠;dest_ip为目的IP地址;dest_port为目的埠。 2)其它的TCP头部参数请自行设定。 3)数据字段为“This is my homework of network,I am happy!”。4)发送成功后在屏幕上输出”send OK”。

TCP数据包格式

TCP数据包格式 TCP协议也是建立在IP协议之上的,不过TCP协议是可靠的.按照顺序发送的.TCP的数据结构比前面的结构都要复杂. 每行32位=4字节。 Source Port (16) | Destination Port (16) Sequence Number (32) Acknowledgment Number (32) Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16) Checksum (16) | Urgent Pointer (16) Options (0 or more 32 bit words + padding) DATA TCP各字段的含义 Source Port & Destination Port 如果我们将IP比喻成地址那麽Port可以说是门口了试想一下一座大楼有前门後门侧门送货的门出货的门倒垃圾的门扔死尸的门等等乱七八糟的门...... 那麽一个IP地址也有着好多个各种功能的port而每一个port都被不同的服务倾听着就好比看门人一样。 下面是一些常用port和其对应的服务有兴趣的朋友可以在Linux的/etc/services这个档案找到它们 ftp-data 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail www 80/tcp http # WorldWideWeb HTTP www 80/udp # HyperText Transfer Protocol pop-3 110/tcp # POP version 3 pop-3 110/udp

TCP数据包的封装与发送

TCP数据包的封装与发送 一、实验目的 1.掌握TCP的工作特点; 2.熟悉TCP数据包的结构; 3.深刻理解网络体系结构中传输层与上下层之间的关系; 二、实验环境 1.PC机一台 2.Windows 操作系统 三、实验准备 1.复习TCP协议的相关内容; 2.熟练掌握TCP数据包中各自段的作用; 四、实验内容(二选一) 1.编写程序构造TCP包结构,并填写各字段,将封装后的TCP包的内容在屏幕上输出并写入指定的文件中; 2.TCP包的数据字段内容额长度自定; 五、实验报告要求 1.报告内容要有主程序的流程图和程序代码; 2.报告内容要有运行结果的截图; 3.对实验过程进行分析,对存在的问题分析。 实验相关代码 #include #include #include #include #include #pragma comment(lib,"ws2_32.lib") //数据结构及宏定义: #define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值 #define DEST_PORT 5050 //目的端口号

#define SOUR_PORT 8080 //源端口号 typedef struct ip_hdr //定义IP首部 { UCHAR h_verlen; //4位首部长度,4位IP版本号UCHAR tos; //8位服务类型TOS USHORT total_len; //16位总长度(字节) USHORT ident; //16位标识 USHORT frag_and_flags; //3位标志位 UCHAR ttl; //8位生存时间TTL UCHAR proto; //8位协议(TCP, UDP 或其他) USHORT checksum; //16位IP首部校验和 ULONG sourceIP; //32位源IP地址 ULONG destIP; //32位目的IP地址 }IP_HEADER; typedef struct tsd_hdr //定义TCP伪首部 { ULONG saddr; //源地址 ULONG daddr; //目的地址 UCHAR mbz; //没用 UCHAR ptcl; //协议类型 USHORT tcpl; //TCP长度 }PSD_HEADER; typedef struct tcp_hdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 ULONG th_seq; //32位序列号 ULONG th_ack; //32位确认号 UCHAR th_lenres; //4位首部长度/6位保留字 UCHAR th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER; using namespace std; //主要函数: //CheckSum:计算校验和的子函数 USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT);

网络课程设计-tcp数据包的发送和接收

目录 一、软件概要简介 (6) 二、概要设计 (6) 1 6 2类图 (6) 3.数据结构的定义 (6) 4.程序截图 (7) 三、详细设计 (8) 1关键性代码 (8) 1.1内存映射文件读 (9) 1.2内存映射文件写 (9) 1.3文件的发送 (9) 1.4文件的接收 (9) 1.4.1客户端接收套接字 (9) 1.4.2 客户端把接收到的文件写人自己的文件..10 四、调试分析及测试结果 (15)

一、软件概要简介 我们做的是基于tcp数据包发送和接收的文件传输,采用的是客户/服务器模式,首先客户端连接到服务器,然后服务器端就可以选择需要传输的文件,开始传输。 二、概要设计1 1.1内存映射文件 我们首先是用内存映射文件的方法把文件一块一块的从磁盘映射到内存,每映射一块,就传输一块,直到把整个文件都传输完毕为止。内存映射文件内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理。所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。下面给出使用内存映射文件的一般方法: 首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样,在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过资源的释放。这部分相对比较简单,可以通过UnmapViewOfFile()完成从进程的地址空间撤消文件数据的映像、通过CloseHandle()关闭前面创建的文件映射对象和文件对象。 1.2基于socket的tcp数据包的接收和发送 Tcp的Socket编程的步骤基本就是这样:首先客户端请求连接服务器,服务器接受连接,服务器记住客户端的ip地址之后就可以进行通信了。

发送TCP数据包设计说明书

发送TCP数据包设 计说明书 一课程设计准备 1.1课程设计目的 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据传输流。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与IP协议的关系,使学生对TCP 协议的工作原理有更深入的认识。 1.2课程设计的要求 本程序的功能是填充一个TCP数据包,并发送给目的主机。 1)以命令行形式运行:SendTCP sourse_ip sourse_port dest_ip dest_port 其中,SendTCP为程序名;sourse_ip为源端IP地址;sourse_port为源埠;dest_ip为目的IP地址;dest_port为目的埠。 2)其它的TCP头部参数请自行设定。 3)数据字段为“This is my homework of network,I am happy!”。 4)发送成功后在屏幕上输出”send OK”。

1.3相关知识 编制本程序前要对TCP协议有一定的了解。当应用程序有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。下图显示的是TCP数据包和IP包的关系。 TCP协议的传输单元为报文段,其格式如图所示。报文段报头的长度为20B~60B。其中固定长度为20B,报文段长度最多为40B。TCP报文段主要包括以下字段。 ·埠号:埠号字段包括源埠号和目的埠号。每个埠号的长度是16位,分别表示发送该TCP包的应用进程的埠号和接收该TCP包的应用进程的埠号。·序号:长度为32位。由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。 ·确认号:该字段的长度为32位,它表示接收端希望接收的下一个TCP 包的第一个字节的序号。

tcp抓包分析

TCP抓包分析 一TCP格式 源端口:数据发起者的端口号;? 目的端口:数据接收方的端口号; 32bit序列号:标识当前数据段的唯一性; 32bit的确认号:接收数据方返回给发送方的通知; TCP头部长度为20字节,若TCP头部的Options选项启用,则会增加首部长度,因此TCP是首部变长的传输层协议; Reserved、Reserved、Nonce、CWR、ECN-Echo:共6bit,保留待用。? URG:1bit紧急指针位,取值1代表这个数据是紧急数据需加速传递,取值0代表这是普通数据;? ACK:1bit确认位,取值1代表这是一个确认的TCP包,取值0则不是确认包;PSH:1bit紧急位,取值1代表要求发送方马上发送该分段,而接收方尽快的将报文交给应用层,不做队列处理。取值0阿迪表这是普通数据;? RST:1bit重置位,当TCP收到一个不属于该主机的任何一个连接的数据,则向对方发一个复位包,此时该位取值为1,若取值为0代表这个数据包是传给自己的;? SYN:1bit请求位,取值1代表这是一个TCP三次握手的建立连接的包,取值为0就代表是其他包;?

FIN:1bit完成位,取值1代表这是一个TCP断开连接的包,取值为0就代表是其他包;? Window?Size:16bit窗口大小,表示准备收到的每个TCP数据的大小;? Checksum:16bit的TCP头部校验,计算TCP头部,从而证明数据的有效性;? Urgent?Pointer:16bit紧急数据点,当功能bit中的URG取值为1时有效;? Options:TCP的头部最小20个字节。如果这里有设置其他参数,会导致头部增大;? Padding:当TCP头部小于20字节时会出现,不定长的空白填充字段,填充内容都是0,但是填充长度一定会是32的倍数;? Data:被TCP封装进去的数据,包含应用层协议头部和用户发出的数据。 二数据截图 1.第一个TCP报文: 2.第二个TCP报文: 3.第三个TCP报文: 二分析 上面截图的三个TCP报文段表示了TCP连接时的三次握手阶段。 1.第一个TCP报文 这是要建立连接的客户(我)向服务器发出连接请求段

TCP数据包及连接建立过程分析

字节是什么意思 1. 学习并分析TCP数据包的结构、含义 2.分析TCP连接的建立过程和数据传输过程。 1.Wireshark网络分析软件 2.实验文件“计算机网络-实验文件.cap” ●一个 TCP 数据报由首部和数据两部分组成。 ●首部的前一部分是固定长度,共 20 字节,是所有TCP数据报必须具有的。 ●在首部的固定部分的后面是一些可选字段,其长度是可变的。 ● A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1,并选择序号 x (为了防止TCP syn 攻击,分组选择的是经过较复杂运算后得到的初始化序号,当然其相对序号应该视作是1),表明传送数据时的第一个数据字节的序号是 x。 ● B 的 TCP 收到连接请求报文段后,如同意,则发回确认。 ● B 在确认报文段中应将 SYN 置为 1,其确认号应为 x 1,同时也为自己选择序号 y(为了防止TCP syn 攻击,分组选择的是经过较复杂运算后得到的初始化序号,当然其相对序号应该视作是1)。 ● A 收到此报文段后,向 B 给出确认,其确认号应为 y 1。 ● A 的 TCP 通知上层应用进程,连接已经建立。 4.1 TCP数据包的结构和含义分析 打开文件“计算机网络-实验文件.cap”,这是一个包括204个分组的网络通信记录,详细记录了分组的序号、相对时间、源地址、目标地址、协议类型、内容,如图1是对第29个分组的详细信息。 图1 第29个分组的TCP数据包的解析 观察文件内第29个分组的TCP数据包详细信息,见图1。 ●它的前16位是1668,表示源端口是1668,是客户端的一般端口,(本机是客户端) ●它的目的端口是0050(H)=8080,表明是访问服务器端的HTTP应用。 ●当前发送的数据首字节是0(相对值),表示为首发字节。它携带的数据包长度是0字节,64(IP包全长,见IP包头的长度字段值)-20(IP首部长度)-44(TCP首部长度)=0

TCPIP中数据包的传输

路由信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。RIP 是一种内部网关协议。在国家性网络中如当前的因特网,拥有很多用于整个网络的路由选择协议。作为形成网络的每一个自治系统,都有属于自己的路由选择技术,不同的 AS 系统,路由选择技术也不同。 TCP/IP协议叫做传输控制/网际协议,它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。 虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。 TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。TCP/IP协议数据的传输基于TCP/IP协议的四层结构:应用层、传输层、网络层、接口层,数据在传输时每通过一层就要在数据上加个包头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层要把用过的包头去掉,这样来保证传输数据的格式完全一致。 TCP/IP协议介绍 TCP/IP的通讯协议 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP 协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

tcp协议包头

竭诚为您提供优质文档/双击可除 tcp协议包头 篇一:tcp包头格式 tcp包头格式 tcp数据被封装在一个ip数据包中: |—————————————————ip数据包———————————————| |————————tcp报文段——————————| tcp包头数据格式。如果不计可选项字段,它通常是20个字节。 源端口和目的端口: 每个tcp段都包含源端和目的端的端口号,用于寻找发起端和拉收端应用进程。这两个值加 上ip首部中的源ip地址和目的ip地址唯一确定一个tcp连接。有时,一个ip地址和一个端口 号也称为一个套接字(socket)。这个术语出现在最早的tcp规范(RFc793)中。套接字对 (socketpair)(包含客户ip地址、客户端口号、服务器ip地址和服务器端口号的四元组)可

唯一确定互联网络中每个tcp连接的双方。 序列号: 序列号用来标识从tcp发起端向tcp接收端发送的数据字节流,它表示在这个报文段中的 第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则tcp用序列号对每 个字节进行计数。序列号是32bit的无符号数,序号到达232-1后又从0开始。 确认序列号: 当建立一个新的连接时,syn标志变1。序列号字段包含由这个主机选择的该连接的初始 序号isn(initialsequencenumber)。该主机要发送数据的第一个字节序号为这个isn加1,因为syn标志消耗了一个序号(Fin标志也要占用一个序号)。既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1。只有ack标志为1时确认序号字段才有效。 发送ack无需任何代价,因为32bit的确认序号字段和ack标志一样,总是tcp首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ack标志也总是被设置为1。 头部长度:

实验4-TCP数据包及连接建立过程分析

实验4TCP数据包及连接建立过程分析1.实验目的 1. 学习并分析TCP数据包的结构、含义 2.分析TCP连接的建立过程和数据传输过程。 2.实验设备与环境 1.Wireshark网络分析软件 2.实验文件“计算机网络-实验文件.cap” 3.相关知识 3.1 TCP 数据报结构 ●一个TCP 数据报由首部和数据两部分组成。 ●首部的前一部分是固定长度,共20 字节,是所有TCP数据报必须具有的。 ●在首部的固定部分的后面是一些可选字段,其长度是可变的。 3.2 TCP 连接的建立过程

● A 的TCP 向B 发出连接请求报文段,其首部中的同步比特SYN 应置为1,并选择 序号x (为了防止TCP syn 攻击,分组选择的是经过较复杂运算后得到的初始化序号,当然其相对序号应该视作是1),表明传送数据时的第一个数据字节的序号是x。 ● B 的TCP 收到连接请求报文段后,如同意,则发回确认。 ● B 在确认报文段中应将SYN 置为1,其确认号应为x + 1,同时也为自己选择序号 y(为了防止TCP syn 攻击,分组选择的是经过较复杂运算后得到的初始化序号,当然其相对序号应该视作是1)。 ● A 收到此报文段后,向B 给出确认,其确认号应为y + 1。 ● A 的TCP 通知上层应用进程,连接已经建立。 ●当运行服务器进程的主机B 的TCP 收到主机A 的确认后,也通知其上层应用进程, 连接已经建立。 4.实验内容 4.1 TCP数据包的结构和含义分析 打开文件“计算机网络-实验文件.cap”,这是一个包括204个分组的网络通信记录,详细记录了分组的序号、相对时间、源地址、目标地址、协议类型、内容,如图1是对第29个分组的详细信息。 图1 第29个分组的TCP数据包的解析 观察文件内第29个分组的TCP数据包详细信息,见图1。 ●它的前16位是1668,表示源端口是1668,是客户端的一般端口,(本机是客户端)●它的目的端口是0050(H)=8080,表明是访问服务器端的HTTP应用。 ●当前发送的数据首字节是0(相对值),表示为首发字节。它携带的数据包长度是0字 节,64(IP包全长,见IP包头的长度字段值)-20(IP首部长度)-44(TCP首部长度)=0字节,该TCP数据包未携带数据。 ●确认号字段为0,结合后面的ACK = 0,表明未携带确认信息。

计算机网络课程设计TCP数据包

《计算机网络》实验报告题目发送TCP数据包 成绩 学院名称 专业班级 学生姓名 学号 指导教师 二○一五年七月一日

目录 摘要 (3) 关键词 (3) 一、背景概述 (3) 二、设计内容 (4) 三、设计要求 (4) 四、需求分析 (4) 五、总体设计 (4) 程序流程图 (5) 设计思路 (5) 设计环境 (5) 基本功能 (7) 详细设计 (7) 六、总结与体会 (9) 七、参考文献 (10)

摘要 Internet是网络的集合,包括ARPANET、NSFNET、分布在各地的局域网、以及其它类型的网络,如(DDN,Defense Data Network美国国防数据网络),这些统称为Internet。所有这些大大小小的网络互联在一起。(因为大多数网络基本协议是由DDN组织开发的,所以以前有时DDN与Internet在某种意义上具有相同的含义)。网络上的用户可以互相传送信息,除一些有授权限制和安全考虑外。一般的讲,互联网协议文档案是Internet委员会自己采纳的基本标准。TCP/IP标准与其说由委员会指定,倒不如说由\"舆论\"来开发的。任何人都可以提供一个文档,以RFC(Request for Comment需求注释) 方式公布。 TCP/IP的标准在一系列称为RFC的文档中公布。文档由技术专家、特别工作组、或RFC编辑修订。公布一个文档时,该文档被赋予一个RFC量,如RFC959说明FTP、RFC793说明TCP、RFC791说明IP等。最初的RFC一直保留而从来不会被更新,如果修改了该文档,则该文档又以一个新号码公布。因此,重要的是要确认你拥有了关于某个专题的最新RFC文档。文后会列出主要的RFC文档号。 本课主要致力于发送TCP数据包。 关键词TCP 一、背景概述 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

TCP数据包的抓取与分析

计算机网络课程设计报告 课程设计题目:TCP数据包的抓取与分析 专业: 班级: 姓名: 学号: 指导教师: 年月日

目录 1.摘要 (3) 2.引言 (4) 3.目录 (2) 4.TCP数据包抓取 (5) 5.TCP数据包分析 (7) 6.程序设计 (8) 7.出现的错误和解决方法 (12) 8.结束语 (13) 9.参考文献 (14)

1.摘要 本课程设计通过Ethereal捕捉实时网络数据包,并根据网络协议分析流程对数据包在TCP/IP各层协议中进行实际解包分析,让网络研究人员对数据包的认识上升到一个感性的层面,为网络协议分析提供技术手段。最后根据Ethereal的工作原理,用Visual C++编写一个简单的数据包捕获与分析软件。 2.引言 本课程设计通过技术手段捕获数据包并加以分析,追踪数据包在TCP/IP各层的封装过程,对于网络协议的研究具有重要的意义。 Wireshark是当前较为流行的图形用户接口的抓包软件,是一个可以用来监视所有在网络上被传送的包,并分析其内容的程序。它通常被用来检查网络工作情况,或是用来发现网络程序的bugs。通过 Wireshark对TCP、UDP、SMTP、telnet和FTP等常用协议进行分析,非常有助于网络故障修复、分析以及软件和协议开发。,它以开源、免费、操作界面友好等优点广为世界各地网络研究人员使用为网络协议分析搭建了一个良好的研究平台。

3.TCP数据包的抓取1.首先运行Wireshark抓包软件 2.然后选取一个接口进行抓包

3.对TCP 包进行过滤 4.选取其中一个TCP数据包进行查看

TCP抓包分析

TCP抓包分析 一TCP 格式 源端口:数据发起者的端口号;? 目的端口:数据接收方的端口号; 32bit 序列号: 标识当前数据段的唯一性; 32bit 的确认号:接收数据方返回给发送方的通知; TCP头部长度为20字节,若TCP头部的Options选项启用,则会增加首部长度,因此TCP是首部变长的传输层协议; Reserved、Reserved、No nee CWR ECN-Echo 共6bit,保留待用。? URG1bit 紧急指针位,取值1代表这个数据是紧急数据需加速传递,取值0代表这 是普通数据;? ACK 1bit确认位,取值1代表这是一个确认的TCP包,取值0则不是确认包;PSH 1bit 紧急位,取值 1 代表要求发送方马上发送该分段,而接收方尽快的将报文交给应用层,不做队列处理。取值0 阿迪表这是普通数据;? RST 1bit重置位,当TCP收到一个不属于该主机的任何一个连接的数据,则向对方 发一个复位包,此时该位取值为1,若取值为0代表这个数据包是传给自己的;? SYN 1bit请求位,取值1代表这是一个TCP三次握手的建立连接的包,取值为0 就代表是其他包;? FIN : 1bit完成位,取值1代表这是一个TCPI断开连接的包,取值为0就代表是其他包;? Window?Size: 16bit窗口大小,表示准备收到的每个TCP数据的大小;? Checksum 16bit的TCP头部校验,计算TCP头部,从而证明数据的有效性;? Urgent?Pointer : 16bit紧急数据点,当功能bit中的URG取值为1时有效;? Options : TCP的头部最小20个字节。如果这里有设置其他参数,会导致头部增大;? Padding :当TCP头部小于20字节时会出现,不定长的空白填充字段,填充内容都 是0,但是填充长度一定会是32 的倍数;? Data :被TCP封装进去的数据,包含应用层协议头部和用户发出的数据。 二数据截图 1. 第一个TCP M文: 2. 第二个TCP M文: 3. 第三个TCP M文: 二分析 上面截图的三个TCP报文段表示了TCP连接时的三次握手阶段。 1. 第一个TCP报文 这是要建立连接的客户(我)向服务器发出连接请求段 在TRANSMISSION CONTROL PR0TOCO截图中我们可以知道源端口号也就是主机端口号为50590,而目的端口号为HTTP的80端口,确认号为0 (相对的),而首部长度为32字节,在标志位FLAGS( 0x0002)中,只设置了SYN也就是位同步标志,表示请求建立连接。窗口大小WINDOW SIZ为8192,校验和CHECKSUM 0x553a,说明是正确的。选项是12字节,里面的内容有最大段(MSS大小为1440字节,占4个字节。 2. 第二个TCP报文 这是服务器在收到请求后,发回确认(SYN+ACK。

TCP和UDP数据包发送与接收

实验6 TCP和UDP数据包发送与接收 一、实验目的 TCP协议是TCP/IP协议族的核心协议之一。熟悉TCP包结构对于理解网络层次结构,以及TCP协议与IP协议的关系有着重要意义。根据TCP协议的基本原理,通过封装与发送一个标准的TCP数据包,了解TCP包结构中各字段的含义与用途,从而深入理解传输层与下面各层的关系。 二、实验要求 (1)掌握TCP/UDP报头结构、各字段含义以及校验和计算方法; (2)使用Wincap(Lipcap)构造并发送TCP,UDP数据包; (3)使用原始套接字(Raw Socket)发送自定义的TCP,UDP数据包; (4)使用NDIS协议驱动发送自定义的TCP/UDP数据包。 三、实验内容 实验一SOCKET编程实验 实验内容 1、通过调试、运行“UDPClient”和“UDPServer”实验程序,加强对网络通讯原理 的了解。(或“简单Client”和“简单Server”实验程序,下同) 2、学习分析实验程序功能结构,了解基于SOCKET编程的网络通信软件的基本设计 方法。 3、在所提供的”UDPClient”和“UDPServer”实验程序基础上,完善程序功能。 4、通过实验学习和了解SOKCET通信的实现方法。 实验结果分析与总结 (1)总结运行”UDPClient”和“UDPServer”实验程序的运行情况。 UDPClient运行结

UDPServer运行结果 (2)设计交互程序的运行结果如下:

(3)总结程序设计的情况,列出所设计或修改部分的源代码清单。附上程序源代码。Client端修改的代码如下: //(3)开始接收或发送过程 printf("\n------------- waiting for message from Seaver -------------\n"); //进入一个循环 while (1) { //输入并发送信息给服务器 buffer[0]='\0'; //先清空发送缓冲区 printf("\n Input datagram send info ( quit 退出 ): "); //输入发送字符串 scanf("%s",buffer); sendto(socketid,buffer,sizeof buffer,0,(struct sockaddr*)&server,server_len); //发送信息 //控制循环退出 if(strcmp(buffer,"quit") == 0) //输入为quit则结束 { printf("\n send info quit"); return 0; } //接收服务器返回信息 buffer[0]='\0'; //先清空接收缓冲区 if(recvfrom(socketid,buffer,sizeof buffer,0,(struct sockaddr*)&server,&server_len)!=SOCKET_ERROR) //接收返回信息{

相关主题
相关文档
最新文档