前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的tcp协议主题范文,仅供参考,欢迎阅读并收藏。
中图分类号:TP393 文献标识码: A 文章编号:1009-3044(2007)15-30682-01
Security Problems Study in the TCP/IP Protocol
LI Bei
(The Information Management Department,University of Qinghai Finance and Economics College, Xining 810001, China)
Abstract:The TCP/IP protocol use very extensive now, but it oneself also have the some the blemish on the safety.I described every kind of each kind aims at the attack of these blemishses, including the preface row number attack, SYN Flood attack.Put forward the defense method that some to these attackstone.
Key words:TCP protocol;Network security;Protocol attack;Protocol security.
1 引言
TCP协议现在用得非常广泛,但除了对它不正确使用造成不安全因素外,它本身也有一些安全上的缺陷。一些缺陷
是由于主机使用IP源地址作为认证机制引起的;Berkeley 的r系列调用就是一个明显的例子。其它的一些缺陷是由于网络控制机制,特别是路由协议,缺少认证机制引起的。
描述这些攻击的前提是攻击者或多或少控制了某些连在互联网上的机器。被控制的机器有的是因为本身有漏洞,有的是自身没有保护机制的个人电脑。也有可能攻击者是一个系统管理员。
我不讨论协议具体应用上的漏洞,比如被互联网“蠕虫”利用的漏洞。讨论的是协议本身的问题。只要小心地使用这些协议,有些问题是可以避免的;我也不讨论经典的网络攻击,比如切断物理线路,篡改或插入消息,而主要讨论的是仅仅由于协议本身引起的问题。
本文所讨论的协议是Berkeley(早期的TCP/IP协议)协议,因为它实际上已成为大部分厂商的标准,而不仅仅是UNIX系统。
2 TCP序列号预测攻击
TCP序列号预测攻击最早是1985年由Robort.Morris对这一安全漏洞进行阐述的。他使用TCP序列号预测,即使是没有从服务器得到任何响应, 来产生一个TCP包序列。这使得他能欺骗在本地网络上的主机。
2.1 攻击方法
TCP协议有一个非常令人着迷的漏洞,简单的说,就是通过预测初始序列号来伪造TCP包,并且不需要得到回应。这样就可以使攻击者伪装成一台和服务器在同一个局域网上的一台可信任的机器。
通常建立TCP连接需要三次握手。客户机送一个初始序列号ISNc,服务器应答它并送出它自己的序列号ISNs,客户机再发出一个应答包。这三个数据包发送以后,就可以传输数据了。这个
过程可以用下图来表示:
C->S:SYN(ISNc)
S->C:SYN(ISNs),ACK(ISNc)
C->S:ACK(ISNs)
C->S:data
and/or
S->C:data
这就是说,要使一个连接建立起来,C必须知道ISNs,这个数多少有一些随机性。
假设入侵者X有一种方法可以预测ISNs。在这种情况下,他可以通过以下的步骤来模仿可信任的主机T:
X->S:SYN(ISNx),SRC=T
S->T:SYN(ISNs),ACK(ISNx)
X->S:ACK(ISNs),SRC=T
X->S:ACK(ISNs),SRC=T,nasty-data
即使S->T的数据包不经过X,X也能知道它的内容,因此能发送数据。如果X在一个能够执行命令的连接上实行这种攻击(例如,Berkeley rsh 服务),他就可以运行一些恶意的命令。
那么怎样预测随机的ISN呢?在Berkeley系统中,初始序列号变量是以每秒固定的数目递增的,而每次连接的序列号就是这个变量的一半。因此,如果有人通过合法的连接观察ISNs,他就有很大的机会通过计算得到下一次连接的ISNs。应该指出的是服务器的应答消息
S->T:SYN(ISNs),ACK(ISNx)
并没有消除这种攻击;虽然真正的T主机将接收到它,并且会重设连接。这并不是一个严重的障碍,因为我们可以通过一些拒绝服务的攻击使T主机暂时失效,也可以在T主机关机或重起的时候攻击。
还有一种通过netstat服务对TCP序列号进行的攻击。在这种攻击中,入侵者模仿一台关闭的主机。如果在目标机上有netstat服务,它就会提供另一个端口必要的序列号信息;这样就根本不需要猜测了。
2.2 防御
很明显,这种攻击的关键是Berkeley系统中初始序列号变量变化方式太简单了。TCP标准要求这个变量必须以每秒钟将近250,000的速度增长;Berkerey系统则使用了一个比它慢得多的速度。然而关键的因素是间隔的大小而不是平均速度。从4.2BSD系统的每秒增加128到4.3BSD的每秒增加125,000的改变是没有意义的。
下面让我们来看看以250,000的频率运行是否有用。为了简单起见,我忽略了其它连接产生的问题,仅仅考虑本计数器固定速度的改变:
为了知道当前的序列号,必须发送一个SYN包,并接收它的回应,如下:
X->S:SYN(ISNx)
(上接第682页)
S->X:SYN(ISNs),ACK(ISNx) (1)
第一个使服务器产生下一序列号的伪造的数据包,可以紧跟在服务器对探测包的回应后送出:
X->S:SYN(ISNx),SRC=T (2)
序列号ISNs在应答中使用
S->T:SYN(ISNs),ACK(ISNx)
它是由数据包(1)产生到服务器接收到数据包(1)之间的时间唯一确定的。但是这个时间是由X到S的来回时间确定的。因此如果攻击者能够测量或预测到这个时间,即使使用一个能精确的4μ秒的时钟也不能阻止这种攻击。
对来回时间的测量能精确到什么程度呢?如果假设网络很稳定,我们可以精确到10毫秒左右。很明显,互联网不可能长期这么稳定,但是却有可能在一个较短的时间内稳定。因此我们有2500个ISNs的可能值。考虑到重新测量来回时间所需的时间,我们假设每次尝试需要化5秒,那么一个攻击者很可能在7500秒内获得成功。条件更好的网络或更精确的测量,能够提高成功的可能性。因此,仅仅是按TCP协议标准是不行的。
在这里,我们默认的假设是目标机上不运行任何进程。实际上,当新的请求到达时,是会运行一些进程的。在一个6MIPS的机器上,一个时钟周期-4μ秒-大约可执行25条指令。高优先级的中断,TCB分配顺序的不同,都对下一个序列号有相当大影响。这种随机的效果是被认为是主机的优点。必须注意的是,越快的主机越容易攻击,这是由于它执行指令的时间会减少,因此对初始序列号增加的影响也会减少。当然,CPU的速度增加是很快的。
另一个对付序列号攻击的方法是:随机的增加初始序列号变量。必须要全部位都是随机的,如果假设只有低8位是随机的,那么增加的间隔也是容易猜测的。我们应该结合使用好的间隔增量和一个小的随机数发生器或使用一个32位随机数发生器。注意,有很多假的随机数产生器是很容易倒转的。实际上,假设大部分这种产生器是通过它的输出的反馈来工作的,入侵者就可以通过简单的计算来得到下一个随机数。有些技术使用32位发生器,但仅仅使用它的16位,用穷举攻击法就可以得到它的结果。我们必须最少把随机数的16用在每一次增加中,以使网络探测失效,但是用于防御搜索结果的位就太少了。要通过更多的研究和仿真来决定合适的参数。
与其用这么大的数,不如对ISNs加密。数据加密标准算法(DES)加上一个简单的计数器是一个很好的选择。也可以在输出反馈模式使用DES而不要计数器。不管用哪一种方法,都必须小心的选择密匙。在当今使用开机时间是不行的,入侵者能够取得足够多的关于开机时间的信息,从而实现穷举攻击。但是如果开机时间用密匙加密后,随机数产生器就很难破解了。初始序列号产生器的性能是没问题的。每一次连接只需要产生一个初始序列号,即使使用软件来实DES加密也足够了。
还有一些防御措施包括做好日志和报警系统。测量来回时间通常是用ICMP报文来实现的,我们可以记录超常的ping请求。也可以记录短时间的、不完全的tcp连接请求。同样,伪装一台活动的主机会产生异常的RST包,这些都应该被记录下来。
3 SYN Floods攻击
3.1 什么是SYN Floods攻击
SYN Floods攻击是以TCP/IP协议的三次握手为基础的,所以要了解SYN Floods攻击,必须了解TCP/IP协议的三次握手,这在前面已经介绍过了。
SYN Floods攻击就是通过一些工具如SYN Flooders或通过raw socket编程向目标机发送一些源地址不存在的SYN数据包,目标机收到这些数据包后就会发出应答并等待回应,然而由于源地址的主机不存在,所以目标机因得不到回应而一直等待,直到超时。如果有人向目标机发送大量这样的数据包,目标机就会因为接收连接的队列填满而不再接受连接请求,这样目标机就暂时失效了,因此SYN Floods攻击是一种拒绝服务的攻击。大部分这种攻击只是使服务器不再接受连接而不影响已经建立起来的连接;但在有些情况下,会使系统内存不足而导致系统崩溃。这种攻击比较难以预防,因为当三次握手的第一个SYN数据包到来的时候,没有办法知道它的源地址是真的还是伪造的。
3.2 解决方法
有两种方法可以缓解或禁止这种攻击。第一种是SYN Storm Modifications,另一种是SYN Cookies。
SYN Storm Modifications(也叫Adaptive Time-Outs):
这种方法是通过稍微修改算法以使TCP连接请求队列中能容纳更多的TCP连接请求(可以有成千上万个连接请求)。通过修改算法,就能够缓解或阻止这种攻击。这种修改已被应用在Unix 环境中(SunOS,FreeBSD,OpenBSD 和 NetBSD),不过就我所知,微软还没有采用这种技术。
SYN Cookies:
这种技术通过在TCP包头中的特定字段抽出一个秘密数字,SYN Floods 攻击几乎能被防止。这个抽出的数字必须包含包头其它部分的索引。把这个信息用不可逆算法加密,并把它作为应答包头的一部分。当有一个ACK包到达时,把包头中的加密字与服务器上的作比较,如果相同就建立连接,不同就把这个包丢弃,并且三次握手没有完成。用这种方法,服务器不需要等,因此SYN Floods攻击被禁止了。
4 总结
以上介绍了由于TCP协议本身缺陷所引起的两种攻击及其防御对策,在这两种防御对策中,都用到了加密技术。加密技术对网络安全是非常重要的,因为系统的漏洞是不可避免的,因此没有绝对安全的系统。而加密技术可以使你的系统在被入侵后,把损失减到最小。从本文可以也可以看出,加密技术对预防攻击也是很有效的。
参考文献:
[1] HILL G R,et al.Ptransport network layer based on optical network elements[J].LightwaveTechnol.,1998,11:887-879.
[2] D.S.Siyan,P>Rybaczyk,Ware 实现网际互联[M].清华大学出版社,1998.
关键词:Socket通信机制 TCP协议 开发原理
中图分类号:TP393 文献标识码:A 文章编号:1007-3973(2012)008-081-02
1 TCP,SOCKET简介
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
Socket:即“套接字”,描述IP地址和端口,是通信链的句柄。在Internet上的主机一般运行了多个服务软件,提供几种服务。每种服务都会打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
2 基于TCP协议程序的简单样例
了解客户端,服务器,开发原理,开发流程。
客户端:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。
服务器:服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。
开发原理:
服务器,使用ServerSocket,监听指定的端口,端口可以随意指定(建议使用大于1024的端口),等待客户端得连接,客户端连接后,产生会话;在会话完成之后,关闭连接。
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,就打开会话;会话完成后,关闭Socket。客户端不用指定打开端口,经常是临时的分配一个1024以上的端口。
基于TCP的SOCKET流程如下:
(1)客户端的编程流程:
打开Socket,创建一个SOCKET;
为套接字建立一个输入inputstream,和输出流outputstream;
根据服务器协议(这里是TCP协议)从套接字读入或向套接字写入;
关闭SOCKET:清除套接字和输入/输出流;
(2)服务器端的编程流程:
打开Server Socket,新建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端口为客户端请求的Socket服务;
使用ServerSocket类的accept()方法,使套接字处于监听状态,并且把监听结果返回给普通套接字;
为该普通套接字创建输入和输出流;
从输入和输出流中读入或写入字节流,进行相应的处理,并将结果返回给客户端(这里的例子是判断是奇数还是偶数)。
样例详细说明:
客户端发送一个数字,交给服务器判断是偶数还是奇数,将结果返回给客户端。
主要代码
客户端主要函数
Init()初始化socket,获取IutputStream以及OutputStream;
private static void init(){
try
{
socket = new Socket(HOST,PORT);
is = socket.getInputStream();
os = socket.getOutputStream();
}
catch (Exception e){...}
}
Send()函数,向服务器发送数据
private static void send(byte[ ] data){
try
{
os.write(data);
}
catch(Exception e){...}
}
Receive()函数,获取服务器返回的信息
private static byte[ ] receive(){
byte[ ] b = new byte[1024];
try
{
int n = is.read(b);
byte[ ] data = new byte[n];
System.arraycopy(b, 0, data, 0, n);
return data;
}
catch (Exception e){...}
return null;
}
Close()函数,关闭socket连接
private static void close(){
try{
is.close();
os.close();
socket.close();
}catch(Exception e){...}
}
服务器主要函数:
Init(),send(),receive(),close()函数同客户端
Logic()函数,处理收到的数字,判断奇偶
private Boolean logic(byte[ ] data)
{
String s=new String(data);
System.out.println("logic");
int t=Integer.valueOf(s);
if(t%2==1)
return true;
return false;
}
调用流程
服务器init()->客户端init()->客户端send()->服务器receive()->服务器logic()->服务器send()->客户端receive().
参考文献:
目前最完成,最被大众接受的通信协议标准就是TCP/IP协议。它的存在能使不相同的硬件结构,操作系统的计算机互相通信。在20世纪60年代末,美国政府出资近资助了一个分组(包)交换网络研究项目ARPAnet,这就是TCP/IP的最初样貌。最初ARPAnet使用的是租用的以点对点为主的通信线路,在后面当通信网和卫星通信系统发展起来之后,它最初开发的网络协议在通信可靠性较差的通信子网络中产生了很多问题,为了解决这些问题,TCP/IP协议就应运而生。作为一个开放的协议,有很多不同的厂家生产了很多型号的计算机,他们各自有完全不同的操作系统,但是在TCP/IP协议组件下,他们能进行通信。在如今的社会,TCP/IP已经成为一个由成千上万的计算机和其使用者组成的全球化网络,此时的ARPAnet也就顺理成章的变成了Internet。TCP/IP是Internet的基础。TCP/IP协议是以套件的形式推出的,在这个套件中包括有一组互相补充、互相配合的协议。在TCP/IP协议族中就包含有IP(互联网协议)、TCP(传输控制协议)和其他协议,在网络通讯中,只有这些协议相互配合,才能实现网络上的信息传输。IP和TCP的组合不仅仅只是表示两个协议,还指整个协议套件,TCP和IP只是作为其中最主要的两个协议,读者应该更好省核此术语的真正含义。TCP/IP协议如果在严格上来说只是人们习惯的说法,更为专业的说法应该称其为Internet协议。同时在国际上,TCP/IP协议也不是ITU-T或OSI的标准,但是它作为一种事实的标准被执行着,并且完全独立于任何硬件或者软件厂商,可以运行在不同体系的计算机上。它采用通用的寻址方案,通过寻址的方法,一个系统能访问到任何其他系统,就算在Internet这样庞大的全球性网络内,寻址的运行也可以说是游刃有余。不管是局域网,还是广域网,TCP/IP都是其中的最大协议最广的使用协议。
二管理TCP/IP的组织机构
Internet因为其开放性,所以不受任何政府部门或者组织所拥有和控制,因此没有统一的管理机构,但是还有非营利机构管理其标准化过程。这些机构承担Internet的管理职责,建立和完善TCP/IP和相关协议标准。与TCP/IP协议相关的组织机构简介如下:
1ISOCISOC为Internet的国际化提供支持、并且是一个非营利性的组织,同时也作为上级组织管理所有Internet委员会及任务组。
2IABIAB是ISOC的技术顾问,主要负责处理Internet技术,协议和研究。
3IETF与IESGIETF制定草案,提出建议,维护Internet标准都是其负责的。IESG在Internet制定标准以及IETF的各项活动中负责。
4IRTF与IRSGIRTF,在Internet发展中所遇到的技术问题,并且处理与TCP/IP相关的协议和一般体系结构研究活动。IRSG则是作为IRTF的指导小组,指导其工作。
关键词 计算机网络教学;TCP协议;NS2;确认机制;拥塞控制
中图分类号:TP393.01 文献标识码:A 文章编号:1671-489X(2012)03-0013-03
Research on Application of NS2 in TCP Protocol Teaching//Wang Xiaofeng, Mao Li
Abstract TCP is one of the most important protocols of computer networks, but as its implementation mechanisms are complex, the TCP teaching has become a difficult point in computer network teaching. The TCP teaching demonstration based on NS2 is presented, which can analyze and demonstrate the TCP protocol’s key implementation mechanisms, such as connection establishment, acknowledgement scheme and congestion control etc., and thus can improve teaching effectiveness.
Key words computer network teaching; TCP protocol; NS2; acknowledgement scheme; congestion control
Author’s address School of Internet of Things Engineering, Jiangnan University, Wuxi, Jiangsu, China 214122
1 引言
Internet作为20世纪人类最伟大的发明之一,已经深入人类社会的各个方面。当前,以Internet为代表的计算机网络技术得到飞速发展,计算机网络课程已逐渐成为高校计算机相关专业的一门专业基础课。计算机网络教学涉及大量复杂的网络协议,尤其是作为Internet核心协议之一的TCP协议。为实现在不可靠的IP协议上的可靠数据交付,TCP协议包含了大量复杂的机制[1],这使得初学者感到抽象难懂,因此,TCP协议成为计算机网络教学的一个难点。
为提升学生对TCP协议的直观认识,增强学习的兴趣与效果,可搭建由物理网络设备组成的网络实验平台,但这花费成本高、运用不便。鉴于当前网络模拟技术已得到广泛研究,各种成熟的网络模拟工具层出不穷,通过现有网络模拟软件,构建虚拟的TCP协议模拟与仿真教学环境,不仅可以增强学生对TCP协议复杂机理的直观理解,提高学习的兴趣与效率,而且可以为教师提供有力的TCP协议教学辅助工具。本文基于经典NS2网络模拟软件,提出TCP协议关键实现机理(包括连接建立、确认机制以及拥塞控制等)的分析和演示教学方法。
2 网络模拟器简介
2.1 网络模拟技术介绍
在众多研究计算机网络的方法中,由于网络模拟技术具有成本低,实现简单,使用方便,并能用于研究尚未实施的网络机制等优点,因此被广泛应用于网络研究的每一个角落,各种网络模拟器也层出不穷[2]。当前网络模拟器一般都基于离散事件模拟技术实现。所谓离散事件模拟,就是模拟系统的状态变化在离散模拟时间点上发生,事件的发生使得模拟系统从一个状态跳转到另一个状态。离散事件网络模拟技术则针对数据包的每一跳转发都依靠离散事件来刻画。下面介绍当前比较经典的网络模拟器。
1)NS2[3]。NS2(Network Simulator 2)是一个单机多协议离散事件网络模拟工具,由USI/ISI、Xerox PARC、LBNL和UC Berkeley等美国大学和实验室合作,在DARPA资助的VINT工程研究中实现的模拟工具。NS2有很多特点,比如具有开放的体系结构;可扩展、易配置和可编程的事件驱动模拟引擎;带有大量协议库的支持,尤其适合于对基于TCP/IP的网络进行模拟;支持大规模多协议网络模拟;提供开放的用户接口、可视化工具:可动画显示网络模拟过程,图形显示数据结果等。NS2是一个完全免费的软件,在国际上享有很高的学术声誉,被世界各国的网络研究者广泛使用。
2)OPNET。OPNET是美国OPNET Technologies Ins公司的产品,是一个单机的、基于离散事件驱动的网络模拟器。OPNET的特点包括:支持面向对象的建模方式,并提供图形化的编辑界面;提供各种通信网络和信息系统的结构化模拟模块;具有完善的结果分析器,为网络性能的分析提供有效而直观的工具;具有支持各种业务的模型等。目前OPNET是公认的优秀通信网络、通信设施、通信协议的模拟与建模工具,在全球的通信、电讯、网络及国防科技产业上已经被普遍采用并受到好评。但是由于是收费的商业软件,限制了其在研究领域的广泛应用。
3)SSF[4]。SSF(Scalable Simulation Framework)是一组用来描述离散事件模拟的应用程序接口,它采用DML(Domain Modeling Language)语言来描述网络模拟应用。SSF具有面向对象、简洁、功能强大等特点,此外,它支持高性能并行网络模拟并且在不同的计算环境之间具有可移植性。SSF有好几个实现版本,包括SSFNet、iSSF(即DaSSF)等。SSFNet采用JAVA实现,是DARPA支持的项目S3(Scalable Self-organizing Simulations)中的一部分,主要支持IP包级别上的细粒度模拟,链路层和物理层的协议模型以独立的组件方式提供。DaSSF采用C++实现,由达特茅斯学院开发,目前被设计为能够基于MPI运行在分布式内存并行计算机上。
2.2 NS2网络模拟器
从上述分析看出,NS2是一款非常优秀的开源软件,并且提供开放的用户接口以及提供模拟过程的动画演示及模拟结果的图形显示,因此非常适合于计算机网络教学。本文基于NS2实现TCP协议教学演示。下面是基于NS2的网络模拟基本步骤分析。
1)基于Otcl脚本语言设置模拟网络的拓扑结构以及链路的基本特性。
2)基于Otcl脚本语言设置协议,包括协议绑定和建立通信业务量模型。
3)设置trace对象、NAM对象等。依靠trace以及NAM可以记录网络模拟过程中所产生的各种数据。
4)其他的辅助命令的设置,如设定模拟结束时间、各种通信业务量的起止时间等。
5)对1~4步编写的Otcl脚本用NS2解释执行,并形成trace、NAM文件记录。
6)分析trace文件,得出实验所需数据;或分析NAM文件,动画演示网络模拟运行的整个过程。
7)对配置拓扑结构和通信业务量模型进行调整,并重复进行上述模拟过程,直至模拟效果满意为止。
3 NS2在TCP协议教学中的实例
3.1 模拟应用设置
基于NS2模拟器,设置所模拟的网络拓扑如图1所示,共有6个网络节点,并将Router(0)与Router(1)之间的链路设为瓶颈链路。Host(0)与Server(0)之间进行UDP数据流的传输,这作为背景流量;Host(1)与Server(1)之间进行TCP数据流的传输,这作为TCP协议教学的示范应用。设定模拟时间为5秒,其中UDP数据流持续时间为2.5~5.0秒,TCP数据流持续时间为0.1~5.0秒。模拟应用设置的关键TCL脚本代码如图2所示。
3.2 模拟结果分析与演示
在模拟过程中开启NS2的trace记录、NAM记录以及Queue Monitoring记录,并进行相应分析与演示。
1)TCP连接建立的分析与演示。图3中显示了关键的trace记录,为了能够便于分析,做了一些精简(trace记录中每一跳数据包转发记录仅保留enque记录,删除deque记录以及接收记录)。依靠图中第1行~第7行、第9行与第11行,可以演示TCP建立连接的3次握手过程。其中第1~3行表明3次握手中的第一个报文,经过三跳数据包转发到达目的节点,4~6行表明3次握手中的第二个报文,上述2个报文不涉及数据的传递,报文字节长度为40。第7、9、11行为3次握手中的第三个报文,该报文采用捎带应答,伴随数据传送一并进行,其字节长度为1 040。
2)TCP确认机制的分析与演示。TCP的可靠传输依靠确认机制实现,以图3中第7~17行、第20行为例,可以演示TCP的确认机制。其中第7~12行,TCP的发送方连续发出2个长度为1 040字节的报文(标号分别为2与3),这两个报文分别经过三跳数据包转发到达目的节点;第13行与第14行分别表明,当目的节点分别收到标号为2与3的报文后,发出ACK报文4与5进行确认。
依靠NAM记录,生成相应的NAM动画,如图4所示,可以比较分析有确认机制的TCP协议以及无确认机制的UDP协议的区别,加深学生对确认机制的印象和理解。当NAM动画演示的模拟时间推进到2.5秒之后,同时出现UDP数据流以及TCP数据流,如图4所示,可以演示出UDP数据流仅是从Host(0)到Server(0)的单向传输;而TCP数据流不仅包括从Host(1)到Server(1)方向的数据传输,还包括从Server(1)到Host(1)方向的确认报文传输。
3)TCP拥塞控制的分析与演示。依靠Queue Monitoring对Host(1)与Router(0)间的链路进行记录并进行相应处理,获得整个模拟过程中TCP数据流的发送速率,如图5所示,依靠该图演示TCP的拥塞控制过程。在0.1秒,Host(1)开始发送TCP数据流,流量大小逐渐上升,到0.3秒流量达到最大值,这个过程可以演示为TCP协议的慢开始阶段。在0.3秒,TCP流量瞬时发送速率达3.66 Mb/s,远超过Router(0)与Router(1)之间的链路带宽2 Mb/s,因此出现网络拥塞,于是TCP协议执行拥塞避免的“乘法减小”策略,在0.35秒,TCP流量瞬时发送速率减为2.16 Mb/s,在随后的过程中,TCP流量发送速率基本维持在2.00 Mb/s。
从2.5秒开始,Host(0)开始发送UDP数据流,并与TCP数据流争用瓶颈链路带宽,这使得网络频繁出现拥塞,TCP协议执行“乘法减小”策略,拥塞窗口多次减少,导致TCP流量发送速率从2.55秒的2.00 Mb/s逐渐减为2.95秒的0 b/s,随后TCP协议继续进行慢开始过程,流量大小逐渐增大,直到再次探测到出现网络拥塞。
4 结论
本文基于网络模拟软件NS2,编写用于TCP协议教学的TCL脚本,并通过NS2的trace记录、NAM记录以及Queue Monitoring记录工具,实现对TCP协议连接建立、确认机制以及拥塞控制等机理的演示教学。通过在TCP协议教学中使用网络模拟软件NS2,能让学生更加轻松地学习网络理论知识,提升学生的钻研兴趣,并取得良好的教学效果。在以后的教学工作中,拟在计算机网络实验环节让学生自己动手编写计算机网络协议模拟代码,进一步提升学生的能动性,培养创新思维。
参考文献
[1]谢希仁.计算机网络[M].5版.北京:电子工业出版社,2008:180-220.
[2]王晓锋.提高大规模离散事件网络模拟性能方法的研究[D].哈尔滨:哈尔滨工业大学,2007:4-10.
关键词:TCP/IP 温度监测 Arduino LabView
中图分类号:TP2 文献标识码:A 文章编号:1007-9416(2015)09-0000-00
现场总线系统是一种传统的双向数字的通信标准,广泛应用于自动控制领域和生产过程中,但是由于现场总线的种类繁多,且各标准间的相互兼容性不强,加上各厂商和标准制订组织之间存在利益竞争,各种现场总线技术无法实现无缝连接,也无法将生产现场的监控数据共享给企业的信息管理系统,而将以太网技术引入到工业控制领域,将监控数据进行标准的TCP/IP封装,将能很好的解决不同生产设备间的高速连接问题和设备的“自动化孤岛”问题,最终将生产自动化和办公自动化无缝对接,实现“一网到底”[1]。工业以太网是指在工业环境的自动化控制及过程控制中应用的相关组件及技术,工业以太网多采用TCP/IP协议,和IEEE802.3标准兼容。温度是生产过程中重要的物理参数之一,在工业生产过程中经常要用到温度的检测及控制,本文对基于TCP/IP网络的远程温度检测系统进行了设计,给出了基于TCP/IP以太网的远程温度监测方案。
1 系统结构
1.1系统物理结构
使用标准的TCP/IP协议实现现场层与监控层的数据传输,其中现场层通过连接厂内的传感器,实时获取各种信息通过以太网络传送至监控层,这一层主要由低功耗运行稳定的嵌入式实现;监控层主要是通过以太网络连接厂内的现场层的各个数据采集点,将这些信息数据备份,存储至监控系统的数据库,并在温度超过警示值时发出警报。本系统完成了下位机数据采集与上位机数据监测的功能,物理结构图如图1所示。
图1 系统物理结构图
1.2 系统逻辑结构
本系统的温度信息由数据采集结点通过以太网发送到监控层计算机,并将历史数据存储致数据库服务器,企业的办公网络和外网用户可通核心路由器访问数据库,系统的数据在各层中的流向如图2所示。
图2 系统逻辑结构
2 数据采集与发送端
2.1数字温度采集点设计
K型热电偶可以测量固体介质和汽液体蒸气的表面温度,其测量范从0℃到1300℃[2]。具有很高的灵敏度和很好的稳定性,非线性误差小,热电动势较大,对于复杂环境下的工业环境有很好的适应性等优点,因此,在工业监控领域得到广泛的使用。但是,由于其输出热电势与冷端温度相关,输出的数据为模拟量,且与被测量端的温度有关,因此需要进行温度补偿和模数转换。如果采用软件补偿的方法,一方面会增加程序编制及调试电路的难度,另一方面,软件补偿会占用一定的数字结点的计算资源,而以太网使用了CSMA/CD,会产生数据传送过程中的不确定性,影响精度。所以,本系统采用了使用硬件进行温度补偿的方案,采用MAX6675串行模数转换器对采集的数据进行处理,在进行温度补偿的同时,也提供了信号量为12位分辨率的模数转换,加强了与控制器数据通信的兼容性[3]。
嵌入式控制器采用Arduino开源硬件平台,它使用AtmelAVR单片机为核心处理器,采用基于开放源代码的软硬件平台,由于其功耗低、稳定性强、开发周期短等特点,目前被广泛应用于各个领域,越来越多的工程师选用Arduino平台进行项目开发,截止到现在,Arduino开发团队已开发出多种控制器。考虑到系统部署后期可能有更多数据采集点的加入,本系统选用的是以Atmega2560核心的ArduinoMega2560控制板(以下简称Mega2560),相对于普通的Arduino Uno,Meg2560可用的数字输入输出口多达到54个,插接传感器扩展模块后的数字I/O可以达到100多个,给系统的升级与扩展带来极大的便利。
硬件连线如图3所示,将K型热电偶连接至MAX6675的接线座上,确保正负两极连接无误。分别将MAX6675对应用的电源、地线、SO、CS、SCK端连接至控制器 Mega256上的5V、GNU、数字口5、6、7。
图3 控制器与MAX675连线图
2.2以太网通信模块
由于Mega2560无法直接连接到以太网络,需要采用包含以太网的Ethernet模块来实现,本文选用的是集成WIZnetW5100网络芯片的扩展模块。W5100 是一款高集成度的网络通信芯片,全硬件实现标准的TCP/IP 协议栈、以太网介质传输层(MAC)和物理层(PHY),具备了高稳定、高性能和低功耗的特点,其数据传输速率最高可达100Mbps,由于TCP/IP协议均在商用与民用领域经过了多年的应用和长足的发展,相关技术已经十分成熟,资源丰富,极大的缩短了上位机与下位机程序的开发周期。
根据Mega2560的接口特点,本系统采了采用SPI总线方式与嵌入式控制器进行通信,与Ethernet模块连接如图4所示,其接口功能描述为SS:使能信号;SCLK:时钟信号;MOSI:数据发送;MISO:数据接收。
图4 SPI总线连接图
由于Arduino系列的控制器均采用了相互兼容的可堆叠的标准化设计,Ethernet可以直接插接到Mega2560上不作任何配置,即可进行通信。W5100 内部用于数据传输的缓冲存储器容量有 16KB,完全能够满足温度监控数据的本地缓存,使用W5100不需要考虑以太网底层的控制,采用常规的网络编程方法即可实现与W5100的以太网通信。通过Mega256引脚图(图5)[3]可知,插接了Ethernet模块后,SPI总线会占用Mega2560控制器的50~53号引脚,因此在使用的时候要注意避开。
图5 Arduino Mega2560引脚图
3 软件设计
3.1 温度采集点软件设计
在以太网传输中,常用的传输控制协议(TCP)和用户数据报协议(UDP)均可以完成下位机到上位机的数据传输,但TCP是基于连接的可靠传输协议,能进行错误监测,鉴于工业现场对于数据可靠性的要求,所以本文的软件设计中并未采用传输性能较高的UDP协议。因为,在办公网络中一个数据包的丢失可能是无关紧要的,但在工业现场监控中,带来的影响可能是巨大的。在Arduino标准库中包含了Ethernet和SPI通信所需要的类与函数,在编写程序的时候需要包含Ethernet.h、SPI.h和MAX6675.h这三个头文件。下面是Arduino控制器的程序代码。
#include “MAX6675.h”
#include “Ethernet.h”
#include “SPI.h”
MAX6675 mySenor(5,6,7); //定义MAX6675类型的传感器对象mySenor
EthernetServer server(8000); //创建一个服务器对象,并设置网络传送端口为8000
Byte mac[]={0XDE,0XAD,0XBE,0XEF,0XEF,0XFE,0XED};//设置Ethernet模块MAC地址
IPAdress ip{192.168.1.110}; //设置Ethernet模块IP地址
void setup(){ //初始化各功能模块
Serial.begin(9600); //设置串口波特率
mySenor.setOffset(0);
Ethernet.begin(mac,ip);
Server.begin();
}
void loop() //控制器循环操作
{
float sendData=0;
sendData=mySenor.getCelsius(); //从传感器对象读取温度数据
server.print(sendData); //通过网络发送数据
Serial.println(sendData); //向串口发送数据,用于监控调试
delay(500); //设置延时
}
3.2 监控层软件设计
在工业现场的温度监测中,不仅要完成实时温度数据的监测同时也需要将生成的历史数据进行分析,使用计算机丰富的计算资源以弥补嵌入式控制器的不足,使用虚拟仪器是一很好的选择,虚拟仪器是将计算机和仪器技术接合的结晶[4],同样也是测试技术和计算机深层次结合的产物,它具有数据采集与信号分析的功能,本文的监控层软件设计采用了美国国家仪器公司(NI)设计的LabVIEW平台,LabVIEW的系统的组成[2]如图6所示。
图6 LabVIEW系统组成
LabVIEW采用图形化的G语言进行编程,设置TCP连接地址为下位机的IP地址为192.168.110,通信端口为8000,超时设置为60000毫秒,通过波形控件提供历史温度显示,温度显示控件显示实时温度,监控层的上位机程序代码如图7所示。
图7 上位机程序框图
4 结语
经测试,本系统能准确的对工业现场的实时温度进行显示和历史数据的显示,如图8所示,可得知当前温度为200摄氏度,而在过去的500分钟历史记录中发现系统出现了10次超过温度警戒值800摄氏度的记录。该设计充分利用了TCP/IP技术实现了对工业生产过程的监控,进一步提高了各项监督工业,有助于现场工程师及时采取应急处理等业务操作,需要注意的是以太网技术带来的高数据高实时的同时,也产生了一些网络安全问题,对于这一问题可通过网关采取包过滤的方法将内部控制网络与外部网络系统分开[5]。综上所述,随着以太网技术在工业现场中的逐步推广和应用,使生产现场数据与企业信息系统实现无缝对接,在即将到来的第四次工业革命中,全面实现“数字化工厂”这一宏伟目标[6]。
图8 LabVIEW程序运行效果图
参考文献
[1]徐皑冬.工业以太网实时通信技术[J].信息与控制,2005,34(1):60-64.
[2]沈金鑫,Arduino与LabVIEW开发实战[M].北京:机械工业出版社,2014:182―187.
[3]开源硬件知识库[OL].[2014-10-21]. http:///
[4]余成,谢东坡.网络化测控技术与实现[M].北京:高等教育出版社,2009:194-198.
[5]孙德辉,史运涛,李志军,杨杨编,网络化控制系统[M].北京:国防工业出版社,2008:124―134.
[6]陈积明.工业以太网的研究现状及展望[J].化工自动化入仪表,2001,28(6):1-4.
收稿日期:2015-08-08
关键词:“计算机网络”教学;Wireshark;TCP/IP
“计算机网络”课程作为计算机科学与技术、网络工程、通信工程和软件工程等专业的主干课,其地位在课程体系群中尤为重要。学习这门课程,最重要的是掌握计算机网络的原理,了解网络硬件和软件的工作机制。计算机网络基础理论复杂抽象,概念众多,对刚开始学习计算机网络的学生来说,这些概念和协议是非常难以理解和记忆的。计算机网络原理主要描述的是各层的功能及其协议和服务,具体地说就是要理解网络的相关功能层概念和网络体系结构(包括OSI参考模型、TCP/IP模型协议族),以及功能模块之间的协议交互[1],这是学好计算机网络的关键。网络体系结构是计算机网络及其部件所应完成的功能的精确定义。计算机网络原理主要讲述的就是各层的功能及其协议和服务。在计算机网络教学过程中,利用Wireshark网络探测和分析软件,通过从网络中实时捕获几种常见协议数据包并进行分析,使学生对一些协议的工作原理及结构有了更加深刻的理解和认识[2]。
1Wireshark简介
Wireshark(原名Ethereal)是目前世界上最受欢迎的协议分析软件,利用它可将捕获到的网络二进制数据流翻译为人们容易读懂和理解的文字和图表等形式,极大地方便了对网络活动的监测分析和教学实验。它有十分丰富和强大的统计分析功能,可在Windows,Linux 和UNIX等系统上运行。它允许在一个网络内部实时捕获和分析数据包,用户可以通过图形界面很直观地浏览捕获到的数据信息,研究数据包每一层的详细信息[3]。
学习和理解计算机网络原理的最好方法是,理论联系实际。在一个现实的局域网中,网络数据流往往是来自不同用户的各种各样协议数据的大混杂,因此利用Wireshark的“捕获过滤器”和“显示过滤器”,从错综复杂的数据流中迅速提取自己所关心的网络信息,了解和掌握网络的工作原理和协议的交互过程。
Wireshark使用目的是网络管理员使用Wireshark来检测网络问题、网络安全工程师使用Wireshark来检查资讯安全相关问题、开发者使用Wireshark来为新的通讯协议除错、普通使用者使用Wireshark来学习网络协议的相关知识等。
2用Wireshark分析网络协议
网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它定义了通信时信息必须采用的格式和这些格式的意义。TCP/IP(Transmission Control Protocol / Internet Protocol),即传输控制协议/互联网协议是不同操作系统的计算机网络互连的通用协议,它是一组计算机通信协议族,其中最著名的两个协议是TCP及IP协议。TCP/IP协议具有开放式互联环境,很容易实现各种局域网和广域网的集成式互联。此协议是当今技术最成熟、应用最广泛的网络协议[4]。
TCP是一种面向连接的、可靠的运输层协议,TCP数据传输(只有连接建立后才可进行数据传输)需要通过在客户端和服务器端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”,即发送方先发送连接请求,然后接收方进行连接确认,最后发送方对接收方的确认再次进行确认(图1)。下面就以Wireshark对 TCP连接建立交互过程的数据包捕获分析为例,来说明对TCP/IP协议实现的分析。
2.1建立捕获TCP连接报文的实验环境
PCATTCP是一款不错的测试局域网网络速度的软件。在局域网中,两台主机通过交换机连接起来。在服务器端和客户端都安装和运行PCATTCP进行通信,产生TCP流。启动Wireshark进行数据包捕获,单击CaptureInterfaces菜单,选择自己的网卡,选择Start开始监控流量。在服务器端运行ttcp,监听TCP的5001端口。图2是服务器端的完整命令行输出:
服务器配置好后,在客户端运行ttcp,双方开始通信。
2.2TCP报文分析
2.2.1客户端发送连接请求
捕捉到的TCP 连接报文如图3所示。
从图3可以看出,客户端发出的连接请求数据包封装了三个头信息:以太网(Ethernet)帧、IP数据报和TCP报文段。在数据链路层,数据以帧的方式进行传输。在网络层,加工的主要数据对象是IP数据报。IP协议是TCP/IP协议族中的核心协议之一,所有的TCP、UDP、ICMP数据都以IP数据报格式传输。
在运输层,主要数据对象是TCP报文。客户端发送的连接请求如图4所示。
第一条报文是没有数据的TCP报文段,并且将首部的SYN位设置为1。因此,第一条报文常常被称为SYN分组。这个报文段里的序列号是由系统随机设置的数值,表示客户端为后续报文设定的起始编号。此TCP报文段,序列号SEQ在连接请求时相对初始值是0,其实际值是c9 f4 65 c2;确认号是00 00 00 00,ACK标志为0表明确认号被忽略。SYN=1表示正在进行连接请求,通过SYN和ACK也可以用来区分Connection Request和Connection Accepted,在连接请求中,SYN=1、ACK=0,连接响应时,SYN=1、ACK=1。
SYN分组通常是从客户端发送到服务器端。这个报文段请求建立连接。因为一旦成功建立连接,服务器进程必须已经在监听SYN分组所指示的IP地址和端口号[5]。如果没有建立连接,SYN分组将不会应答。如果第一个分组丢失了,客户端通常会发送若干个SYN分组,如果多次尝试不成功,客户端将会停止并报告一个错误给应用程序。
2.2.2服务端连接响应
当服务器接收到连接请求时,就对请求方进行响应,以确认收到客户端的第一个TCP报文段。响应的报文段SYN位和ACK位都将置1。通常称这个报文段为SYNACK分组。SYNACK分组在确认收到SYN分组的同时也发出一个初始的数据流序列号,表示服务器发向客户端的数据序号,它不需要与刚才客户端发来的数据流的序列号相匹配。服务器端响应的数据包如图5所示。
此数据包的起始序列号SEQ在协议框中显示为0,在原始框中的实际值为63 cf 1a c9。所有初始序列号逻辑上都视同为序列号0。ACK标志为1表明确认号有效,SYN仍然为1。
图6中确认号在协议框中显示为1,在原始框中的值为c9 f4 65 c3(比c9 f4 65 c2多1)。这解释了TCP的确认模式,TCP接收端确认第X个字节已经收到,并通过设置确认号为X+1来表明期望收到的下一个字节号。
2.2.3客户端连接确认
在TCP连接建立的最后阶段,客户端对接收到数据包的服务器端进行确认,到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。客户端收到服务器端确认后,发送带有ACK标志的TCP报文段来完成三次握手的过程[6]。这个报文段将确认服务器端发送的SYNACK分组,并检查TCP连接的两端是否正确地打开和运作。
如图7所示,在确认阶段,数据包由客户端发送至服务器端,TCP中的序列号为c9 f4 65 c3(即上次服务器响应报文的确认号)。
图8中,报文段的本次确认号为63 cf 1a ca(即上次的序列号加1)表示客户端下一次希望从主机接收的数据的起始位置。ACK标志为1表明确认号有效,SYN置为0表示连接建立结束。连接建立后,双方可以根据各自的窗口尺寸开始传输数据。
2.3小结
从以上的图可以看出,利用Wireshark可以针对每一数据包,完成从链路层、网络层、运输层到应用层的协议解析。通过上面步骤,可以更加直观的观察到TCP三次握手建立的过程,有助于理解TCP及其工作原理,掌握协议的语法细节。
3结语
计算机网络基本理论复杂抽象,不易理解,但这部分内容又是进一步学习“计算机网络”课程,培养实践应用能力的基础。在教学过程中,通过合理组织授课内容,采用先进的教学方法和较为科学的教学手段,使学生能够较好地掌握计算机网络的基本理论和方法。利用Wireshark网络协议分析软件,进行网络性能参数和数据代码的捕获分析,了解协议的封装结构、交互过程,对于计算机网络教学有很大的帮助。
参考文献:
[1] 谢希仁. 计算机网络[M]. 大连:大连理工大学出版社,2004.
[2] 杨春勇,潘文君,朱翠涛. 计算机网络课程教学及辅助教学方法研究[J]. 高等函授学报:自然科学版,2008,21(6):12-14.
[3] Angela Orebaugh,Gilbert Ramirez,Jay Beale. Wireshark & Ethereal Network Protocol Analyzer Toolkit[M]. Burlington:Syngress Press,2006.
[4] Forouzan.B.A. TCP/IP协议族[M]. 3版. 谢希仁,等译. 北京:清华大学出版社,2006.
[5] 蒋波,李方军,郝军. 数据包的截获与网络协议分析[J]. 重庆三峡学院学报,2006,22(3):26-28.
[6] Miller D. 数据通讯与网络[M]. 邓劝生,薛建新,王涌,译. 北京:清华大学出版社,2007.
The Application of Wireshark in TCP/IP Network Protocol Teaching
PAN Wen-chan, ZHANG Yun
(College of Computer Science, Nanjing University of Posts and Telecommunications, Nanjing 210003, China)
亚当·斯密进行的是具体的动机-行为分析,哈耶克则通过抽象的行为-规则分析,来研究自生自发秩序。哈耶克把人的“天赋”/“倾向”和“才能”,统统看作“个人知识”。亚当·斯密所分析的是人在自利心和自然倾向的驱动下,通过交易而产生的分工秩序,哈耶克分析的则是人类在每个人的个人知识基础上不断扩大的合作的扩展秩序。哈耶克的规则分析不再以顾客和面包师之间的交易行为为中心,而是转向交易规则的研究,这种研究必然是历史的和社会的。
哈耶克对自生自发秩序的研究建立在对三种行动和知识的关系的分析上:
1、个人行动与他人知识的关系:一个人无法替他人决策,因为他无法占有他人的全部个人知识,而这种个人知识是和他人特定的时空情景结合在一起的。
2、个人的行动与他自己的知识的关系:一个人无法甚至确切地知道他自己所拥有的知识。对自己的行为,他可能也是“知其然”(know what)而不“知其所以然”(know how)。
3、个人的行动和整个文明累积的知识的关系:一个人对他依照从事的那一套文明社会的普遍抽象规则并不能确切的知道和清晰地表述。这里的普遍抽象规则就是哈耶克意义上的法律,国会或政府的立法并不一定是这种普遍抽象规则的确切表述。这就是哈耶克所谓“法与立法”的二元观。
“法与立法”的二元观带来很多意涵。在哈耶克看来,普通法是一种典型的自生自发秩序。普通法法理学认为,规则并不是制定的,而是发现的。制定法只是法律渊源之一,而不是法本身,法官要通过法律解释和法律推理来发现适用于具体个案的规则。先例制度保证了,正确的解释和推理可以被挑选出来,错误的、不适当的解释和推理能够被剔除,因此普通法是一个不断进化的法律体系,就像民族语言一样。
互联网是最新的自生自发秩序的例子。这一点可以通过TCP/IP协议的“发现”过程来说明:
1、1969年9月,美国加州大学洛杉矶分校第一次把接口信号处理器(IMP)和主机连接起来。1969年12月扩展到4个节点。1969年4月,克洛克发表第一份RFC(征求意见稿),此后成为互联网上开放标准的主要形成方。每个人都可以通过RFC提出建议标准(proposal standard),试行6个月以上,至少开发两种实现,并不断测试,解决所有问题,然后可以变为草案标准(draftstandard),保持4个月,开发和测试更多的实现,才有可能成为互联网标准(Internetstandard)。1970年12月,克洛克领导网络工作小组制定出最初的主机-主机协议NCP.
2、1974年,文顿·瑟夫发表“分组网络互连的一个协议”,提出TCP协议。后来分成TCP和IP两个协议,合称TCP/IP.目前,TCP/IP已经发展成一个分层的协议簇,包含着上千个协议。现在的协议的标准化由互联网协会协调维护,由志愿者组成的IAB(Internet ArchitectureBoard)是ISOC的技术顾问组。这是一个非官方的完全公开的自愿组织,任何人都可以成为它的会员,参与其讨论,参加它的邮件列表没有任何限制。
3、1983年1月1日,NCP由于没有TCP/IP强大,停止使用。
4、80年代,TCP/IP遇到了官方的挑战。ISO(国际标准化组织)正式提出了一个官方的协议OSI.OSI虽然得到了美国、欧洲政府的支持,但过于学术化,而且没有得到实际应用的检验。在这场官方标准和事实上的工业标准之争中,开放自由的TCP/IP标准战胜了官方标准OSI.
上述事实可以给我们许多启示。TCP/IP是一种自由开放的标准,不断地被人们发现,不断地优胜劣汰-甚至淘汰官方制定的标准,并且不断地演化。在互联网这个自生自发秩序中,“标准只能被发现,不能被制定”。
中国互联网近些年来发展迅速。从官方到民间一直有呼声对互联网的发展进行规制。最近中国政府出台了一系列的行政法规和行政规章:9月25日,国务院《电信条例》和《互联网信息服务管理办法》;11月6日,信息产业部《互联网电子公告服务管理规定》;同日,信息产业部、国务院新闻办《互联网网站从事登载新闻业务管理暂行规定》。这些着眼于贯彻政府意志的行政法规和规章对中国的互联网发展带来沉重打击。
不过,中国的互联网法律有制定的部分,也有“发现”的部分,当前人们讨论的基本只是中国互联网制定的这一部分,往往忽视可能价值更高的“发现”的那一部分。近来中国有一系列关于互联网的法律纠纷。由于没有现成的法律,对这些案子的判决都需要法官去发现规则。比如,在易家诉国网案中,法官确定了“对将知名商标注册为域名构成域名抢注”。在陈卫华诉成都《电脑商情报》案中,法官提出了确定网络作品的作者的方法。在瑞得(集团)公司诉宜宾市翠屏区东方信息服务有限公司著作权侵权纠纷案中,法官界定了“网页是著作权意义上的作品”,以及互联网上著作权侵权的司法管辖原则(服务器所在地及终端计算机所在地均可视为复制行为的行为地,瑞得选择自己服务器所在地的北京市海淀区人民法院起诉原在四川的东方公司侵犯著作权并无不当)。在王蒙等六作家诉首都在线案中,法官确定了“网络传播是使用作品的一种方式,作品传播方式的不同,并不影响著作权人对其作品传播的控制权利。”在《大学生》杂志社诉263和李翔个人网页侵权案中,法官确定提供个人主页服务的网络服务提供商的责任。
【关键词】 图像数据 数据传输 TCP/IP
在印刷图像在线检测系统中,为了提高系统图像处理运算能力,同时实现对系统的有效管理,通常采用将运算处理单元同系统管理与显示单元分开的方法,即采用服务器客户端的分布式系统结构,服务器与客户端之间通过网络连接,按照一定的网络协议实现数据通讯与图像数据传输功能。
一、 基于 TCP/IP 协议的数据通讯与图像数据传输方法
作为目前广泛采用的一组完整的网络协议,TCP/IP 协议的传输层协议为用户提供了用于虚电路服务及数据传输可靠性检查的传送控制协议(TCP)和用于数据传送的数据报协议(UDP)。同时,Socket 的出现,为用户提供了基于 TCP/ IP 网络应用编程接口。
在利用 Socket 进行通信时,有两种主要方式:一种叫做流方式(Stream Socket),也称面向连接方式,在这种方式下两个通信的应用程序之间先要建立一种虚拟的连接,只有连接建立以后才能开始传输数据,这种方式对应的是 TCP 协议。
第二种叫数据报文方式(Datagram Socket),又称无连接方式,在这种方式下,数据在传送过程中有可能会丢失,而且,后发出的数据也有可能先收到。由于本系统的客户端与服务器端间的通讯对实时性、快速性和可靠性的要求非常高,传输效率将会影响到检测过程所消耗的时间,过多的时间消耗会导致系统检测精度的降低,同时会对图像的后续处理产生影响;错误的或者顺序颠倒的数据信息可能会带来很严重的后果。
因此,采用 TCP 协议可以在连接虚电路建立后消除隐含在建立客户机/服务器间通讯时的非对称性,保证通讯两端的对等数据通信和图像数据的准确传输。
二、基于 TCP 协议和 Csocket 类的网络通信实现
在基于 TCP 协议的网络通信的实现过程中,采用Microsoft Visual C++ 的MFC 类库中提供的 CSocket 类,采取面向连接的流方式实现了客户端与服务器端之间的实时通讯。其服务器与客户端的进程。系统通信的工作过程如下: 在印刷图像在线检测系统中,上位机作为服务器,调用Listen () 函数进行监听,等待下位机的连接;下位机作为客户机,当某一客户机要联通上位机时,调用Connect() 函 数主 动 进 行连接。
客户端在连通服务器之前先发送连通请求,并把包括站名、IP 地址、端口地址等客户机信息发送到服务器。服务器端对进行连接请求的身份确认,若身份不符则主动中断连接;若身份得到确认则允许连接并发送确认信息到客户端,开始接收由客户端上传的数据。
三、网络连接状态的在线诊断
在印刷图像在线检测系统的实际检测过程中,会出现这样一种情况:服务器端不能实时获得检测对象的缺陷数据,而此时系统软件亦没有捕捉到任何异常,从而导致整个系统缺陷检测与缺陷分类功能的失效。因此,为了保证网络的正常工作,需要对网络进行在线化检测,从而能够网络及时进行修复。
引起该检测失效故障的可能原因很多,最可能的一种原因是:应用程序的其他部件都处于正常运行状态,客户端已经检测到产品缺陷,而服务器端显示的却是之前检测到的缺陷数据,即检测系统的网络通讯功能 失 效 , Client Socket和CSever Socket 之间丢失有效连接,导致客户端采集到的缺陷数据不能实时地上传到服务器端,或者由于某种原因延迟一段时间,同客户端机之后所检测到缺陷数据一起上传至服务器端,导致缺陷的误报与漏报。为了诊断服务器端 Csever Socket 与客户端 Client Socket 之间是否建立有连接,有两种可能的方法:
(1) 在服务器端设置定时器,定时向每个客户端发送测试信息,若客户端能够及时返回确认信息,则证明服务器与客户端之间建立有连接;否则服务器端会继续向客户端发送测试信息,若服务器端在第 n 次(n 值由用户设置)发测试信息之前收到客户端的确认信息,仍然认为服务器与客户端之间建立有连接;若超过 n 次,则认为二者之间已经断开连接。
(2) 在每个客户机端都设置定时器,定时向服务器端发送测试信息,若服务器端能够及时返回确认信息,则证明服务器与客户端之间建立有连接;否则客户机会继续向服务器端发送测试信息,若客户端在第 n 次发测试信息之前收到服务器端的确认信息,仍然认为服务器与客户端之间建立有连接;若超过 n 次,则认为二者之间已经断开连接。
关键词:流控制传输协议;多地址;多流;关联
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)28-0067-03
The Research of Stream Control Transport Protocol
XIONG Wei1,2
(1.Department of Computer Engineering,Chongqing University,Chongqing 400044,China;work and Information Security Center,Chongqing Institute of Communication,Chongqing 400035,China)
Abstract: SCTP(Stream Control Transport Protocol),standardized by the Internet Engineering Task Force(IETF)is a new general-purpose transport protocol which fit to transmit stream media because of it’s new advantages such as multi-stream transport, unordered deliver and so on. In this issue, we describe the design an operation of SCTP, includes the basic datagram format and the concept of Chunk, Association, Stream, etcetera.
Key words: SCTP; multi-homing; mulit-streaming; association
1 引言
随着高速网络的发展和新需求的出现,现代网络面临的核心问题是多媒体数据业务和实时通信量的传输,以及如何为这些业务提供相应的服务质量保证。基于IP的包交换网络为了支持多媒体等流式通信量采用了多种技术:如采用高性能的交换机和路由器提升网络容量、IP多播传输、允许用户预留网络容量,并为各种业务类型分配优先级以及新的运输层协议等,前三者都是网络层的功能,而运输层协议则是通过运输层通信端点之间的协作来为多媒体网络应用服务。传统的传输层协议TCP由于严格的顺序递交和确认重传带来了额外的传输流量和较大的时延,UDP又因为过于简单,缺少必要的可靠传输保证,容易导致网络拥塞甚至崩溃。流控制传输协议SCTP(Stream Control Transport Protocol),作为一种新的协议,利用其新特性在可靠服务和传输效率之间取得平衡,达到应用所期望的性能。
2 SCTP(Stream Control Transport Protocol)的基本特性
SCTP是在IP网络上使用的一种可靠的通用传输层协议。尽管SCTP协议最初是为发送电话信号而设计的(RFC 2960),但带来了一个意外的收获:它通过借鉴 UDP 的优点解决了TCP的某些局限。经过不断的研究和扩展,SCTP已经逐渐发展成为一种通用的传输层协议,并在许多网络操作系统如BSD,Linux中得到了初步实现。SCTP除了具有TCP同样的功能之外,还具有更新的设计思想和更灵活的数据包格式,能更好的扩展以满足某些应用的需求。其主要特征如下:
1) 内建多地址主机支持:SCTP中的一对连接称为关联(Association),关联两端的主机节点(Endpoint)可以有多个网络地址,从而使一个SCTP关联可以通过多条网络路径进行数据传输,见图1。
2) 保留应用层消息边界:SCTP保留上层数据信息的边界,上层数据信息称为“消息”,传输的基本单位为有意义的数据段。
3) 单个关联(Association)多流机制:SCTP允许用户在每个关联中定义子流,数据在子流内按序传输。
3 SCTP的数据包格式
SCTP提供了灵活的数据块格式,每个SCTP数据报都由一个Common Header(基本首部)和若干Chunk(数据块)组成。
图2左边显示了SCTP的基本数据报文格式。其中基本首部提供了源端口和目的端口,用于完成典型的传输层协议端口复用功能,验证标记对一个SCTP连接提供安全验证,保存着在SCTP通过握手建立连接时第一次交换的初始标签的值。在一次连接中,任何SCTP数据包若不包含这样一个标签,到达时会被接收端丢弃。校验和是对整个数据包的校验。在首部后是一系列Chunks(块)。Chunk是组成SCTP报文的基本结构,有多种类型,不同类型的块可用来传输不同的控制信息或数据;同时首部中的flags标记字段提供了额外的控制信息。丰富的Chunk类型使SCTP可以采用不同类型的Chunk实现各种传输控制机制。
4 SCTP的消息(message)和流(stream)
下面给出SCTP协议中数据的基本载体数据块的格式描述,如图3。
SCTP协议将上层数据信息称为用户消息(user message),在传输中SCTP保留上层数据信息的边界,传输的基本单位为有意义的数据段。因此SCTP称为“面向消息”的传输协议。
SCTP提出了数据流的概念,如图4所示,每个数据块中不仅有传输序号TSN,还携带了流标识SID(Stream ID)和流序号SSN(Stream Sequence Number)。用户可以在一个连接中建立多个流,每个流分配一个SID,每个流队列中的用户数据由流序号SSN表明顺序。在SCTP中引入一个连接多个流的机制解决了使用TCP传输时出现的队首阻塞问题。允许某些应用程序根据需求将逻辑上不相关的数据分离为多个流进行传输往往很有意义,如一个多媒体视频会议系统中的多路语音信号在各自的流中传输,彼此之间不会互相阻塞。
如图4所示,节点根据应用程序的要求维护不同的发送队列,当接到上层的消息后根据MTU等网络情况决定是否拆解并转化为Data Chunk进行传输。并且将会设置Data Chunk中flags字段的相应位,flags字段共三位,其中的U位为是否按序递交用户消息的标志,B,E位分别代表本Data Chunk包含一个用户消息的开始或结束,如果本数据块包含一条完整的用户消息,则BE都置为1,如包含消息中间的内容则都置为0。连接的对端收到DataChunk后根据流序号SSN和flags字段重组用户消息交给应用层。
SCTP提供按序递交和无序递交两种选择,Data Chunk中的flags字段中的U位就表明了该数据所需要的服务是按序递交或是无序递交。当采用无序递交时,SCTP就具有了类似UDP的一些特征,能够尽快的将数据发往上层,适用于一些实时应用。
实际上,通过引入流和无序递交机制,SCTP实现了严格有序传输(类似TCP),部分有序传输(部分流内无序递交)和无序传输(类似UDP)。
5 SCTP的基本传输机制
5.1 连接的建立
SCTP在传输前首先建立连接,称为一个关联,通过四次握手,两端SCTP主机交换地址信息和其他通信状态。如图5所示。
请求连接者发出INIT请求,INIT消息的接收端不必保存任何状态信息或者分配任何资源,这样就可防范SYN Flooding等DoS攻击。它在发送响应INIT的INIT-ACK消息时,采用了一种机制―“状态Cookie”,该Cookie具有发送端要建立连接所需的全部信息。
INIT和INIT-ACK都必须包含建立初始状态所需的参数:一组IP地址,初始TSN,被接收的SCTP包中必须含有的初始标签,每一端请求发出的流数目和每一端能支持接收的流数目。交换完这些消息之后,INIT的发送端以COOKIE-ECHO消息的方式发送回状态Cookie。接收端根据所接收到的COOKIE-ECHO中的状态Cookie,完整地重建自己的状态,并回送COOKIE-ACK来确认关联已建立。注意COOKIE-ECHO和COOKIE-ACK都可将用户数据消息绑定到各自的包中,可以加快数据的发送。
5.2 传输过程
在建立连接以后,接收方收到数据要发回确认,接收方维护一个累计已确认数据序号Cm-TSN(Cumulative Transport Sequence Number),定时器到期未收到确认则重传数据包,因此SCTP和TCP一样,可以提供有连接的可靠传输服务。通过对数据携带的一个传输序号TSN(Transport Sequence Number)进行选择确认(Selective ACK)。如图6。
在SCTP中,TSN保证整个关联的可靠性,而SID/SSN保证整个流的有序性,实现了在传输中将数据的可靠性与有序性独立分开。TSN类似于TCP中的确认序号,然而在TCP中,确认序号既用于确认保证可靠传输,又用于接收方排序,而在SCTP中TSN与SID/SSN各司其职。
SCTP可以在一个连接中传输多条数据流,允许应用程序根据需要传输多个性质不同的流,而接收方对每个流按其SID/SSN进行处理,互不干扰,当一个流正在等待下一个非顺序的用户消息时,其他流的发送会继续。
对于数据包丢失的发现,SCTP即使发现接收序号有缺口或顺序错乱,仍会发送后面的数据。从图6可以看出,当序号为7的数据未到达时,发送端依然进行后续包的传送。
SCTP选择确认的特点还在于SACK Chunk的设计,实际上TCP的ACK机制也能提供一定的选择确认信息,然而SCTP的SACK机制通过SACK Chunk提供了更多的数据确认信息。图7显示了SACK Chunk的格式。
如图7所示,在SCTP SACK确认块中包含了在一定的时间内尽可能多的信息,将已收到的连续数据称为Gap,通过若干包含起始和终止传输序号(TSN)的Gap字段表示那些已收到的连续数据块,通过若干Duplicate TSN字段表示每个重复收到的数据包,当对方端点接收到SACK Chunk后就可以根据这些信息做出是否重传或调整发送窗口,清空缓存等工作。
6 SCTP的多地址和多路径支持
SCTP通过多地址支持实现传输的路径冗余。当连接中至少有一个端点使用多个IP地址时,就形成了多条可能的传输路径,其中主要使用一条作为主传输路径,其他的作为冗余路径在必要时启用。具体过程如下:
通信方在发送的INIT或INIT-ACK消息中列出自己所具有的IP地址,通过一定的机制选择特定的一对地址形成的地址对(pair)作为主路径进行数据传输,其余可能的地址对作为冗余路径。
在传输的过程中定时利用Heartbeat/HeartbeatACK消息块来监测和更新主路径和冗余路径的路径状态(active或inactive)。具体操作是通过统计每条路径上的数据传输次数(包括DATA和HEARTBEAT),如果次数达到一定的上限,该路径的状态就成为inactive。可以选用另一路径用于传输,实现了网络层的容错。
在SCTP目前的研究和实现中多路径特性只用于网络容错,也就是主路径失效时启动备份路径,更进一步的考虑是利用SCTP的多址特性实现负载分担(LoadSharing)。
7 SCTP的可扩展性
作为一个仍在发展和改进的协议,SCTP的设计者从设计之初就充分考虑了协议的可扩展性。下面简单分析SCTP的一个具体扩展:确认序号移动通告。
多媒体数据的特点是可以允许少量数据的丢失,对重传引入的延时和效率问题十分敏感。例如在流媒体视频传输中,迟到的重传数据往往已经无效,重传就没有必要。为在可靠性和实时性之间取得平衡,SCTP引入了一种新的Chunk类型(见图8),称为“确认序号移动通告”(Forward Cumulative TSN chunk)。
在采用PR-SCTP的系统中,发送方在接收方请求重传时将根据一定的策略,决定是否有必要重传该数据,如果发送方认为数据不太重要或已经过时,则发送确认序号移动通告Fwd-CmTSN,指示接收方修改累计确认序号Cm-TSN,接收方在收到确认序号移动通告时则会向前增大Cm-ACK的值,放弃该数据,不再请求重传而继续后续数据的传输。由于STCP中TSN只负责重传保证可靠传输,为了通知接收方哪些数据已放弃,确认序号移动通告中还可以携带这些放弃数据的流号和流序号。
确认序号移动通告保留了确认重传机制的同时,“跳过”某些(不太重要的)数据,实现了部分可靠的传输,为某些不需要完全可靠传输的应用程序提供了很大的灵活性。
8 结束语
总之,作为一种新的传输层协议,SCTP和传统协议相比有更多的优点。从2000年10月份才成为RFC规范以后,开始进入所有的主流操作系统,包括 GNU/Linux、BSD和Solaris。在Microsoft?R Windows?R 操作系统上也有第三方的商业包可以使用。在获得高可用性的同时,应用程序也已经开始使用SCTP作为自己的主要传输机制。诸如FTP和HTTP之类的传统应用程序已经在SCTP的特性基础上进行了构建。其他一些协议也正在开始使用SCTP,例如会话初始化协议(Session Initiation Protocol,SIP)和通用通道信号系统7(SS7)。在商业领域中,也可以在Cisco的IOS中找到SCTP的影子。
随着SCTP被吸纳到2.6版本的Linux内核中,现在可以构建并部署高可用性、高可靠性的网络应用程序。作为一种基于IP的协议,SCTP不但可以无缝地替换TCP和UDP,而且扩展了很多新服务,并且对安全性也有了很大的提高。从发展的趋势来看,SCTP它提供了更加高效和适用的传输机制,有重要的研究意义和广阔的发展前景。
参考文献: