TCP/IP通信协议

2024-10-06

TCP/IP通信协议(精选11篇)

TCP/IP通信协议 篇1

1 引言

Delphi具有如下的优点:可视化开发环境的性能;编译器高速度和已编译代码的高效率;编程语言的功能强大,复杂性低;数据库结构的灵活,可扩展性强;框架对设计和使用模式的扩充支持。应用delphi可以很容易地在完成一个C/S结构的局域网系统的设计和实现。这通常涉及到图形用户界面设计、TCP/IP协议、UDP数据广播、局域网内文件传输等一系列技术。本文通过一个简单示例程序,展示了在Delphi语言中进行UDP数据广播及利用Delphi的TServer Socket、TClient Socket构件实现局域网内基于TCP/IP通信的一般步骤和方法。

2 TCP/IP/UDP协议

传输控制协议TCP是Internet最基本的网络通信协议,它由一系列协议组成,下面分别概括介绍TCP/IP协议族中的各协议。

2.1 IP协议网际协议

IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP协议提供的是不可靠无连接的数据报传送服务,它只提供最好的传输服务,但不保证IP数据报能成功的达到目的地。IP层也可配置成路由器,路由器比主机多了数据报转发的功能,即对于目的地址为非本机地址的数据报进行转发。

2.2 TCP传输控制协议

TCP是属于传输层的协议,向应用层提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常为一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。因此在一个TCP连接中,仅有两方进行彼此通信,没有广播和多播的概念。TCP的特点是可以以某些方式来提供数据传输的可靠性。

2.3 UDP用户数据报协议

UDP是一个简单的面向数据报的传输层协议,它只提供不可靠性的数据传输服务,把应用程序传给IP层的数据发送出去,但并不保证它们能到达目的地。这意味着UDP客户机向指定的远端主机发送数据报时,并未事先确知对方是做好了接收数据的准备的。因此就会发生某一客户机发给一个主机,而此主机事先并未把此客户机列入其目标端口号而加以监听的情况。TCP的校验和是必需的,而UDP的校验和是可选的。当校验和有差错时,UDP就将数据报丢弃并不产生任何差错报文。

综合三种协议,如果通信强调可靠性,应该使用TCP;如果可靠性要求不高,但实时性要求高时可以应用UDP协议。本文这里应用TCP/IP协议作为通信协议,可以保证很强的可靠性。

3 socket编程

在Windows环境下开发网络应用程序,通常都是使用Microsoft的网络编程接口,即Windows套接字Windows Socket(简称Win Sock),它包含在Winsock.dll中的一组API中,用于在网络上传输数据和交换信息,编程人员需要熟悉和掌握相关的网络协议、系统的底层知识以及网络软硬件技术,因而Win Sock编程相当复杂。所幸的是,Delphi对Win Sock进行了有效的封装,并不需要直接与Win Sock的API打交道,只需使用其NMUDP、TClient Socket和TServer Socket等构件,使得对Winsock的访问大大简化。本文通过利用Delphi的TServer Socket、TClient Socket构件实现了局域网内基于TCP/IP的通信。

3.1 Socket简介

抽象地说,Socket是一种双向通信接口,实际上Socket是一种数据结构,用以创建一条在没有互联的进程间发送、接受消息的通道(连接点)。对互联的Socket提供通信接口,使两端可以传输数据。Socket屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了Socket规范的计算机之间的通信成为可能。Socket接口是TCP/IP网络最为通用的API,也是在Internet上进行应用开发最为通用的API。

3.2 编程代码

在主界面中,使Sever Socket控件和Client Socket控件。Sever Socket控件是基于TCP/IP协议传输的服务器方的控件,它的主要作用是用来监听其它基于TCP/IP传输计算机的连接请求,并在收到连接请求时,建立连接,进行数据传输。Client Socket控件是基于TCP/IP传输的客户方的控件,它的主要作用是监听TCP/IP传输的服务器发出连接请求,在收到服务器的允许连接的响应后,建立连接,并传输数据。之所以在窗体中同时创建Server Socket和Client Socket控件,是因为应用程序既可作为服务器,又可作为客户端使用如图1。

3.2.1 Serversocket和Client Socket之间的连接

对于连接Form(如图2所示),编写客户的申请连接,代码如下:

3.2.2 消息的输入

3.2.3 服务器端的监听

3.2.4 断开链接

4 运行界面

如图3所示,这是程序运行的主界面。在两台计算机各打开一个程序的实例,通过设置好IP和端口以后,就可以进行通信了。通信可以在广域网内进行,也可以在局域网内进行,但要保证计算机支持TCP/IP协议,这可以通过设置计算机实现。

5 结语

通过编程,实现了Delphi下的网络编程。这极大地增强了对TCP/IP协议的理解,认识了套接字的编程思想。通过运用Delphi编程,可以使认识到Delphi本身就是一个功能十分强大的面向对象开发平台,Delphi的可视组件库VCL(Visual Component Library)是一个易学、易用、高效的可重用的软件对象,本文应用的是通信组件。使用Delphi编程不仅界面开发方便迅速,而且对于系统所带组件和自编组件的运用十分方便,只要将组件放置在窗体中,用鼠标移动到要求的位置,改变某些属性就可以满足要求。

摘要:介绍网络传输所涉及的网络通讯技术,包括传输控制协议(TCP)和用户数据报文协议(UDP)的应用,并给出使用Delphi和Socket函数的方法。利用Delphi的TServerSocket,TclientSocket构件实现局域网内基于TCP/IP的通信。

关键词:传输控制协议TCP,用户数据报文协议UDP,IP地址,Winsock

参考文献

[1]黄文兰.Delphi语言开发教务管理系统[J].电脑知识与技术,2006,(20).

[2]向继文.Delphi与汇编语言的混合编程[J].吉林大学学报(自然科学版),2006,(3).

[3]林瑜华.如何在DELPHI中使用SQL语言[J].福建电脑,2005,(10).

[4]严丽平.基于Delphi的C语言词法分析器的实现[J].科技广场,2004,(8).

[5]王忠,迟忠先.Delphi5开发指南[M].北京:电子工业出版社,2000,28-30.

[6]Craig Zacker.TCP/IPAdministration[M].北京:中国水利出版社,1998,620-625.

TCP/IP通信协议 篇2

TCP IP协议栈:网络接口层

模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。

TCP IP协议栈:互联层

互联协议将数据包封装成internet数据报,并运行必要的路由算法。这里有四个互联协议:

网际协议IP:负责在主机和网络之间寻址和路由数据包。

地址解析协议ARP:获得同一物理网络中的硬件主机地址。

网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误,

互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。

TCP IP协议栈:传输层

传输协议在计算机之间提供通信会话。传输协议的选择根据数据传输方式而定。两个传输协议:

传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。

用户数据报协议UDP:提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,可靠性则由应用层来负责。

TCP IP协议栈:应用层

应用程序通过这一层访问网络。

网络接口技术

IP使用网络设备接口规范NDIS向网络接口层提交帧。IP支持广域网和本地网接口技术。

串行线路协议

TCP/IP通信协议 篇3

摘 要:在当今计算机网络无处不在的时代,网络攻击时刻威协着我们所处局域网络的安全。为了确保网络的安全性,就要对网络交互的数据包进行分析。本文提出了TCP/IP协议分析器的设计开发方案,并通过Qt Creator和C++编程实现。该分析器能够捕获网络数据包,并根据网络协议格式对数据进行解析,从而为进一步分析网络系统的安全性提供依据。

关键词:网络数据包;TCP/IP协议;数据分析

1 系统需求分析

本系统主要功能需求有以下几项:

①具备网络数据包捕获的参数设置: 在进行数据捕获之前要进行协议类型、MAC地址、IP地址等参数的设置,满足用户的一些常规需求,保证用户使用系统的合理性。

②能够捕获到本机所有的网络数据包:通过本系统可以对网络上的数据包进行捕获,包括ICMP、DNS、ARP、RARP等一些网络协议的数据包的捕获,让用户通过本系统能够捕获到有用的数据包。

③能正确地对捕获到的网络数据包进行网络协议分析:在捕获到网络数据包后能够对网络数据包进行包结构分析,对数据链路层数据按照帧格式进行分析,对网络层的IP数据报的分析,对传输层TCP和UDP的头格式进行分析,对应用层协议进行分析。

④能够把捕获到的网络数据包保存到当地文件中:在用户的使用过程中,可能需要对捕获到的网络数据包进行存储,那么需要满足用户对网络数据包的存储功能,让用户能够更灵活地使用本系统。

⑤能够打开已经捕获到的网络数据文件并进行网络协议分析:能够满足用户打开已经保存的网络数据文件,并进行网络协议分析,这样用户就能随时随地对以前的网络数据进行协议分析了。

⑥能统计当前所有网络接口的网络数据包:通过这个功能,用户可以查看当前网络接口的数据包数量和每秒通过的数据量,用户可以清晰地掌握当前网络接口通过数据包的状况,有助于用户对网络接口的检测。

2 总体设计

2.1系统总体模块设计

通过系统需求分析可以将网络协议分析器分为四大主要功能模块,分别为文件存储与读取模块、抓包参数设置模块、数据包捕获模块和数据包分析模块。这些模块详细功能如下:

①文件存储与读取模块:通过捕获网络数据包,把其存储到文件中,有利于以后对网络数据包的分析;读取已经捕获到并存储到文件中的数据包,并进行协议分析。

②抓包参数设置模块:通过配置抓包参数,来确定捕获数据包的类型,可以指定捕获网络数据包的MAC地址和网络地址,并能够对网络协议和网络数据包大小进行设置。

③数据包捕获模块:通过配置的抓包参数进行数据包的捕获,在程序运行的过程中,会将捕获到的数据包以链表的形式存储起来,以供下一步的分析。

④数据包分析模块:根据捕获到的数据包进行各层协议分析,将分析的结果以可视化的界面形式展示给用户,让用户能够看清每层协议的格式和数据包数据部分内容。

系统功能模块图如图1所示:

2.2 软件开发平台

本系统开发平台是一般的PC机,使用Windows 8版本。因为本系统没有涉及到数据库所以就没有使用数据库。程序开发使用的编程环境是Qt 5.4.1中文版,并且opensource使用的版本是Qt Creator 3.3.1。用到的数据包捕获函数库为WinPcap,这个函数库主要运行在操作系统的底层,所以使用这个函数库会大大提升本系统的运行效率,尤其在大量循环捕获网络数据包的时候,优势就愈发明显。编程工具Qt Creator具有很好的跨平台性能,可以很轻松的把本系统移植到Linux环境的系统中去。

3 详细设计

系统中各个功能模块的界面是用Qt Designer来设计的,它提供可视化的界面操作,通过拖动控件来实现我们想要的界面效果,方便高效。Qt提供的信号与槽的机制对逻辑功能的编程更加方便。根据模块所需要实现的功能,编写代码,最终实现系统的整体功能。

3.1 协议头结构设计

通过对协议头结构体的设计,帮助我们完成网络数据包的解析,将定义的结构体与捕获到的网络数据包进行匹配,把相应的字段进行处理,从而分析出网络协议头格式,完成对网络协议的分析。

设计协议头结构体的时候需要注意以下一些事项:①明确网络数据包的结构;②清楚网络数据包捕获的方法;③明确各层协议头数据每个字节或每个字段的含义;④定义对应的结构体用来解析网络协议;⑤把分析的结果以可视化的方式显示在界面上。

这个环节是整个系统中的一个重点,不管哪里出现任何差错,都将导致最终对网络协议的分析出现错误,所以在对网络协议头结构体设计的时候要认真细致,确保结构体里面的字段与网络协议的字段能够一一对应,保证对网络协议分析的正确性。

通过对TCP/IP网络体系各层协议格式的分析,本系统定义了以下的结构体表:数据链路层帧首部结构体表(_ETHERNET_HEADER)、ARP首部结构体表(_ARP_HEADER)、IP首部结构体表(_IP_HEADER)、IPv6首部结构体表(_IP6_HEADER)、TCP首部结构体表(_TCP_HEADER)、UDP首部结构体表(_UDP_HEADER)、ICMP首部结构体表(_ICMP_HEADER)。

3.2 算法概要

抓包模块的程序流程图如图2所示。在对抓包参数设置完点击确定的时候,将选择的每一项按照网络数据包过滤器过滤规则进行处理,转化为字符串模式并通过调用相应的接口函数,对过滤条件进行编译和设置,完成对抓包参数的设计。

当捕获到网络数据包时,这时可以选择一个想要分析的数据包并对数据包进行解析。这里用到数据包分析算法,算法中根据每层协议的协议类型对数据包进行解析,然后判断下一层协议,依次解析,直到最后一层协议。

在系统使用的过程中,可能需要保存数据包,那么这里就会有数据包保存的算法。代码中做这样的处理:每当有数据包到来都会把数据包追加到指定的文件中,当用户需要保存数据包的时候,只需要将数据包临时文件拷贝到指定的目录即可。

通常会对已经保存的数据包进行读操作,这样我们就会有数据包文件的读取功能。这个功能的算法使用标准C语言的二进制读取文件的方法,将文件一个字符一个字符地读取出来,并分离每一个数据包,并对数据包进行相应的处理。

4 系统的编码

4.1 主要函数

此处列出了主要函数,具体程序代码省略。

①捕获网络数据包函数

intpcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

函数返回值:成功返回0,失败返回负数。

参数描述:p: Libpcap句柄,cnt: 指定捕获的数据包个数,-1代表无限个,callback: 回调函数,可在此函数中对数据包进行处理,user: 表示往回调函数传的参数。

②打开存储文件函数

pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *filename)

函数返回值:成功返回一个文件句柄,失败返回NULL。

参数描述:p: 表示一个Libpcap句柄,filename: 文件名。

函数功能:打开一个文件,并准备向其写入网络数据包。

③IP协议分析函数

void ethernet_protocol_IPpacket (LinkList p)

函数返回值:无返回值。

参数描述:p: LinkList类型的链表节点指针。

④TCP协议分析

void ethernet_protocol_TCPpacket (LinkList p, bool isIP6)

函数返回值:无返回值。

参数描述:p: LinkList类型的链表节点指针,isIP6: 是否为IPv6数据包。

4.2 数据包结构分析结果显示

在数据包成功捕获后,选择要解析的数据包进行数据包的解析,数据包协议分析界面如图3所示。在主窗口的右上方有一个表格,里面显示捕获到的每一个数据包的基本信息,如果要对其中的一个数据包进行协议分析,那么需要点击要分析的那个数据包,协议分析的结果会在左侧的树形列表中显示出来,下面窗口中则显示数据包的原始数据和数据包数据。

5 结束语

本系统实现了对网络数据抓包以及对数据链路层、网络层、传输层和应用层等各层协议分析。在对网络数据捕获中,主要用到了操作系统底层的WinPcap函数库,在大量捕获网络数据包时系统运行效率高;使用的编程工具是能够跨平台的Qt Creator,具有良好的可移植性和跨平台性。应用该系统能够捕获到网络上交互的全部数据包,并把数据包的内容显示给用户,把每层协议的协议头按照协议格式解析,让用户更清楚地知道当前网络的网络数据交互状态,进一步分析网络系统的安全性。

参考文献:

[1]刘文涛编著.网络安全开发包详解[M].电子工业出版社,2005.10:20-30.

[2]严蔚敏,吴伟民编著.数据结构(C语言版)[M].清华大学出版社,1997.4:55-60.

[3]殷人昆,郑人杰,马素霞等编著.实用软件工程[M].第三版.清华大学出版社,2011年.

[4]明日科技编著.Visual C++从入门到精通[M].第三版.清华大学出版社,2012年9月:3-31.

[5]Bruce Eckel,Chuck Allison编著.C++编程思想[M].刘宗田,袁兆山等译.机械工业出版社,2011年7月:52-70.

[6]陆文周编著.QT5开发及实例[M].电子工业出版社,2014年1月:11-89.

[7]布兰切特,萨默菲尔德编著.C++GUI Qt4编程[M].第二版,闫锋欣等译.电子工业出版社,2013年5月:21-33.

[8]Brian W.Kernighan,Dennis M.Ritchie编著.C程序设计语言[M].第二版.机械工业出版社,2004年1月:30-60.

[9]W.Richard Stevens编著.TCP_IP协议详解:卷一[M].机械工业出版社,2005年7月:37-45.

[10]Gary R. Wright,W. Richard Stevens编著.TCP_IP协议详解:卷二[M].机械工业出版社,2001年12月:28-67.

基金项目:

TCP/IP通信协议 篇4

本文所设计的数据通信网关主要目标是实现企业对生产现场的远程监控, 完成管理的控制化与信息化, 为企业生产计划、过程调度等提供辅助决策支持, 并实现工程师对设备的远程故障诊断分析、维护与软件更新等, 从而加强企业对生产现场的实时控制能力, 提高信息资源的共享和利用水平。

1.1 通信网关设计原则

为了满足企业应用的需求, 网关设计的主要原则有可拓展性、可靠性以及安全性等。其中可拓展性是指企业生产控制系统在新增各种设备、机械、仪器和仪表的情况下, 不能影响网关的正常运行;可靠性是指网关要满足工业生产环境各个方面的制约, 降低故障以及报错次数, 并能找出故障发生点;安全性是指在数据传输和接受过程中, 要能抵御各种网络和病毒攻击, 保持数据的有效和完整。

1.2 VPN技术和P2P网络

VPN是虚拟专用网的简称, 属于逻辑上的私有网络架构, 其主要目的是在Internet基础上实现各个用户与局域网进行数据通信和网络连接, 一般分为三个部分:客户端、传输介质以及服务器端。目前国内VPN的实现结构分为两个方向:一是广泛用于政府、企业与分支机构之间或ISP之间的网络与网络互连模式, 这种模式的技术原理是用户网络设备直接与ISP边缘路由进行连接, 并由ISP边缘路由进行IP骨干网中通信“隧道”的建立;二是个人用户以宽带连接VPN服务器, 并通过VPN服务器与企业主机进行连接。

P2P网络是取消传统的客户端和服务器的C/S架构模式, 采用网络环境中计算机充当服务器与客户端的双重身份模式。P2P网络的一个特性是通过NAT穿越技术实现私有IP和公共IP的地址转化, 解决IP地址短缺问题。P2P网络包括中心化、半分布式以及全分布式三种模式。中心化模式的主要特点是存在中心服务器, 负责储存共享目录和提供高级算法程序, 实现灵活高效的复杂查询;半分布式模式是将中心服务器的功能按照类型分配给多个节点, 由相应节点 (Supernode和Edgenode) 来实现各种操作;全分布式模式分为半结构化和结构化两类, 半结构化是基于随机图理论, 取消了节点类型的划分, 提高网络的动态调节能力和容错能力。结构化是DHT模式, 通过设定节点标识符以及资源标识符的方式, 来提高查询的准确性和动态性。

2 通信网关设计与实现

2.1 通信网关总体方案设计

通信网关总体方案设计是指数据通信网络拓扑结构的设计与实现。在网络拓扑结构方面, 需要在网关以及监控系统上安装VPN客户端, 并分配两张网卡, 通过这种VPN传输通道的构建, 在保证安全性和可靠性的前提下实现数据通信。其中, 网关一张网卡用于与外部网络进行无线连接, 另一张置于工业控制系统局域网内, 监控系统的一张网卡设置私有IP, 并与整个控制室搭建一个局域网环境, 另一张网卡则与网关连接。通过这种模式, 网关可以将生产现场数据加密发送给监控系统, 并在控制室局域网内共享使用, 同时, 网关也可以以相反的过程接收控制室的各种加密数据, 在经过解密之后, 完成生产控制工作。

另外, 由于传统VPN网络模式对大数据流支撑的程度不高, 企业在选择网络传输构建通道时, 可以结合P2P网络的特点, 构建一个P2P-VPN传输模式, 即各个VPN用户节点支持互相通信, 具备服务器和客户端双重功能, 并单独占有一个ID, 在发送MAC地址信息、注册时间等之后, 进行用户之间的数据通信往来。

2.2 通信网关框架设计

通信网关的主要功能模块包括系统管理、节点管理以及数据捕获和发送这三个部分。系统管理主要是指对整个系统的参数进行设定, 并部署运行机制和运行环境, 提供友好的交互方式以及用户权限管理、密码管理等;节点管理是指节点的新建、修改和删除, 以及对节点的各个属性进行实时监控, 包括运行状态、信任状态、数据传输水平、故障次数等;数据包的捕获与发送是指在设定数据包的捕获、传输方式及传输速率, 对不可信任数据进行阻断与来源分析等。

三个模块之间的逻辑关系可以表述为:系统管理模块通过数据、参数和节点初始化, 形成P2P-VPN传输通道和节点组织结构和状态列表, 并将IP和MAC地址等信息发送到各个节点处, 从而修正节点状态属性。之后, 节点管理模块通过多线程技术将数据包经过过滤器发送至其他模块, 并检测各个节点的运行状态, 实时刷新节点状态列表, 数据捕获与发送模块根据各个节点状态设置过滤器数值, 并进行数据的捕获和发送工作, 其过程分为捕获、分析过滤、二次封装以及发送。

特别指出的是, 整个通信网关系统的主要功能是实现数据的互相传输, 所以, 在数据包捕获以及发送方面, 应采用Winpcap方式来实现, 其主要操作步骤为:

获取用户节点组织结构和状态列表, 分析并选择所需监控的网卡;

修改网卡运行状态, 设置网卡模式为混杂模式;

设置过滤器, 捕获数据包, 并实现基于协议、IP和MAC地址、端口等条件的数据过滤。

调用抓捕函数进行数据包捕获, 并进行二次封装和发送。

2.3 通信网关工作流程

在整个P2P-VPN传输通道搭建完成以及模块功能明确之后, 通信网关系统需要进行工作流程的划分和确认。在流程设计方面, 首先, 由系统管理模块进行传输通道、节点组织结构以及状态列表的初始化;其次, 节点管理模块在接收到上述信息之后实施监控各个节点运行状态, 并不间断的对节点状态列表进行更新;最后, 在数据包捕获与发送模块在接到系统管理模块信息、节点管理模块通知后, 初始化或修正过滤器数值, 并进行捕获和二次封装数据包, 然后将数据包发送至节点管理模块以及系统模块。

3 通信网关测试

通信网关测试包括性能测试和压力测试两个方面。性能测试是指在任意选定的物理环境和软硬件环境下, 对网关系统远程设备监控的状态, 阻断其他入侵攻击的能力, 以及数据流的安全和完整进行的系统测试工作。压力测试是指对通信网关系统进行延时和负载两个方面进行测试, 主要考虑系统的传输时间、大数据流的丢包率等指标。企业可以结合实际需求设定相关指标, 并对通信网关系统进行测试, 在多次测试结果全部合格后, 开始启用基于TCP/IP协议的工业控制网络远程数据通信网关系统, 以完成数据流的实时共享和远程控制等功能。

摘要:计算机技术的迅速发展大大提高了企业信息的沟通和交流水平, 也推动了工业控制技术的不断进步与革新, 而与外部网络相对隔离的传统工业控制系统已经难以满足企业日常的管理需求。为了解决这一问题, 实现企业对设备进行远程监控与通信, 及时掌握生产现场情况和提高控制能力, 本文在结合工业企业自身实际的基础上, 基于TCP/IP协议、VPN技术、P2P网络技术、Winpcap方法等, 对远程数据通信网关这一技术工具进行研究, 并尝试为企业实现远程监控系统与生产现场之间的数据和信息交流提供实施策略和建议。

关键词:TCP/IP协议,工业控制网络,远程数据通信网关

参考文献

[1]贾东耀, 汪仁煌.工业控制网络结构的发展趋势[J].工业仪表与自动化装置, 2002年第5期.

[2]阳宪惠等.工业数据通信与控制网络[M].清华大学出版社, 2003年.

[3]孙祥国.远程智能控制系统的研究与实践[D].西南交通大学, 2006年.

TCP/IP通信协议 篇5

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。这是后话,暂且不提

1.1.IP协议头

如图所示

挨个解释它是教科书的活计,我感兴趣的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。

现在的ip版本号是4,所以也称作IPv4。现在还有IPv6,而且运用也越来越广泛了。

1.2.IP路由选择

当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来“送货”的呢?

最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。

稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包

如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。

搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机

搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助,

如果找到路由器,则将该包发向路由器。

搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。

搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包

如果都失败了,就丢掉这个包。

这再一次证明了,ip包是不可靠的。因为它不保证送达。

1.3.子网寻址

IP地址的定义是网络号+主机号。但是现在所有的主机都要求子网编址,也就是说,把主机号在细分成子网号+主机号。最终一个IP地址就成为 网络号码+子网号+主机号。例如一个B类地址:210.30.109.134。一般情况下,这个IP地址的红色部分就是网络号,而蓝色部分就是子网号,绿色部分就是主机号。至于有多少位代表子网号这个问题上,这没有一个硬性的规定,取而代之的则是子网掩码,校园网相信大多数人都用过,在校园网的设定里面有一个255.255.255.0的东西,这就是子网掩码。子网掩码是由32bit的二进制数字序列,形式为是一连串的1和一连串的0,例如:255.255.255.0(二进制就是11111111.11111111.11111111.00000000)对于刚才的那个B类地址,因为210.30是网络号,那么后面的109.134就是子网号和主机号的组合,又因为子网掩码只有后八bit为0,所以主机号就是IP地址的后八个bit,就是134,而剩下的就是子网号码--109。

2. ARP协议

还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

一个典型的arp缓存信息如下,在任意一个系统里面用“arp -a”命令:

Interface: 192.168.11.3 --- 0x2

Internet Address Physical Address Type

TCP/IP通信协议 篇6

关键词 以太网 TCP/IP协议 嵌入式 CP2200

如今,基于嵌入式的网络通信发展越来越迅速,其应用领域也变得更加广泛[1]。因此,嵌入式设备与网络的互联成为嵌入式系统发展的主要趋势。目前,嵌入式网络通信大都是基于TCP/IP协议实现的[2—4]。本文通过对精简的TCP/IP网络结构中各层协议模块的设计,并用C语言进行编程,实现了嵌入式以太网通信的各项测试,包括串口通信测试、ping命令功能测试、web网页浏览器测试和抓包软件测试。

1 整体硬件系统简介

本系统主要由Silicon labs公司生产的单片机C8051F340和以太网控制芯片CP2200组成[5]。其硬件结构框图如图1所示。

C8051F340是系统的核心控制器,它具有可达48MIPS的微控内核,精确校准的12MHz内部振荡器和4倍时钟乘法器,10位的ADC,4个通用的16位定时器及多达4352字节的片内RAM[6]。

CP2200是集成IEEE802.3以太网媒体访问控制器(MAC)、10Base—T物理层(PHY)和8KB非易失性FLASH存储器的以太网控制芯片,它的8位并行总线接口支持Intel和Motorola总线方式,可以是复用或非复用方式寻址,FLASH存储器的最后6个存储单元已在出厂前被预先写入一个唯一的48位MAC地址[7—9]。

系统的主要硬件连接简图如图2所示。

由图2可知,CP2200工作在非复用Intel总线方式。它的读写控制信号/RD、/WR分别与C8051F340的P1.6和P1.7引脚相连,外部中断/INT与P0.0连接。它通过RJ45插头与网络实现连接,其中LINK连接黄色LED灯用于检测有效的连接脉冲,ACT连接绿色LED灯用于检测发送或接受到一个数据包。

2 精简TCP/IP协议的设计与实现

2.1 TCP/IP协议栈结构

TCP/IP协议栈是四层的体系结构,由上到下分别为应用层、运输层、网络层和网络接口层[10]。各层又有不同的网络协议,如图3所示。

2.2 TCP/IP各层协议的设计与实现

2.2.1 精简协议栈的软件实现流程

在嵌入式系统中,根据实际应用的需求,要对TCP/IP协议族进行裁剪来实现嵌入式网络通信的目的。为了完成本文所需的各项测试功能,设计了如图4所示的软件实现流程图。初始化过程有对单片机的初始化,包括系统时钟初始化、端口初始化、定时器初始化、串口初始化等,还有对CP2200的初始化,包括物理层初始化、MAC层初始化、中断使能等。

2.2.2 各层协议的设计及其实现

本文设计的协议栈中,网络层包括ARP协议、IP协议及ICMP协议,运输层包括TCP协议和UDP协议,应用层主要涉及HTTP协议。各个协议模块的实现如下:

(1)ARP协议模块。ARP缓存表更新函数age_arp_cache(),它每60s更新一次。ARP发送函数arp_send(),当发送请求报文时,不知道目的物理地址,它是广播报文;当发送应答报文时,接收方的物理地址要添加到目的物理地址。ARP重传函数arp_retransmit(),若发出ARP请求0.5s后没响应,就再发送一次,若两次都没响应则删除报文。ARP解析函数arp_resolve()解析发送IP报文的目的IP地址,若目的IP地址与发送的IP地址不在同一网络,则这个IP地址就是网关的IP地址;再看它是否在缓存表里,若不在则发送ARP请求报文。ARP接收函数arp_rcve()用来接收请求或应答报文,其中需要进行缓存表的更新和重新定时,如果接收到请求报文,需要发送ARP应答报文,若接收的是应答报文,要将等候地址解析的IP报文发出。

(2)IP协议模块。IP发送函数ip_send()处理发送的IP报文,主要是对20字节头和校验和的处理,然后通过网络接口层发送。IP接收函数ip_rcve(),要考虑它的版本信息及分段情况,再根据接收到的报文类型转移到相应的接收函数进行处理。

(3)ICMP协议模块。Ping命令请求信息函数ping_send(),主要用来测试发送方和接收方是否正确接收,在IP层能否通信。ICMP接收函数icmp_rcve()主要是处理ping请求的接收,根据ICMP不同的报文类型进行相应处理。

(4)TCP协议模块。TCP发送函数tcp_send()是要发送一个TCP报文,里边不包含数据,主要是对字节头和校验和的处理。TCP重传函数tcp_retransmit()通过设置定时功能实现数据的可靠传输,它允许的重传次数为2次,传送的应用层程序是基于HTTP服务程序(即传送网页数据)。TCP的保活函数tcp_inactivity()也是0.5s运行一次,在连接处于建立状态下,当保活期满时还没被再次用到,则关闭连接。TCP接收函数tcp_rcve()要进行字节头信息和校验和的计算,然后判断是否为HTTP服务程序以及它的连接状态等信息,最后通过TCP的有限状态机判定数据包的流程。

(5)UDP协议模块。UDP的发送函数udp_send()也是进行字节头和校验和的处理。它的接收函数udp_rcve()处理接收到的UDP报文,若没有接收到数据则发送ICMP的终点不可到达报文。

(6)HTTP协议模块:它的发送函数http_send()就相当于TCP的发送函数加上了数据信息。而http_server()函数主要对网页内容进行了设计,其中包括超文本标记语言(HTML)和JPEG格式图像等内容的处理。

3 实验测试结果

在进行测试实验前,要根据编写的程序内容将个人计算机的IP地址等信息进行设定,然后连接好串口线、以太网双绞线、单片机的下载仿真器等硬件设施。其中,个人电脑的IP地址设为192.168.0.10,测试板网卡芯片的IP地址设为192.168.0.126。

3.1 串口通信测试

若要实现终端设备与网络之间的通信,首先应确保串口与单片机之间的通信。因此,连接好电脑与单片机的串口线后,将编写的程序写入单片机,通过串口调试助手测试串口接收到的数据,如图5所示。接收区显示的是单片机的片上温度传感器的温度和P2.5引脚的工作电压。

3.2 PING命令测试

为了通信网络的连通情况,用个人计算机对测试板网卡芯片进行了PING命令测试,结果如图6所示。

3.3 Web网页浏览器测试

在浏览器的地址栏输入要访问的测试板的IP地址,即可得到如图7所示的网页内容。此网页是利用HTML超文本编辑语言进行编写,其中包括图片设计、表格设计及通过控制LED灯实现的表单设计。

3.4 抓包软件测试

做好实验前准备工作后,打开抓包软件CommView,运行程序,开始抓包并访问浏览器,得到如图8所示的测试结果。通过此抓包软件可知,个人电脑与测试板进行网络通信时,各个协议包的发送与接收流程,各层协议的字节头信息以及传输的数据信息等。

4 总结

本文设计了精简的TCP/IP协议栈,并通过多项实验测试实现了嵌入式网络通信的目的,即完成了以太网接口的设计。对于应用层服务程序,本文只是实现了HTTP客户端的功能,还可以开发TFTP客户端、FTP客户端、SMTP客户端等应用层程序,从而使之有更加广泛的应用环境,提高实用价值。

参 考 文 献

[1] 刘跃,傅一帆. 嵌入式系统以太网接口设计与实现. 计算机应用,2009,28(8):33—37

[2] 杨杰,陈学工. 基于TCP/IP协议的嵌入式以太网客户端的设计与实现. 湖南科技学院学报,2008,29(12):100—103

[3] 王晓菊,潘琢金,杜睿. 嵌入式网络接口模块设计及协议栈实现. 沈阳航空工业学院学报,2007,24(1):49—52

[4] 李云岗. 基于CP2201的嵌入式以太网接口的实现及应用. 北京:北京交通大学,2008

[5] 黄承. 基于嵌入式技术网络测试仪的研究及设计. 长沙:中南大学,2008

[6] Silicon Laboratories著,潘琢金译. C8051F34x全速USB FLASH微控制器[内部资料]. 新华龙电子有限公司,2006

[7] Silicon Laboratories著,潘琢金译. CP2200/1单芯片以太网控制器[内部资料]. 新华龙电子有限公司,2006

[8] 徐杨. 利用CP2200在单片机局域网中进行通信. 计算机与网络,2009,(15):37—39

[9] 张瑞瑞,马晨普. 用CP2200实现MCU的简易型以太网接口.单片机与嵌入式系统应用,2009,(12):38—40

TCP/IP协议的安全问题初探 篇7

TCP负责发现传输的问题, 一有问题就发出信号, 要求重新传输, 直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。TCP/IP协议数据流采用明文传输。TCP/IP协议组本身存在很多安全性方面的漏洞。这些弱点正导致了攻击者的拒绝服务 (DOS) 、Connection Hijacking以及其它一系列攻击行为。

TCP/IP主要存在以下几个方面的安全问题:

(1) 源地址欺骗 (Source address spoofing) 或IP欺骗 (IP spoofing) 。

(2) 源路由选择欺骗 (Source Routing spoofing) 。

(3) 路由选择信息协议攻击 (RIP Attacks) 。

(4) 鉴别攻击 (Authentication Attacks) 。

(5) TCP序列号欺骗 (TCP Sequence number spoofing) 。

(6) TCP序列号轰炸攻击 (TCP SYN Flooding Attack) , 简称SYN攻击。

(7) 易欺骗性 (Ease of spoofing) 等等。

2 对TCP/IP所受的攻击类型

2.1 TCP SYN attacks或SYN Flooding

TCP利用序列号以确保数据以正确顺序对应特定的用户。在三向握手 (Three-Way Handshake) 方式的连接打开阶段, 序列号就已经建立好。TCP SYN攻击者利用大多数主机执行三次握手中存在的漏洞展开攻击行为。当主机B接收到来自A的SYN请求, 那么它必须以“Listen Queue”跟踪那部分打开的连接, 时间至少维持75秒钟, 并且一台主机可以只跟踪有限数量的连接。一台非法主机通过向其它主机发送SYN请求, 但不答复SYN&ACK, 从而形成一个小型的Listen Queue, 而另一台主机则发送返回。这样, 另一台主机的Listen Queue迅速被排满, 并且它将停止接收新连接, 直到队列中打开的连接全部完成或超出时间。至少在75秒内将主机撤离网络的行为即属于拒绝服务 (Denialof-Service) 攻击, 而在其它攻击中也常发生这样的行为, 如伪IP。

IP Spoofing——伪IP技术是指一种获取对计算机未经许可的访问的技术, 即攻击者通过伪IP地址向计算机发送信息, 并显示该信息来自于真实主机。IP层假设它所接收到的任何IP数据包上的源地址都与实际发送数据包的系统IP地址 (没有经过认证) 相同。很多高层协议和应用程序也会作这样的假设, 所以似乎每个伪造IP数据包源地址的人都可以获得非认证特免。伪IP技术包含多种数据类型, 如Blind和Non-Blind Spoofing、Man-in-theMiddle-Attack (Connection Hijacking) 等。

2.2 Routing Attacks

该攻击利用路由选择信息协议 (RIP:TCP/IP网络中的基本组成) 。RIP主要用来为网络分配路由选择信息 (如最短路径) 并将线路传播出局域网络。与TCP/IP一样, RIP没有建立认证机制, 所以在无需校验的情况下就可以使用RIP数据包中的信息。RIP攻击会改变数据发送目的地, 而不能改变数据源位置。例如, 攻击者可以伪造一个RIP数据包, 并声称他的主机“X”具有最快网外路径。所有从网络中发送出去的数据包可以通过“X”发送, 并且进行修改或检查。攻击者还可以通过RIP高效模仿任何主机, 并导致所有将要发送到那台主机上的通信流量全部发送到了攻击者机器上。

2.3 ICMP Attacks

IP层通常使用Internet控制信息协议 (ICMP:Internet Control Message Protocol) 向主机发送单行道信息, 如“ping”信息。ICMP中不提供认证, 这使得攻击者有机会利用ICMP漏洞攻击通信网络, 从而导致拒绝服务 (Denial of Service) 或数据包被截取等攻击。拒绝服务基本上利用ICMP Time Exceeded或Destination Unreachable信息, 使得主机立即放弃连接。攻击者可以伪造其中一个ICMP信息, 然后将它发送给通信主机双方或其中一方, 以取消通信双方之间的连接。

2.4 ARP欺骗

在局域网中, 是通过ARP协议来完成IP地址转换为第二层物理地址 (即MAC地址) 的。ARP协议对网络安全具有极其重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗, 能够在网络中产生大量的ARP通信量使网络阻塞。

ARP协议是“Address Resolution Protocol” (地址解析协议) 的缩写。在局域网中, 网络中实际传输的是“帧”, 帧里面是有目标主机的MAC地址的。在以太网中, 一个主机要和另一个主机进行直接通信, 必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

3 总结

TCP/IP通信协议 篇8

下面介绍的电信动力与环境集中监控系统使用了模块化和面向对象的设计,并且重点讨论了一个专门设计的TCP/IP通信库。

1 动力监控系统架构

一个完整的电信动力与环境监控系统应该包括配电系统设备、环境系统参数、消防系统信息和保安系统等数据,这些监控对象包括可以直接使用通信协议采集的所谓智能设备,也包括向温湿度传感器一样的非智能设备,对于不同的监控对象需要使用不同的数据采集前端设备,这些前端设备放置在被监控设备的附近或者通过现场铺设通信电缆进行数据采集。

当前以太网技术已经非常成熟,电信公司的DCN网络(专用数据通信网)是一个完全意义上的分组交换网络,TCP/IP协议在公司内和机楼之间都可以随处可用,所有数据通过前端采集设备采集后都可以通过TCP/IP网络进行传输。本系统整体的设计都基于电信完善的TCP/IP网络,系统以数据库为基础、以数据处理机为数据的中心,所有的监控段包括监控机和办公室都可以通过使用TCP/IP协议连接到数据处理机获得实时处理的监控数据,通过连接中心数据库获得保存的历史数据。

2 系统软件设计

监控软件功能模块以数据处理软件为实时数据分发中心,以数据库为历史数据存放中心。其余客户端软件都通过Sockets的方式连接到数据处理中心,数据处理中心作为Socket Server给其他客户端提供数据服务,客户端作为Socket client主动与中心建立连接,使用TCP/IP协议与中心进行通信。

3 通信库实现原理

在Windows操作系统下实现的TCP/IP通信程序,用户进程的每次网络访问都要通过操作系统来完成,Socke通信中发送方首先在用户空间将欲发送的数据准备好,通过系统调用进入核心,由核心将发送的数据从用户空间拷贝到核心空间,数据经TCP/UDP协议和IP协议处理,最后由网卡驱动程序发送到网络,当消息被接收方的网络接口卡收到后,产生硬件中断通知核心,接收方核心同样要经过IP协议和TCP/UDP协议的处理然后才能将数据拷贝到接收方进程的用户空间中。

除了操作系统负责完成的部分以为,用户程序还需要实现客户业务数据的调度,尤其对于服务程序需要建立一个高效的线程级的服务架构,因为服务程序需要实时响应很多监控客户端的同时数据请求。故很有必要专门为之设计一个高性能的TCP/IP通信库,用于实现高效的通信服务程序和通信客户程序。

这里设计的通信库基于TCP Client/TCP Server的通信模式,而不是Peerto-Peer的通信模式。基于Client/Server通信模式需要至少完成两项任务:

1)TCP客户端负责发起一个与服务器的连接,因此客户端只需要关心并处理仅仅一个简单的向外的连接。

2)服务器端监听所有指向自己的客户端的请求,服务器端必须关心并处理多个向内的连接请求和向内的连接。

4 通信库设计实现

本系统的大部分软件都使用微软的新开发平台.NET进行开发,通信库也使用.NET平台下的C#语言进行设计和实现,可以供.NET平台支持的所有语言调用。

4.1 关键接口设计

基于.NET开发平台,在通信库中设计一个向外的连接类OutgoingConnection供客户端程序连接服务器程序使用。当客户端请求一个向服务器程序的连接时,服务器程序创建一个向内的连接类IncomingConnection的实例负责与客户端进行通信。OutgoingConnection类和IncomingConnection类都继承自同一个基础通信类ConnectionBase类,它提供了向内和向外通信相关的公共方法(如发送、接收数据等),都由接口ICommunicationsBase进行声明,这两个连接类共同实现的接口包含如下元素:一个Socket实例(发送和接收数据的管道);一个可以有管道接收到的新的数据触发的事件;一个可以通过管道与远程主机进行数据传输的方法;一个可以关闭Socket的方法。

客户端使用的OutgoingConnection类需要另外实现一些元素:一个连接方法(包含节点地址、端口参数)用来初始化与服务器的连接;三个线程:分别负责接收数据、发送数据和从数据流中提取数据。服务端使用的IncomingConnection类需要另外实现一些元素:一个类实例隶属的通信服务器指针实例;一个用来标识自己的ID编号;一个指向要发送的信息的接口IIncomingMessageHandler的实现。

几个关键的接口之间的关系如下,ICommunicationsServer包含了实现了接口ICommincomingConnection的类的多个实例,并且动态建立。

4.2 信息传输设计

动力与环境监控系统TCP/IP类库的核心功能就是在设备和系统之间、系统内部、系统之间高效、正确地传输实时信息,实时信息可以是一段打包的实时变化的字节流或者字符的集合,类库负责的内容就是保证打包发送信息,并且负责接收、解包信息,并保证发送的信息和接收到的信息完全一致。

通信类库提高性能的第一步是合理的利用多线程技术,监听、接收、发送都使用单独的线程,以有效的利用CPU时间并且不会互相影响和造成不合理的等待。

类库设计了一个线程安全的类SendReceiveBuffer作为发送的信息缓冲区,缓冲区中的字节等待被发送或被处理,使用线程安全的队列保存缓冲区数据。提供发送性能的关键在于减少少量字节的多次发送,将需要发送的多个少量字节预先保存在队列缓存中,发送时可以合并成单个的TCP/IP包进行发送以提供效率。

通信库中另一个提高通信性能的方法是使用非阻塞模式,因为非阻塞模式在发送和接收是不需要等待,可以立即进行下一次接收和发送,而阻塞模式将使得当前线程进入等待直到发送或接收完成。尤其在通信库的服务器端性能的提高将非常明显,因为在有大量的数据等待发送到大量的客户端时,非阻塞模式可以立即进行下一个客户端的发送和接收。

5 结论

文章介绍的电信动力与环境集中监控系统已经在电信公司实际运行,获得了良好的效果。系统采用了新的软件平台,并且使用了专门设计的高性能TCP/IP通信库,经过测试,可以支持100个以上的监控客户端没有明确的通信滞后,表现了良好的性能,也有一定的通用性。

参考文献

[1]Christian Holm,Mike Kruger等.C#软件项目全程剖析[M].北京:清华大学出版社,2003:13-36.

[2]严蔚敏,吴伟民.数据结构:[M].北京:北京:清华大学出版社,1997.

[3]Ivar Jacobson,Grady Booch等.统一软件开发过程[M].北京:机械工业出版社,2002.

[4]Erich Gamma,Richard Helm.设计模式[M].北京:机械工业出版社,2000:54-91.

[5]刘险峰,倪涉权.蓄电池容量在线监测研究[J].通信电源技术,2009(5):51-54.

[6]王彦桂,郁滨等.配电自动化系统中应用DNP3.0协议进行数据通信[J].计算机自动测量与控制,2001(T):99-101.

TCP/IP通信协议 篇9

目前,各医院检验科的检验仪器按对外通信接口大致分为2类:一是串行通信接口(简称串口),二是基于网络接口(RJ45)。前者符合RS232接口协议,这种接口占所有检验仪器的80%以上,而且实现串口编程已经有非常成熟的方法可供参考[2]。后者采用TCP/IP协议,最近几年被越来越多的中外检验仪器厂商所采用,此种连接方式相比较传统的串口方式,更简单方便,而且通信速率高,适于高速率传送,相信会有更广阔的前景。但是目前采用RJ45接口检验仪器联机编程比较少见,本文就此进行探讨。

1 通信协议简介

与串口通信编程使用Microsoft Mscomm32.ocx控件一样,基于RJ45网络接口使用Microsoft MSWINSCK.OCX控件,该控件相比Mscomm32.ocx更简单,因为WINSOCK控件允许用户以UDP和TCP 2种协议中任选一种进行通讯

1.1 UDP协议设置

UDP协议是一种无连接的通讯协议,在通讯之前,需要绑定remotehost和remoteport属性,如果需要双向通讯,还要设置localport属性。

1.2 TCP协议设置

TCP协议是一种连接协议,在通讯前需要进行连接。如果把计算机设为服务器,其设置如下:

根据检验仪器的通信参数需求,选择合适的通信协议。本文根据笔者连接迈瑞BC5500五分类血细胞分析仪来进行说明。

2 编程实现

2.1 编程准备

(1)在计算机上装2块网卡,配置2个IP地址,其中一块连接LIS服务器,另一块连接BC5500血细胞分析仪。

(2)网上下载Mswinsock.Ocx控件。

(3)其他软件工具:Powerbuilder9,TCP&UDP测试工具,Winhex等。

2.2 数据接收分析

(1)用直通网线连接BC5500和LIS网络.

(2)根据BC5500通信说明,把BC5500设置为服务器端,联机计算机设为客户端[2]。以管理员权限进入BC5500的设置—通信界面,设置BC5500的IP地址为192.168.0.1,网关192.168.0.2,见图1。

设置联机计算机和检验仪器连接网卡的IP地址为192.168.0.2,网关为192.168.0.2。

(3)在联机计算机上安装TCP&UDP测试工具,并设为本机为客户端,然后创建到BC5500的联接,目标IP为192.168.0.1,端口为5500,本机端口随意,协议选TCP,从检验仪器BC5500发送检验结果,这时TCP&UDP测试工具接受区应该接收到数据。

(4)用Winhex软件分析上一步接收的数据,可以看到样本数据以0×05开始,以0×0A结束。

3 程序基本流程

3.1 在Windows中注册

使用Microsoft winsock通信控件前,必须事先在Window中注册,因为该控件是Microsoft Visual Basic的控件,最好在开发环境下先安装一个Visual Basic6,或者在注册表中加入HKEY_CLASSES_ROOTLicenses2c49f800-c2dd-11cf-9ad6-0080c7e7b78d=mlrljgrlhltlngjlthrligklpkrhllglqlrk,否则会报未授权错误。

3.2 应用程序中定义外部全局函数

Function long Dllregisterserver()library'Mswinsck.Ocx'

在应用的open事件中加入以下语句:

DLLRegisterServer()//完成Mswinsck.ocx控件注册

3.3 添加ole控件并设置其属性

在程序主窗口中加入ole控件即Mswinsck.Ocx,并命名为ole_comm,按照初始化参数对ole_comm属性进行如下设置:

3.4 数据接收与处理

在ole_comm控件的dataarrival事件中接收数据

//接收到BC5500数据后

string gs_receive

This.object.getdata(def gs_receive)

3.5 数据分析函数f_parsedata(read)

数据分析时要认真阅读迈瑞公司的BC-5500主机与终端通信协议说明书,了解其通信协议、数据格式,这里给出参考程序:

4 联机程序调试

接口程序编制完毕后,启动TCP&UDP测试工具模拟检验仪器BC5500,并把其IP地址设为和BC5500一样,再将模拟数据从TCP&UDP测试工具发送到自己开发的程序,看能否正常接受处理,发现问题给予处理。模拟调试完毕后,再和实际检验仪器联合调试,看数据能否正常接受处理并写入LIS数据库。

5 结论

基于网络接口的检验仪器是今后发展的方向。使用Mswinsck.ocx控件,结合Powerbuilder编程,可以非常方便地实现该类检验仪器检验结果的自动采集,技术简单、成熟,对开发人员要求较低,是一种简便可行的方法。

摘要:目的:实现检验结果的自动采集。方法:使用Mswinsck.ocx控件结合POWERBUILDER编程。结果:实现了基于TCP/IP协议的检验仪器与LIS系统的通信。结论:使用该方法技术简单、可靠,值得推广使用。

关键词:LIS,Mswinsck控件,检验仪器

参考文献

[1]傅征,任连仲.医院信息系统的建设与应用[M].北京:人民军医出版社,2002:162-165.

TCP/IP通信协议 篇10

TCP/IP网络协议栈源于20世纪60年代美国军方资助的一个分组交换网络的研究项目, 在设计之初是使用环境中的用户都是可信任的, 并未考虑到其中存在的安全问题, 后来TCP/IP协议栈取得巨大的成功, 并促成全球互联网时代的到来, 但随着互联网的逐步扩展与开放, 使得原先用户可信任的缺省假设不再满足, TCP/IP协议栈存在的安全缺陷被发现, 如:缺乏加密认证机制、TCP序列号易被猜测、定时器及连接建立过程中的问题等, 都是TCP/IP协议固有的缺陷。而这些缺陷成了黑客们的攻击点, 对目标网络的安全性构成危害和威胁。

2 常用的 TCP/IP 网络协议栈攻击技术

2.1 网络层攻击

(1) ARP缓存欺骗

ARP缓存是ARP协议的重要组成部分。当使用ARP协议解析了MAC地址和IP地址的映射关系, 该映射便会被缓存下来。因此就不再使用ARP协议来解析已存在缓存中的映射关系。但是因ARP协议是无身份认证的, 所以ARP缓存很容易被恶意的虚假ARP数据报实施欺骗, 这样的攻击被称为ARP缓存欺骗。

在这样的攻击中, 攻击者通过伪造ARP数据报来欺骗被攻击主机的电脑使之缓存错误的MAC地址和IP地址映射。因攻击者的动机不同, 攻击的结果也有很多。例如, 攻击者可以使被攻击主机的默认网关IP映射到一个不存在的MAC地址达到DoS攻击, 攻击者也可以使被攻击主机的通信重定向至其他机器等等。

(2) ICMP重定向攻击

ICMP重定向报文是路由器为网络中的机器提供最新的路由信息以达到最短路由而使用的。当主机收到一个ICMP重定向报文就会根据报文来更新自己的路由表。由于缺乏确认机制, 如果攻击者想要使被攻击主机使用特定路由, 他们只要向被攻击主机发送欺骗性的ICMP重定向报文, 使它改变路由表即可。

2.2 传输层攻击

(1) SYN flood攻击

SYN flood攻击是DoS攻击的一种形式, 攻击者向被攻击主机的TCP端口大量发送SYN请求包, 但不去完成TCP的“三次握手”的过程, 例如攻击使用一个假的IP地址, 或只是简单地不再继续建立TCP连接的过程, 这都使被攻击主机处于”半连接”状态 (即在”三次握手”过程中, 有了前两次握手, SYN包和SYN-ACK包的传输, 但没有最后一次ACK包的确认。

被攻击主机的主机会使用一个队列来保存这种半连接的状态, 当这个队列存储空间满了的时候, 目标主机便无法再接受任何其它连接。这一队列的空间大小事实上是一个系统变量, 在Linux中, 可以这样查看它的大小:#sysctl–qnet.ipv4.tcp_max_syn_backlog。

我们还可以使用”netstat -na”命令去检查队列的使用情况。处于半连接的连接状态被标示为”SYN-RECV”, 完成了”三次握手”的连接被标示为”ESTABLISHED”。

你可以使用Netwox去实施攻击, 并使用嗅探器来获取数据包。攻击实施的过程中, 在被攻击主机上运行”netstat -na”命令去观察受攻击的情况。

SYN Cookie保护机制:如果你的攻击看起来并不成功, 你可以检查一下目标主机的SYN Cookie机制是否被开启。SYN cookie是针对SYN flood攻击的一种保护机制。这一机制会在探测到SYN flood攻击时开始生效。你可以使用sysctl命令去打开或关闭这一机制:

# sysctl -w net.ipv4.tcp_syncookies=0 (关闭SYN cookie)

# sysctl–w net.ipv4.tcp_syncookies=1 (打开SYN cookie)

(2) TCP RST攻击

比如被攻击者使用浏览器访问一个视频网站, 并选择播放某个视频大多数情况下视频的完整内容被存放在一个不同的主机上, 该主机接下来会与被攻击主机建立起TCP连接, 从而使被攻击主机能够接收视频的内容, 通过破坏上述TCP连接来干扰视频流的传输。你可以让被攻击主机试图去访问一个假的IP地址或是攻击主机的IP地址来获取视频 (从而它无法成功获得视频内容) , 但请注意, 攻击的目标应该是被攻击主机, 这是受你控制的一台主机, 不要针对提供视频的主机 (不受你控制的主机) 。你的攻击实验应出于学习目的而不要造成真正的危害。

(3) TCP会话劫持 (bonus)

TCP会话劫持的目标是劫持一个已经存在于两台被攻击主机之间的TCP连接, 在会话中注入恶意的内容。如果这是一个telnet会话连接, 攻击者可以注入一些恶意的命令, 使得被攻击主机运行这些恶意的命令。在这个任务中, 我们使用telnet作为例子, 并且仍然假定攻击机与目标主机在同一个局域网内。

3 TCP/IP 网络协议栈 IP 欺骗的应对措施

上述诸多黑客攻击TCP/IP网络协议栈的情况非常普遍, 这里我们只针对较普遍的IP欺骗采取应对策略加以说明。

在网络攻击技术中IP欺骗是针对TCP/IP协议栈中不完善的机制而发展起来的, 目前尚无简便的方法防止IP地址的欺骗行为。我们只能采取一些弥补措施来使其造成的危害减少到最小的程度。防御这种攻击的主要防范策略:

(1) 在局域网内部的IP数据包发出之前, 需对每一个连接局域网的网关或路由器进行IP源地址进行检验。如果该IP包的IP源地址不是其所在局域网内部的IP地址, 则该IP包就被网关或路由器拒绝, 不允许该包离开局域网。这样攻击者至少需要使用其所在局域网内的IP地址才能通过连接该局域网的网关或路由器。因此建议每一ISP或局域网的网关路由器都对出去的IP数据包进行IP源地址的检验和过滤。

(2) 使用防火墙决定是否允许外部的IP数据包进入局域网, 对来自外部的IP数据包进行检验。如果数据包的IP不是防火墙内的任何子网, 它就不能离开防火墙。这种方法虽然能够很好地解决问题, 但是一些防火墙并不能够正确的区分内部与外部的数据包, 并且在实际应用中局域网与局域网之间也常常需要有相互的信任关系以共享资源, 这种方案不具备较高的实用价值。

(3) 在包发送到网络上之前, 我们可以对它进行加密。虽然加密过程要求适当改变目前的网络环境但它将保证数据的完整性和真实性。虽然服务拒绝攻击的工具很多, 但一般都有相应的补丁, 所以网络管理员应经常在网上查找并安装这此补丁。

4 结束语

针对上面的各种CP/IP网络协议栈攻击技术我们在工作实践中不断寻求不同的解决方案, TCP /IP协议的安全隐患目前是无法从根本上消除的, 我们只有通过深入分析TCP/IP协议所存在的漏洞, 研究黑客利用这些漏洞进行攻击的常用方法并针对这些漏洞可能导致的安全隐患采取相应的解决策略才能达到提高网络安全性能、减少网络系统免受攻击的目的。

参考文献

[1]季云龙, 邵国强.TCP/IP协议的网络安全电脑学习, 2011, 2:29-30.

[2]颜学雄, 王清贤, 李梅林.SYN Flood攻击原理与预防方法, 计算机应用, 2000.

TCP/IP通信协议 篇11

一、TCP协议

TCP协议是一种可靠的、面向连接的传输协议, 它提供面向连接的可靠的传输服务, 支持多种网络应用程序, 可用于各种可靠或不可靠的网络。面向连接意味着两个使用TCP的应用在彼此交换数据前必须先建立一个TCP连接。因此, TCP主要是为了在主机间实现可靠性的包交换传输。

1. TCP数据包的格式

原端口号:说明源服务的端口号。目的端口号:表示目标服务访问的端口号。序号:本段中第一个数据字节的顺序号。确认号:捎带应答的顺序号, 指明接收方期望接收到的下一个数据字节的顺序号。首部:给出首部中32bit字的树目。保留:必须为0。位标示:用6bit表示各种控制信息, 包括URG紧急指针字段有效。ACK:确认序号有效。PSH:接收方应尽快将这个报文段交给应用层。RST:重新连接, 通常用于连接后的故障恢复。SYN:对顺序号同步, 用于连接的建立。FIN:数据发送完成, 用于连接的建立。

2. TCP连接

上面说过, TCP连接是可靠的, 保证了传送数据包的顺序, 顺序是用序号来保证的。响应包内也包含一个序号, 表示接受方准备好接受这个序号的包。在TCP传送一个数据包时, 它同时把此数据包放入重发队列中, 同时启动计数器, 若收到这个包的确认信息, 就将此包从队列中删除, 若计时超时就重发此包。

TCP在两个通信主机间建立一个逻辑的端对端的连接。建立时交换称为“握手”的控制信息, 使用的是三方握手。所谓三方握手, 是指每次发送数据前, 通信双方先进行协商, 使数据段发送和接收能够同步进行, 并建立虚拟连接。为了提供可靠的传送, TCP在发送新的数据前, 以特定顺序将包进行编号, 并要求这些包传送到目标主机后回复一个确认消息。TCP总是用来发送大量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。例如, 主机1向主机发出连接申请。首先主机1的TCP实体发送一个报文段, 其位标示SYN置1, 序号为n, 然后向主机2发送连接报文;主机收到上述报文后也同样发出一个位标示SYN置1, 同时ACK置1, 确认号置n+1的报文, 表示序号为n的报文段已收到, 此报文为应答报文, 下一个希望收到的报文序号为n+1;主机在收到这一应答报文后, 再继续发送序列号为n=1的报文。

3. TCP协议特点

1) 面向流的投递服务。应用程序之间传输的数据可视为无结构的字节流 (或位流) , 流投递服务保证收发的字节顺序完全一致。

2) 面向连接的投递服务。数据传输之前, TCP模块之间需建立连接, 其后的TCP报文在此连接基础上传输。

3) 可靠传输服务。接收方根据收到的报文中的校验和, 判断传输的正确性:如果正确, 进行应答, 否则丢弃报文。发送方如果在规定的时间内未能获得应答报文, 自动进行重传。

4) 缓冲传输。TCP模块提供强制性传输 (立即传输) 和缓冲传输两种手段。缓冲传输允许将应用程序的数据流积累到一定的体积, 形成报文, 再进行传输。

5) 全双工传输。TCP模块之间可以进行全双工的数据流交换。

6) 流量控制。TCP模块提供滑动窗口机制, 支持收发TCP模块之间的端到端流量控制。

二、UDP协议

UDP协议, 即用户数据报协议, 是一种简单的面向数据报的传输协议, 在使用UDP进行网络传输的过程中, UDP只负责数据传输, UDP不保证数据一定到达目的地;若传输出现故障, 不负责重传数据, 是否重传由应用程序控制;当数据到达后, 接收方不发送到达确认信息。UDP仅通过端口号指明发送程序端口和接收程序端口, 不保证数据一定到达目的主机。因此, 对应用层而言, UDP提供的数据传输服务称为无连接、不可靠的用户数据报服务。

1. UDP数据报格式

UDP数据报的格式由5个域组成:原端端口、目的地端口、用户数据包的长度、检查和和数据。其中, 前4个域组成UDP标题, 每个域由4个字节组成;检查和域占据2个字节, 用来检测传输过程中是否出现了错误;用户数据包的长度包括所有5个域的字节数;原端端口是可选域, 当其有意义时, 它指的是发送进程的端口, 这也就假定了在没有其他信息的情况下, 返回信息应该向什么地方发送。如果不使用它, 则在此域中填0。

2. UDP的工作机制

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方将UDP数据报通过源端口发送出去, 而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口, 而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号, 所以端口号的有效范围是从0-65535。

UDP使用报头中的校验值来保证数据安全。校验值首先在数据发送方通过特殊的算法计算得出, 在传递到接收方后, 还需要重新计算。若某个某个数据报在传输过程中受到损坏, 发送和接收方的校验计算值不会相符, 由此可检测是否出错。

3. UDP协议的特性

总的来说, UDP协议具有以下特性:

1) UDP仅负责数据报的发送和接收, 其传输过程中出现的数据报丢失、重复和顺序错乱等问题均有上层的应用程序负责解决。

2) UDP是一个无连接协议, 传输数据之前原端和目的端不连接, 当它想传送时就简单地去抓取来自应用程序的数据, 并尽可能快的把它扔到网上。在发送端, UDP传送数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接受端, UDP把每个报文段放在队列中, 应用程序每次从队列中读一个报文段。

3) 由于传输数据不连接, 也就不需要维护连接状态, 因此, 一台服务器可同时向多个客户机传输相同报文。

4) UDP数据包标题很短, 有8个字节, 而TCP有20字节, 数据包额外开销小。

5) 吞吐量不受拥挤控制算法调节, 只受应用软件生成数据速率、传输带宽、原端目的端主机性能的限制。

三、动态选择TCP、UDP的方法

由于TCP、UCP协议各有优缺点, 于是便产生了一种动态选择TCP、UDP协议的方法。这种动态选择TCP-UDP的方法有两方面优点:首先, 对于需要比较少数据传输的情况, 它将使用UDP作为传输层的协议, 避免了TCP链接的多次握手开销;另外, 对于需要较多数据传输的情况, 它将使用可靠的带有重排序和拥塞控制的TCP协议作为传输层的协议。动态选择TCP-UDP的实现方法只需要对应用层的改动, 而操作系统的核心代码不用任何更改。

动态选择TCP-UDP协议的实现

客户端首先尝试使用UDP作为传输协议, 如果对于所请求的URLUDP并不适合, 则再次使用TCP链接。这种方法提供了以下保证: (1) 如果初始的UDP数据包丢失, 将采用TCP重新链接而不会受到影响。 (2) 如果所链接的服务器没有使用动态选择传输层的实现机制, 客户端将使用TCP重新进行链接。

上图给出了动态选择TCP、UDP的实现算法。一个采用此算法的HTTP客户端首先使用UDP作为传输层的协议发出HTTPGET请求, 同时启动超时定时器。当服务器处理客户端发来的请求时, 它可以从以下两点做出选择: (1) 如果响应的数据足够小, 服务器将使用UDP出响应。像比较小的网页或HTTPREDIRECT响应就属于这一类。 (2) 如果响应的数据很大, 无法放进一个UDP数据包中, 服务器则要求客户端使用TCP重试。这可以通过添加一个HTTP的头部字段来解决, 如TCPRETR。

在客户端, 将会出现三种情况: (1) 客户端从服务器接收到响应。如果响应中包含了所需HTTP响应, 客户端将对数据进行处理。如果服务器要求客户端重试, 客户端将使用TCP作为传输层重试。 (2) 如果服务器没有处理通过UDP传输的HTTP包, 客户端就会收到ICMP错误消息 (目的地址无法到达/协议无法到达) 。此时客户端将会使用TCP重试。

(3) 如果定时器超时, 客户端应使用TCP重试。

上图给出了在定时器超时情况下, 客户端和服务器间数据包的交换。这种超时机制提供了可靠性, 及与未使用混合TCP-UDP方法的服务器的兼容性。

上图示意了服务器要求客户端使用TCP重发请求时, 客户端和服务器之间的数据交换。

四、总结

很明显, 当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时, TCP协议是当然的选择。当强调传输性能而不是传输的完整性时, 如:音频和多媒体应用, UDP是最好的选择。当网络延迟大, 带宽窄, 性能不佳时, 动态选择UDP-TCP传输协议亦是一个不错的选择。

摘要:本文描述了TCP协议、UDP协议及其混合协议的机制及其特点, 分析了三种机制的不同的适用环境, 对于网络传输协议的选择具有一定的指导作用。

关键词:TCP,UDP,混合TCP-UDP

参考文献

[1]计算机网络及应用马志峰主编上海科学普及出版社

[2]计算机网络伍孝金主编清华大学出版社

上一篇:静脉注射室下一篇:上课前导入