时间:2022-06-13 09:45:57
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇tcp协议,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
1 概述
随着信息科学技术和通信技术的不断快速发展,基于互联网的网络通信应用在社会各个领域中的应用越来越广泛,使得互联网通信应用成为现代人日常生产生生活不可或缺的一部分,通过互联网络通信,网络用户之间可以实现数据传输、信息共享,从而极大地提高了人们的生活质量。然而,互联网络中的数据传输过程,并不是杂乱无章的随机传送,而是在计算机网络通信协议的基础上,双方都按照协议的内容和机制,来发送数据信息和读取分析数据信息,进而实现互联网络的数据传输和信息共享的功能,TCP/IP协议就是互联网络中重要的通信协议,它的存在奠定了整个互联网络通信的基础,所以对于TCP/IP通信协议的学习对于理解互联网通信机制来辅助互联网学习和工作具有很大的帮助。
2 计算机网络的TCP/IP通信协议
TCP/IP协议是“Transmission Control Protocol / Internet Protocol”的简写,是Internet网络基本的协议,它为计算机通讯的数据打包传输以及网络寻址提供了标准的方法。由于TCP/IP协议的优越性,使得越来越多的通信设备支持TCP/IP协议,使互联网络逐步走向规范化,最终TCP/IP协议成为了当前网络通信协议标准中最基本的网络通信协议、Internet国际互联网络的基础。
2.1 计算机网络TCP/IP协议
针对计算机互联网络的通信协议,国际标准组织ISO创立了七层OSI网络模型,自上而下,分别为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。而TCP/IP协议则是应用在传输层和网络层的数据传输控制协议,来规定网络设备接入互联网络以及设备间数据通信的标准。在通信设备经过互联网络进行数据传输时,通信设备数据发送端,发送TCP/IP通信报文,此时TCP/IP协议携带着通信设备发送端的传输数据内容以及目标通信设备的地址标示在互联网络中进行寻址,从而正确地传送到目标通信设备。当目标通信设备接收到TCP/IP通信报文后,按照协议内容,去除通信标示,来获取传输数据内容,并加以校验,如果经校验后发生差错,目标通信设备会发出TCP/IP信息重发报文,让发送通信设备再次将TCP/IP通信报文发展目标通信设备,去掉通信标示来获取传输数据信息。
2.2 TCP/IP通信协议报文格式
在互联网络中,基于TCP/IP通信协议传输的数据内容都是以通信报文的形式在互联网络内部进行传输,通信报文实质上就是一串二进制字符串,而字符串内不同位置的二进制字符标示不同的含义。从TCP/IP通信协议的主要报文格式可以看出,IP协议是基于TCP协议至上的,TCP协议报文时作为IP通信报文的数据部分来进行传输的。实际上,互联网内传输的通信字符串还有其他的通信协议,TCP/IP通信报文也是作为其外层协议的通信数据部分嵌入到通信报文中在互联网内进行传输。
在IP协议首部,包含了一些关于IP协议的标示、通信地址等信息,主要包括数据字符串总长度的信息、通信标示号、源IP地址和目标IP地址等信息,当IP通信报文经过路由寻址时,会根据首部内记录的目标IP地址来选择传输方向,最终根据目标IP地址传输至目标通信设备。此外,IP通信报文首部还包含其他信息,比如IP协议版本号、首部长度、校验信息、该IP通信报文生存时间(即该报文经过多少个路由后自动取消传输)等与IP通信报文相关的信息,以确保IP报文传输的正确性和安全性。TCP协议通信报文是作为IP通信报文数据内容存在的,TCP协议也分为TCP报文首部和TCP通信数据。TCP通信报文首部主要包括了源端口号和目标端口号等信息,当TCP/IP通信报文经过互联网络到达目标通过新设备后,通信设备会根据TCP报文首部的目的端口号选择设备端口号来接受该数据信息,进而实现互联网络的数据传输。
2.3 TCP/IP协议通信过程
互联网络的通信设备基于TCP/IP协议建立通信过程,也是根据TCP/IP协议来实现的。当源通信设备想向目标设备发送数据时,首先会发送一个TCP/IP通信报文来确认连接,该通信报文在互联网络中经过寻找传输后找到目标设备,目标设备也会向源通信设备发送一个TCP/IP报文以确认建立通信连接,此时,源通信设备就会将通信数据以TCP/IP通信报文的形式进行数据打包,然后向目标数据进行传输,在收到数据后,目标设备同样会发送TCP/IP报文以确认收到信息。当然,TCP/IP通信数据长度是一定的,当通信数据超过报文长度时,源通信设备会将其分段发送,而目标设备则会根据IP报文首部的标识号进行数据重组来重现传输数据信息,进而完成互联网络通信设备数据传输。
3 总结
TCP/IP网络协议是当前互联网络最基本的通信协议。根据TCP/IP网络协议,连接在互联网内的通信设备可以根据TCP/IP通信报文格式的内容将传输数据打包在TCP/IP通信报文内,并以其规定的通信流程进行数据传输,从而实现互联网络内的数据高效安全的传输。
参考文献:
[1]杨绍文.谈计算机网络的TCP/IP协议[J].科技信息.2011(02)
[2]查东辉.试论计算机网络通信协议[J].电脑知识与技术.2013(14)
[3]杨娇娟.浅谈TCP/IP协议[J].数字技术与应用.2012(03)
引 言
超文本传输协议(HTTP)是目前通过Internet进行信息交换最主要的方式。HTTP协议是建立在请求/响应(request/response)模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME(Multipurpose Internet Mail Extensions)样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息(包含服务器的信息、资源实体的信息和可能的资源内容)。图1给出了HTTP协议实现的一个简单模型。HTTP/1.0[3]为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1[4]提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
可持续链接减少了每次TCP链接建立的时间,但是一个空闲的TCP链接将需要一个Socket和相应的存储缓冲区。一个Socket缓冲区的最小长度必须大于一个TCP包的最大长度,即64 KB,而且很多实现方法在链接建立时将预分配一些缓冲区。可用的Socket的数量是有限的,很多基于BSD的操作系统对于能够同时打开的链接数都有一个缺省的最大值。
无线掌上设备PDA的应用(如浏览器)[5]特点表现在:① 因为页面是针对掌上设备制作的,一般在1 K~2 K字节,比较小;② 目前无线通信网络的带宽很窄,GSM的数据信道带宽只有9.6 K。当前Web页面的访问大多通过HTTP协议,并使用TCP作为下层的传输控制协议。但不幸的是,TCP并不适合短会话的应用情况,不同于现在采用的使用单一TCP传输协议进行数据传输的方式。本文提出了采用动态选择传输层协议(TCP、UDP)的方法来改善取回页面的延迟、网络拥塞以及服务器的负荷。
这种混合TCP-UDP的方法结合两个方面的优点:首先,对于需要比较少数据传输的情况,它将使用UDP作为传输层的协议,从而避免了TCP链接的多次握手开销;另外,对于需要较多数据传输的情况,它将使用可靠的带有重排序和拥塞控制的TCP协议作为传输层的协议。混合TCP-UDP的实现方法只需要对应用层的改动,而操作系统的核心代码不用任何更改。仅采用UDP协议的缺点在于,需要在应用层建立一套类似于TCP复杂的控制协议,从而进行重排序和拥塞控制来保证传输的可靠性。
1 背 景
HTTP是一个请求/响应协议,客户端的应用程序通过提供一个URL可以从服务器上得到所需的数据。HTTP可以用来访问各种不同类型的资源,其中包括文本、图形、影音、可执行文件、数据库查询结果等等。
图2给出了在客户端发起HTTP GET请求后,在客户端和服务器之间进行数据包交换的示意。图中只有两个数据包是有用的(即携带了数据):一个是HTTP GET请求,另一个是HTTP的响应。其它的都是TCP用来进行握手操作的数据包。为了减轻Web服务器的负荷,经常采用重定向机制。这样从服务器发来的重定向响应报文是很短的数据包。使用TCP作为传输协议需要至少7个数据包,而使用UDP则只需要2个数据包就足够了。
2 设 计
我们使用混合传输层[6]的方法即对于少量数据传输的链接采用UDP,而对于大量数据传输的链接采用TCP作为传输层协议。这样对于短链接而言就避免了TCP经常性的握手开销,而对于长链接则仍可获得TCP的优点,如超时重传、拥塞控制、错误恢复机制等。这种方法中,客户端首先尝试使用UDP作为传输层的协议,如果对于所请求的URL UDP并不适合,则再次使用TCP链接。这种方法提供了以下保证:
如果初始的UDP数据包丢失,将采用TCP重新链接而不会受到影响。
如果所链接的服务器没有使用混合传输层的实现机制,客户端将使用TCP重新进行链接。
图3给出了混合TCP、UDP的实现算法。一个采用混合算法的HTTP客户端首先使用UDP作为传输层的协议发出HTTP GET请求,同时启动超时定时器。
当服务器处理客户端发来的请求时,它可以从以下两点做出选择:
① 如果响应的数据足够小(比如,可放到一个数据包中),服务器将使用UDP发回响应。像比较小的网页或HTTP REDIRECT响应就属于这一类。
② 如果响应的数据很大,无法放进一个UDP数据包中,服务器则要求客户端使用TCP重试。这可以通过添加一个HTTP的头部字段来解决如 TCPRETR。
在客户端,将会出现以下三种情况:
客户端从服务器接收到响应。如果响应中包含了所需的HTTP响应,客户端将对数据进行处理。如果服务器要求客户端重试,客户端将使用TCP作为传输层重试。
如果服务器没有处理通过UDP传输的HTTP包,客户端就会收到ICMP错误消息(目的地址无法到达/协议无法到达)。此时客户端将会使用TCP重试。
如果定时器超时,客户端应使用TCP重试。
图4给出了在定时器超时情况下,客户端和服务器之间数据包的交换。这种超时机制提供了可靠性,以及与未使用混合TCP-UDP方法的服务器的兼容性。
图5示意了服务器要求客户端使用TCP重发请求时,客户端和服务器之间的数据包交换。
3 结 语
混合TCP-UDP方法改善了参与HTTP传输的三个方面:客户端、服务器和网络。
对于客户端而言,可以避免由于TCP而引入的三向握手的时间,从而减少了浏览的延迟时间。
TCP/IP协议是网络中使用的基本通信协议。虽然从名字上看它包括两个协议:TCP协议和IP协议,但确切的说,TCP/IP实际上是一组协议,除了最常用的TCP和IP协议外,还包含许多其它的工具性协议、管理协议及应用协议。TCP/IP协议共分为4层,即:应用层、传输层、互连网络层、网络接入层。其中,应用层向用户提供访问Internet的一些高层协议,使用最广泛的有TELNET、FTP、SMTP、DNS等。传输层提供应用程序端到端的通信服务,该层有两个协议:TCP和UDP。互连网络层负责相邻主机之间的通信,该层协议主要有IP和ICMP等。网络接口层是TCP/IP协议软件的最低一层,主要负责数据帧的发送和接收。
典型协议安全性分析与防范
TCP协议
协议工作过程
TCP是基于连接的。为了在主机A和B之间传送TCP数据,必须先通过3次握手机制建立一条TCP连接。若A为连接方、B为响应方,则连接建立过程如下:首先,连接方A发送一个包含SYN标志的TCP报文(即同步报文)给B,SYN报文会指明连接方A使用的端口以及TCP连接的初始序号X; 随后,响应方B在收到连接方A的SYN报文后, 返回一个SYN+ACK的报文(其中SYN是自己的初始序号Y,ACK为确认号X+1,表示客户端的请求被接受,正在等待下一个报文)。最后,连接方A也返回一个确认报文ACK(序列号y+1)给响应方B。到此一个TCP连接完成。
TCP协议的安全问题
在连接过程中,可能受到的威胁如下:攻击者监听B方发出的SYN+ACK报文,然后向B方发送RST包。接着发送SYN包,假冒A方发起新的连接。B方响应新连接,并发送连接响应报文SYN+ACK。攻击者再假冒A方对B方发送ACK包。这样攻击者便达到了破坏连接的作用。若攻击者再趁机插入有害数据包,则后果更严重。
例如,在TCP的3次握手中,假设1个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(即第3次握手无法完成),这种情况下服务器端一般会再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);1个用户出现异常导致服务器的一个线程等待1分钟并不是什么大问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。服务器端将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况我们称作服务器端受到了SYN Flood攻击。
防范方法
对于SYN Flood攻击,目前还没有完全有效的方法,但可以从以下几个方面加以防范:
(1)对系统设定相应的内核参数,使得系统强制对超时的SYN请求连接数据包复位,同时通过缩短超时常数和加长等候队列使得系统能迅速处理无效的SYN请求数据包;
(2)建议在该网段的路由器上做些配置的调整,这些调整包括限制SYN半开数据包的流量和个数;
(3)建议在路由器的前端做必要的TCP拦截,使得只有完成TCP三次握手过程的数据包才可进入该网段,这样可以有效的保护本网段内的服务器不受此类攻击。
IP协议
IP协议的安全问题
IP协议在互连网络之间提供无连接的数据包传输。IP协议根据IP头中的目的地址项来发送IP数据包。也就是说,IP路由IP包时,对IP头中提供的源地址不作任何检查,并且认为IP头中的源地址即为发送该包的机器的IP地址。这样,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。其中最重要的就是利用IP欺骗引起的各种攻击。
以防火墙为例,一些网络的防火墙只允许网络信任的IP数据包通过。但是由于IP地址不检测IP数据包中的IP源地址是否为放送该包的源主机的真实地址,攻击者可以采用IP源地址欺骗的方法来绕过这种防火墙。另外有一些以IP地址作为安全权限分配依据的网络应用,攻击者很容易使用IP源地址欺骗的方法获得特权,从而给被攻击者造成严重的损失。事实上,每一个攻击者都可以利用IP不检验IP头源地址的特点,自己填入伪造的IP地址来进行攻击,使自己不被发现。
防范方法
基于IP欺骗的防范方法有:
(1)抛弃基于地址的信任策略。这是最简单的方法。
(2)进行包过滤。如果网络是通过路由器接入Internet的,那么可以利用路由器来进行包过滤。确认只有内部LAN可以使用信任关系,而内部LAN上的主机对于LAN以外的主机要慎重处理。路由器可以过滤掉所有来自于外部而希望与内部建立连接的请求。
(3)使用加密技术。阻止IP欺骗的一种简单的方法是在通信时要求加密传输和验证。当有多种手段并存时,加密方法可能最为适用。
ICMP协议
ICMP协议的安全问题
ICMP即Internet控制消息协议。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。Ping就是最常用的基于ICMP的服务。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。此外,向目标主机长时间、连续、大量地发送ICMP数据包,使得目标主机耗费大量的CPU资源处理,也会最终使系统瘫痪。
防范方法
对于“Ping of Death”攻击,可以采取两种方法进行防范:
(1)路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内。这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;
关键词:TCP;拥塞控制;乱序数据包;快速重传
1 引言
作为互联网上最为核心的通信协议之一,TCP协议最早于1974年由Vinton Cerf和Robert Kahn共同提出。最初,TCP协议设计的主要目的是如何在异构的主机之间可靠地传输数据,因此主要包括基于窗口的流量控制,丢包恢复等功能。上个世纪80年代,由于互联网用户和流量的激增,互联网经历了多次严重的拥塞崩溃事件。为了解决这一问题,上世纪80年代后期,Van Jacobson等人首次把拥塞控制应用到TCP协议当中,从而极大地改善了Internet上端到端连接的性能和稳定性,保证了整个互联网的稳定运行[1]。TCP是目前互联网中使用最广泛的传输协议。非常多的应用,如FTP,Web,Email等,都采用了TCP协议。根据2009年11月份的最新统计,互联网总字节数的90%和总报文数的87%均使用TCP协议进行传输[2]。
随着互联网的飞速发展,各种新技术被应用到互联网中,如多路由技术,并行处理技术,链路层重传技术等。这些技术在提升互联网性能的同时,也导致了传输层乱序数据包的出现。大量的研究表明,乱序数据包会使位于传输层的TCP协议性能大幅下降。国内外众多学者已经提出了各种不同的方法来提高TCP协议在面临乱序数据包时的性能。
本文首先分析了乱序数据包造成TCP性能下降的主要原因,然后讨论了各国学者所提出的不同解决方案;在此基础上给出了在面临乱序数据包时,提高TCP协议性能的几个研究方向。
2 乱序数据包对TCP协议的影响
TCP协议拥塞控制的基本原理是:当网络发生拥塞时,发送端应减小发送速率。实际上,位于通信连接末端的TCP拥塞控制算法无法了解网络中究竟是否真的发生了拥塞,只能根据接收端收到的信息推测网络状态。因此设定了一个假设前提,即分组丢失意味网络拥塞。即使这样,TCP协议还是无法确切了解是否真的发生了分组丢失事件,只能根据确认指示推测分组是否丢失。现行的TCP协议可以通过两种方式来判定数据包的丢失[3]。
(1)重传定时器超时。
(2)接收端收到一定数量的重复应答(通常为3个)。
TCP通过数据包的序列号来保证数据包的正确,按序交付。假设序列号为 的数据包丢失,接收端每收到一个序列号大于 的数据包都会认为这是一个乱序数据包,在数据包 被正确接收之前,每收到一个这样的数据包,都将产生一个对于 的重复应答。如果发送端收到一定数量的重复应答,将认为该数据包丢失,并由此推测网络发生了拥塞。此时,重传丢失的数据包,并将拥塞窗口减半。
这种丢包判定方式有效的前提是:网络结构稳定,同属一个连接的所有数据包按照同一路径到达接收端,并且中间路由采用先到先服务和FIFO的原则。在以上条件成立的情况下,数据包的到达遵循“先发先到”的原则。数据包如果没有按序到达则意味着丢失。然而,这种丢包判定方式容易受到网络中持续的乱序数据包的影响。
乱序数据包是一种数据包到达顺序与发送顺序不一致的网络现象。许多针对网络中数据包的乱序问题的观察、测量和本质研究指出:数据包的乱序并不是网络的病态行为,而是作为一种普遍现象伴随着网络一直存在。统计显示约有0.1%-2%的数据包会经历乱序事件[4]。
乱序数据包的出现会给TCP协议带来很大影响:(1)不必要的传输层重传,浪费带宽;(2)拥塞窗口不必要的减小,降低网络利用率。
3 现有的解决方案分析
针对乱序数据包对于传输层TCP协议的影响,众多学者提出了不同的解决方案,主要包括以下三种。
3.1 增大触发快速重传的门限值
一些学者指出,将触发快速重传的门限值(dupthresh)固定为3,会使得TCP协议对于乱序数据包的容忍程度太低,容易诱发不必要的重传。因此提出改变dupthresh的取值[5]。目前主要有三种dupthresh设定算法:
(1)当乱序数据包出现时,通过固定参数K增大dupthresh的取值。
该算法的主要思路是:当乱序数据包出现时,将快速重传门限值dupthresh增大为dupthresh+K。为此,需要在接收端检测乱序数据包事件。检测过程如下:如果数据包在dupthresh之后到达,即,已经被判定为丢失的数据包到达接收端,则认为这是一个乱序数据包事件。此时,将dupthresh增大为dupthresh+K。此后,将按照新的dupthresh进行丢包判断。
这种方法的优点是实现简单,缺点也很明显,接收端可能需要多个周期,才能将dupthresh设定为合理值。这个收敛过程和整个算法的性能依赖于K的选择。
(2)将dupthresh动态设定为当前值与乱序数据包长度和的一半。
该算法的主要思路是:当接收端检测到数据包缺失时,开始记录乱序到达的数据包数量,称为乱序数据包长度,记为L,直到缺失的数据包到达。此时,将快速重传的门限值dupthresh修改为(dupthresh+L)/2。
这种方法的优点是,它能够较第一种算法更为迅速地使dupthresh根据网络状态收敛于理想值。缺点在于一个偶然的较大的乱序数据包长度可能造成dupthresh过大,影响TCP协议的性能。
(3)根据乱序数据包长度,利用指数加权移动平均算法设定dupthresh。
为了克服上述两种算法的缺陷,Leung等人在文献[6]中提出利用指数加权移动平均算法(EWMA:Exponentially Weighted Moving Average)动态设定dupthresh。同第二种设定算法一样,当接收端检测到数据包缺失时,开始记录乱序数据包的长度L,直到缺失的数据包到达。此时,根据以下公式,计算平均乱序数据包长度:
if L > avg
avg = (1-α)*avg + α*L
else
avg = (1-α*x)*avg + (α*x)*L
其中,α为EWMA因子,通常取1/3,x为乘性因子,通常取4。
随后,将dupthresh设定为平均乱序数据包长度avg。这种算法的优点在于dupthresh可以根据网络状态动态更新,并且,避免了第二种算法中单个过大的乱序数据包长度对dupthresh造成的过大影响。缺点在于接收端需要增加统计变量,并且随时更新乱序数据包长度也会对接收端的性能造成一定影响。
3.2 Eifel算法
R. Ludwig和R. Katz提出使用Eifel算法来减少由乱序数据包引发的伪超时与伪重传对TCP协议的影响[7]。Eifel的原理如图1所示,发送端在T1时刻发送报文S时,将时间戳插入TCP头部。在T2时刻,发送端检测到S丢失,重传S,并执行拥塞控制算法。重传的S与原始发送的S相比,包含不同的时间戳T2。当接收端收到原始的S后,发送应答时,包含原始S的发送时间T1。当此应答到达发送端时,发送端发现此应答包含的时间信息T1小于存储与Retransmit TS变量中的T2,由此判断此重传为假重传。当检测到假重传时,发送端会将拥塞窗口和慢启动门限值恢复到错误重传前的值,然后如同没有发生错误重传一样继续发送数据分组。
Eiefl算法的优点在于能够在很短的时间内检测出假重传,从而避免了后续不必要的重传和拥塞回退机制。Eiefl算法还可以解决分组乱序、分组重复等问题。Eifel算法的缺陷在于,Eifel算法必须使用TCP协议的数据段参数来进行错误重传判断,并且Eifel算法仅仅是在检测到伪重传时避免了拥塞窗口的减小,并不能减少伪重传的数据包数量,因此不能减少伪重传对带宽的消耗。
3.3 DSACK机制
重复选择确认机制(DSACK)通过扩展TCP协议的SACK选项来克服乱序数据包的影响[8]。
DSACK算法的原理如图2所示,发送端发送S1-S4数据包。由于网络原因造成S1数据包乱序,它在S4数据包之后到达接收端。因此S2,S3,S4数据包均会产生对S1的重复应答。在收到这3个重复应答后,发送端将重传S1。当重传的S1到达接收端后,会产生一个对于S5的重复应答,同时SACK信息会指明此重复应答是由S1引起的。当此应答到达发送端后,发送端就可以判断出刚才对于S1的重传是假重传。
DSACK算法要求发送端维护检测到分组丢失时的拥塞窗口和慢启动门限值等信息,发送端根据DSACK信息检测到假重传时,将拥塞窗口和慢启动门限值恢复到错误重传前的值。虽然没有增加分组的开销,但是它无法解决网络中的分组重复和ACK丢失等问题。如果包含DSACK信息的应答丢失,则接收端无法进行恢复。并且,由于DSACK信息在丢失恢复结束后才到达发送端,因此发送端在丢失恢复阶段无法检测到假重传。
4 结束语
本文总结了目前国内外学者提出的几种典型的TCP协议乱序数据包处理算法,并对这些算法进行了详细的分析和比较。综上所述,该领域仍存在着一些亟待解决的问题,未来的研究可以考虑从以下方面展开:
(1)充分利用TCP数据包头部的闲置字段,描述链接及网络状态,接收端可以利用这些状态参数,判断缺失的数据包是否是由于网络拥塞导致。
(2)设计更加合理的快速重传门限值设定算法,使其能够以较快的速度收敛于真实网络状态,同时算法应尽量减轻接收端的计算量和存储空间开销。
(3)利用接收端已知参数,如往返时延,重传超时时间等,在不增加接收端开销的基础上,判断乱序数据包的出现。
参考文献
[1] Nagle J. RFC896: Congestion control in IP/TCP Internet works. Internet Engineering Task Force, 1984.
[2] Internet2 NetFlow: Weekly reports. netflow.internet2.edu/weekly/. 2009, 11.
[3] Allman M, Paxson V, Stevens W. RFC 2581: TCP Congestion Control. Internet Engineering Task Force, 1999.
[4] Bennett J C R, Partridge C, Shectman N. Packet Reordering is Not Pathological Network Behavior [J]. IEEE/ACM Transactions on Networking, 1999, 7 (6): 789-798.
[5] Chaudhary R, Jacob L. Corruption and Reordering Robust TCP-Friendly Rate Contro l [J]. Computer Communications, 2005, 28: 97-107.
[6] Leung K C, Ma C. Enhancing TCP Performance to Persistent Packet Reordering [J]. Journal of Communication and Networks, 2005, 7(3):385-393.
等特点,对常用 TCP/IPV6 协议栈进行了裁减和简化,裁减掉一些不常用但不影响基本通信 功能的协议模块,同时对要保留下来要实现的各个协议进行简化,只实现其基本功能。设计完 成实现后的协议栈,具有代码量少,运行效率高和良好的可移植性等特点,适合于各种嵌入 式设备,是一种解决嵌入式设备接入 IPV6 网络的可行方案。
关键词:IPV6;嵌入式操作系统;邻居发现;ICMPV6;地址解释
Abstract
Via the research and analyse for the IPV6 technique in this article.In allusion to the MCU on embeded system is not fast,and the storage capability is low,we cut down the common IPV6 stack. In this design we cut down some unusuary used but not affect basic communication protcols.Besides, for the saved protocols we only realize it’s basic function.After the achievment we find that this stack little-codes, efficiency-runing and have good grafted ability. So it fit for embeded system devices, and be
considered as a feasible scheme for embedded system connecting to IPV6 network.
Keywords: PV6; Embedded Operating System; Neighbor Discovery; ICMPV6; Address Resolution.
1. 引言
嵌入式Internet技术是指把Internet技术 应用于嵌入式设备, 实现嵌入式设备的信息 交互,是嵌入式技术与Internet技术的结合, 具有非常广大的市场前景。目前不少厂商都 在进行这方面研究, 并推出了不少嵌入式 Internet解决方案,比较常用的成熟的解决方 案有,瑞士计算机科学院Adam Dunkels写的 ulP和 LWIP,它们以IPV4技术为基础,以精 简为指导思想,把复杂的TCP/IP技术引入嵌 入式设备,满足嵌入式设备接入网络的需 求。而作为IPV4改良版本的IPV6,是对IPV4 的升级和改进,是下一代网络的核心,如何 以IPV6技术为基础,设计一款和嵌入设备结 合的具 有 代码量 少 ,功能 简 单的精简 TCP/IPV6协议栈是一件非常现实意义的挑 战,也是本课题设计的目的所在。
2. IPV6 协议栈
IPV6协议栈是基于IPV6网络层的协议, 和IPV4一样,遵循现有互联网四层网络互联 体系结构,如图1所示。从图中我们可以看到, 协议栈分为网络接口层,互联网
层,传输层,应用层四层。应用层直接面 向用户,并提供访问其它层服务的功能;传 输层用于提供源主机和目的主机上的对等 实体对话;网络接口层屏蔽了具体的硬件实
现细节,负责底层数据的接收和发送;网络
层是整个TCP/IP体系结构的关键部分,其主 要功能是在网络上提供可靠的主机到主机 的数据传送。IPv6协议正是位于该层,它包 含的主要协议模块有IPV6,ICMPV6,邻居发 现ND,IPsec等。
2.1 IPV6 协议
根据RFC2460对IPV6功能的描述,IPV6 主要负责把上层来的数据段添加IPV6报头, 交由底层发送;把下层接收到的报文经过处 理和分析,交给TCP,UDP或ICMPV6处理。 和IPv4相比 IPv6的改变主要集中在以下几 个方面:地址容量的扩展,报头格式的简化, 支持扩展和选项的改进,数据流标签的能力,认证和保密的能力等[1]。
2.2 ICMPV6 协议
ICMPV6协议合并了IPv4中ICMP(控制 报文协议),I- GMP(组成员协议)、ARP(地 址解析协议)等多个协议的功能,实现差错 控制,地址解释等功能,并支持Mobile IPv6。 ICMPV6报文封装在IP报文中,是IP报文的 有效载荷数据,它通过它的各种错误报文和 信息报文的交换来实现差错控制,地址解释 和路由前缀信息获取等功能。
2.3 邻居发现(Neighbor discovery) 协议
邻居发现协议ND是IPv6协议栈中的核 心协议,是IPV6解决邻节点交互的一个重要 协议。它定义了下列问题的解决机制:路由 发现,前缀发现,参数发现,地址自动配置, 地址解释,下一跳决定,邻居不可达,重复 地址检测,重定向。邻居发现的这些功能是 通过5个ICMP报文(邻居请求/邻居通告报 文,路由器请求/路由器通告报文,重定向报 文)的交换来实现的。 3. IPV6 协议栈的精简
协议栈精简的核心是“微型化”,我们对 协议栈进行协议模块裁减和单个协议简化。
3.1 协议模块裁减
协议模块裁减是指在保障基本通信功 能的前提下尽可能去掉一些协议模块,节省 系统资源。网络接口层我们只考虑 802.3 以 太网协议(CSMA/CD,MAC,LLC),不考 虑面向 CAN,RS-232,RS-485,射频,蓝牙等 相关的支持模块。接入方式上只考虑用路由 器接入方式,不考虑拨号连接方式,去掉和 拨号连接方式相关的面向点对点连接的 PPP 协议和 SLIP 协议,这两个协议在网络 接口层占用的代码量比较多;IP 层只实现基 本的报头,不实现扩展报头,去掉基于认证 头和封装安全载荷头选项的 IPsec 协议,安 全控制交给其他层。ICMPV6 和 ND 是核心
协议必须保留;传输层 TCP 和 UDP 可以全 部实现也可以只实现一种,考虑的适应性, 本设计中都给予实现。因此协议模块裁减后 要实现的核 心协议族 为 802.3 , IPV6 ,
ICMPV6,ND,TCP,UDP。
3.2 单个协议简化
单个协议简化是指以单个协议为目标, 进行功能和数据结构的简化。对 IPV6 协议 来说,只接收,发送报文,不支持报文的分 片与重组,不支持扩展报头选项,对可靠连 接传输来讲,包过大得不到确认,会根据拥 塞控制机制和重传机制,减少数据分组长 度,进行重新发送,对大多数应用来说这不 会产生其他严重问题。对 ICMPV6 来说,只 实现错误报文中的目的不可达报文,信息报 文中的应答回复报文,不实现超时报文,报 文过大报文和应答请求报文,一般包过大, 超时报文由路由器实现,应答请求报文用于 主动测试中发起测试的 PC 机一端。对邻居 发现 ND 模块来说,只实现邻居请求和邻居 应答报文,嵌入式设备刚接入网络,它可以静 态的等待网络上路由器定时发送的路由公 告报文,而不是主动发送路由请求报文来获 取,不需实现路由请求/路由应答报文。嵌 入式设备连接的邻居接点,路由一般简单, 传输量少,不需重定向报文来进行路由定 向。简化的大块在 TCP,TCP 是整个协议簇 中最复杂,代码量最多的协议。它的功能模 块有:滑动窗口,流量控制,拥塞控制,TCP 连接状态机,往返时间估计,重传协议。本 协议栈的目标是有操作系统支持的嵌入式 系统,速度和存储量比 8 位和 16 位单片机 都有提高,不必采用分配固定缓冲区的形式 进行接收一帧处理一帧,可以考虑采用分配 一个较大的缓冲区实现滑动窗口机制,用来 提高传输效率,实验证明,传输效率的提高 是明显的,往返时间估计和重传机制比较简 单,代码量不大,可以实现,TCP 状态机表 示 TCP 进程通信的状态迁移,是 TCP 的核
心必须实现,可以不实现流量控制机制,因
为流量不是很大。因此 TCP 模块实现的功 能有:TCP 有限自动机,滑动窗口,往返时 间估计,重传协议。忽略流量控制与拥塞控 制模块,在可靠连接中,当因拥塞而发生数 据丢失的时候,发送方收不到确认就采用重 传机制重发数据[2]。
4. 嵌入式精简 IPV6 协议栈的设
计与实现
在设计协议栈过程中,我们在嵌入式操 作系统基础上设计和实现一个操作系统模 拟层,实现基本的时钟,消息管理和进程同 步等基本操作系统功能。协议进程方面,把 所有的协议栈封装到单独进程中,应用程序 可以驻留在其中或作为一个单独的进程,这 样既实现了与操作系统分离,又避免了层间 切换。对于内存管理采用类 BSD buf 结构, 把静态缓冲区和动态缓冲区链接起来[3]。
4.1 IPV6
IPV6 模块主要用于完成对接收到的 IPv6 数据报进行处理,对需要发送的 IPV6 数据包进行构造并递交底层发送。当接收到 一个数据包时,网络设备驱动调用 ip_input() 函数来对其 IP 报头进行检查,检查其版本 号,报文长度,载荷长度,目的节点地址和 下一报头,待检查无误后,根据下一包头的 类型分别提交给不同的处理模块。当要发送 数据时 , 必须要知道发 送报文的下 一跳 IPV6 地址,以及该地址的相对应 MAC 地址, ip_route()函数就是为实现这样的功能而设 计的,其获取下一跳 IPV6 地址与其对应 MAC 地址的处理流程如图 2 所示。 图中,目的缓存用来存储着一系列最近 的报文流量与对应的下一跳 IP 地址的关系,
前缀列表存储着一系列子网前缀和其他地 址前缀及其对应的下一跳 IP 地址的关系, 如果两者中都没有找到匹配的记录,则再从 前缀列表中选择默认路由器作为传输的下 一跳 IPV6 地址。
在成功获取了下一跳 IPV6 地址后,数
据就进入传输阶段,传输阶段由 ip_outputif() 函数控制,ip_output()函数填充好报头,选择 好发送网络接口,然后激活发送网络接口进 行数据发送[4]。
4.2 ICMPV6
ICMPV6 负责接收, 解释和发 送 ICMPV6 报文。收到报文后,如果为邻居信 息报文则转交给邻居发现模块,如果为诊断 报文则交给 ICMPV6 诊断模块。ICMPV6 模 块只实现了应答回复报文,目的不可达报 文。当处理到达的 IP 报文时,如果下一报 头既不是 TCP,UDP 也不是 ICMPV6,那么 表示在嵌入式设备端的协议栈的已经到达 IP 层,是端口不可达,发送目的不可达报文。 当收到 ICMPV6 的应答请求报文时,就发送 应答回复报文,其格式与请求报文相似,在收 到的请求报文的基础上改变报文类型,重新 计算校验和,
在 IP 报头中将源,目的地址对调就可 以了。4.3 邻居发现
邻居发现是精简 IPV6 协议簇最核心的 协议,它利用邻居请求报文和邻居公告报文 的交换,实现地址解释,地址重复性检测, 以及地址自动配置功能。不实现路由器请求
/路由器公告报文,和重定向报文。
邻居请求报文
类型值为 135,报文 IP 头的源地址域为 发送邻居请求报文接口的地址或者未指定, 目的地址域为与被请求目标地址相关联的 被请求节点组播地址,或者就是被请求目标 地址本身。ICMPV6 报头域中的目标地址域 为被请求目标地址。选项域可以包含源链路 层地址选项,用来告诉对方发送请求节点的 MAC 地址,当源地址为指定
地址时必须包含该选项。
邻居公告报文
类型值为 136,用来响应邻居请求报文, 或者用来告知节点其链路层地址的改变,报 文 IP 头的源地址为发送邻居公告报文的接 口地址,目的地址为发送邻居请求的单播地 址,或者是用来公告给所有邻居节点其链路 层地址改变的全节点多播地址。目标地址就 是被解释的 IPV6 地址,或者在地址唯一性
验证中将要采用的 IPV6 地址。 地址解释就是节点仅仅知道邻居节点
IP 地址的情况下,通过发送邻居请求报文和 接收邻居公告报文,来得到对应节点链路层 地址的过程,是邻居发现模块中最重要的一 个功能模块,其处理过程如图 3 所示。
节点 A 知道节点 B 的链路 IPV6 地址
FEC0:0:0:1::B 但不知道节点 B 的链路层地 址 00-10-5C-F7-5C-96,沿箭头方向,A 发送邻 居请求报文,IP 域的目的地址是要求被解释
的目标地址 FEC0:0:0:1::B。节点 B
收到邻居请求报文后,查看目标地址就是属 于本机,是则发送一个单播的邻居公告报文 给 A,在邻居公告报文的目的链路层地址选 项 里 包含节 点 B 的链 路层 地址
00-10-5C-F7-5C-96。这样
节点 A 知道了节点 B 的链路层地址, 地址解释过程完成[5]。
5. 测试与验证
5.1 在 Altera De2 上的实现与测试
课题的开发环境: Altera De2(硬件平 台), Quartus II 5.1 和 Nios II 5.1(软件平 台),整个开发过程以 LWIP1.1.0 为参考, 在理解了 LWIP 的结构后在结合开发环境改 写。完成后对协议栈进行了测试和验证,测 试主要集中在网络层的 ND,IPV6,ICMPV6 模块。由 于邻居发 现模块建 立在 IPV6,ICMPV6 基础上的,对邻居模块的测试 相当于对 IPV6 和 ICMPV6 也进行了测试,
很具有代表性[6]。
受周围网络环境中无 IPV6 路由器所 限,测试在 IPV6 局域网上进行,Altera de2 通过以太网与 PC 机直接相连。测试对象电 路板 MAC 地址为 00-10-5C-F7-5F-
5D,其经过地址转换算法得到的本地 IPV6 地址为:fe80:210:5cff:fef7:5f5d,当它 接入网络时,为了对自己将要配置的地址进 行唯一性验证,它要发送邻居请求报文,通 过 PC 端网络抓包工具 Sniffer,我们抓到了由 目标板发出的邻居请求报文,如图 4 所示:
图 4 邻居请求报文
从图中看到其报文的类型值为 135。目
标地址为 fe80:210:5cff:fef7:5f5d。
测试协议栈在获取链路地址后,我们在
PC 机端执行 ping6 fe80::210:5cff:fef7:5f5d。 这个过程中要知道目标板的链路层地址,于 是发起针对目标板 IPV6 地址的地址解释。 在地址解释过程中,我们抓到了目标协议栈 发送的,包含自己链路层地址的单播邻居公 告报文,如图 5 所示。
图 5 邻居公告报文
由图可得知,报文类型值为 136,目标
地址为目
标板本地 IPV6 地址
fe80::210:5cff:fef7:5f5d。
5.2 在 s3c4410box 上的移植
移植目标平台:基于 s3c4410box 处理器的 ARM7 开发板,按照通用的方法,先移植了 uc/os-ii 嵌入式操作系统,在移植好 的基础上用操作系统函数编写了操作系统 模拟层,把网络接口层的函数指针指向电路 板提供的网卡驱动程序,在系统启动初试化 函数中添加针对 IPV6 协议栈的启动代码。 完成这些后我们使用 altera de2 上一样的测试方法进行测试,实验结果证明协议栈满足基本通信功能。证明协议栈可以在该电路板 上进行移植[7]。6. 结束语
本文介绍了嵌入式精简 TCP/IPV6 的设 计思想和实现方法,精简性和可移植性是其 考虑的主要方面,该协议栈是一种解决了嵌 入设备和接入 IPV6 网络的可行解决方案。
参考文献
[1] Robert e f. Embedded Internet Systems Come Home[ J]. IEEE Internet Computing,2001,5(1):52-53.
[2] Ruhuarvi j,Mahonen P,Saaranen M J. providing
[3] Soung S. Network-Driven layered multicast with IPV6[J],Lecture Notesin Computer Science, 2000 , Volume
18 :11.
[4] Liu Li-feng,Zou Shi-hong. A congestion and rate control scheme based on directed diffusion in wireless sensor networks[J].Journal of Beijing University of Posts and Telecommunications,2006,29(2):54-58.
[5] Chris M,Maillik T, A look at native Ipv6
multicast[J], IEEE Internet Computing,2004 Volume8 Issue4: 48
[6] 周立功. SOPC 嵌入式系统实验教程. 深圳:北京航空航天出版社. 2006 :241-248
【关键词】面向连接 无连接 区别 TCP协议
1 面向连接和无连接区别概述
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。面向连接和无连接协议可以,而且通常也确实会共享同一条物理介质。
无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系。
通常这就意味着客户端和服务器不会进行长期的对话--客户端发起一条请求,服务器回送一个应答。这还意味着协议很可能是不可靠的。也就是说,网络会尽最大努力传送每一个数据报,但并不保证数据报不丢失、不延迟或者不错序传输。
另一方面,面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。记住这些状态,协议就可以提供可靠的传输。典型的面向连接协议有三个阶段。第一阶段,在对等实体间建立连接。接下来是数据传输阶段,在这个阶段中,数据在对等实体间传输。最后,当对等实体完成数据传输时,连接被拆除。
一种标准的类比是:使用面向连接的协议就像打电话,而使用无连接协议就像寄信。给朋友寄信时,每封信都是一个独立寻址且自包含的实体。邮局不会维护以往通信者的历史记录--也就是说,它不会维护信件之间的状态。邮局也不保证信件不丢失、不延迟、不错序。这种方式就对应于无连接协议发送数据报的方式。
这种类比虽然很形象,但并不是非常贴切的。电话系统有实际的物理连接。而我们的"连接"则完全是想象的--它只是由两端记录的状态构成的。为了说明这一点,我们来看看当一个空闲连接一端的主机崩溃并重启时会发生什么情况。
2 TCP\IP协议应用
既然无连接协议有这么多的缺点,大家可能会奇怪,为什么还要使用这种协议呢?我们会看到,在很多情况下,使用无连接协议构建应用程序都是有意义的。但更重要的是,无连接协议是构建面向连接协议的基础。为了更具体地说明这个问题,来看看TCP/IP协议族,TCP/IP基于一个4层的协议栈。
栈的底部是接口层,直接与硬件相连。栈的顶部是应用程序,比如Telnet、ftp和其他标准的以及用户编写的应用程序。因此,IP是构建整个TCP/IP协议族的基础。但IP提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组,将它们封装在一个IP分组中,根据路由为分组选择正确的硬件接口,从这个接口将分组发送出去。一旦将分组发送出去了,IP就不再关心这个分组了。和所有无连接协议一样,它将分组发送出去之后就不再记得这个分组了。
现在我们来看看TCP是怎样利用这种简单的无连接服务来提供可靠的面向连接服务的。TCP的分组被称为段(segment),是放在IP数据报中发送的,因此,根本无法假定这些分组会抵达目的地,更不用说保证分组无损坏且以原来的顺序到达了。
首先,它为TCP段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏。
第二,它为每字节分配了一个序列号,这样,如果数据抵达目的地时真的错序了,接收端也能够按照恰当的顺序将其重装起来。
第三,TCP提供了一种确认-重传机制,以确保最终每个段都会被传送出去。
确认/重试机制是到目前为止我们讨论的三种附加机制中最复杂的一种,我们来研究一下它是怎样工作的。
TCP连接的每一端都维护了一个接收窗口(receive window),接收窗口就是可以从对等实体接收的数据序列号范围。最小值表示窗口的左边界,是所期望的下一字节的序列号。最大值表示窗口的右边界,是TCP缓冲区空间所能容纳字节的最大编号。使用接收窗口而不只是所期望的下一字节计数器,就可以通过流量控制来提高可靠性。流量控制机制可以防止TCP传输的数据使其对等实体的缓冲区空间溢出。
我们要注意这样一个事实:RTO定时器超时并不意味着原来的数据没有到达目的地。有可能是ACK丢失了,或者原来的段在网络中延迟的时间太长,以至于在其ACK到达之前RTO定时器就超时了。但这并不会造成什么问题,因为如果原来的数据确实到达了,那么重传的数据就会处于接收端TCP接收窗口范围之外,会被丢弃。
IP地址(这些地址通常都是以因特网标准的点分十进制表示法给出的)用来将一个IP数据报传送给一台特定的主机。数据报到达目的主机时,还需要将其数据传送给恰当的应用程序。例如,一个UDP分组的目标可能是回声服务,而另一个的目标则可能是时间查询服务。分组到达时,内核会搜索其套接字列表,查找一个与分组中的协议、地址和端口号相匹配的套接字。如果找到了匹配的套接字,就由指定的协议(在我们所讨论的情形中,就是TCP或UDP)来处理数据,并将这些数据提供给所有打开了匹配套接字的应用程序。
3 小结
总之,在本文中,我们研究了无连接和面向连接协议的区别。可知道,不可靠的无连接数据报协议是构建可靠的面向连接协议的基础,还简单介绍了可靠的TCP协议是如何构建在不可靠的IP协议上的。对TCP来说,连接完全是想象的。它是由端点所记忆的状态组成的,并不存在"物理"连接,而打电话的时候是有物理连接的。
参考文献
[1]朱加强编著.计算机网络技术[D].北大燕工教育研究院,2007(06).
[2]魏大新,李育龙编著.Cisco网络技术教程(第2版)[M].北京:电子工业出版社,2007(04).
[3] 陈涓,赵振平译.TCP/IP高效编程:改善网络程序的44个技巧[M].北京:人民邮电出版社,2011(04).
[4]王达编著.网络工程师必读―网络工程基础[M].北京:电子工业出版社,2006(07).
[5]网管员世界杂志社编著.网管员世界2011超值精华本[M].北京:电子工业出版社,2011(06).
作者单位
关键词:以太网;数据包;TCP/IP;套接字
中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)29-7122-03
Investigation of Data Packet Interception System Based on TCP/IP Protocol
LI Na
(Department of Computer Science & Technology, Shaanxi University of Technology, Hanzhong 723001, China)
Abstract: This article discusses the TCP/IP protocol (which is the IP protocol version IPv4) packet capture and analysis technology. By using the technology that allows a host to receive all the data flowing through the host package. The system uses the Socket (Socket) on the card program to achieve the interception and analysis of the data packet. The technology in the field of network security and network management has a pivotal position.
Key words: ethernet; packet; TCP/IP; socket
网络数据监听是网络入侵和网络安全协议技术研究的核心技术。监听技术主要是对网络的状态、信息流动和信息内容等进行监视,相应的工具被称为网络分析仪。在几乎所有的IDS(入侵检测系统)中,最基本的要求就是要能够实现网络监听与过滤,所有的安全策略、防护、检测、响应都建立在此基础上,它是帮助网络管理员查找和解决网络故障,为防火墙和入侵检测系统构建基础。因此,局域网数据监听系统的研究,对于更好的维护计算机网络及解决网络安全问题有着重要的意义。
1 数据包截获及分析工具设计
1.1 设计目标
通过原始套接字(SOCK_RAW)和网卡的混杂工作模式截获和扫描经过网络通信端口的IP数据包,实现网络流量统计、网络协议分析等功能。
1.2 数据报截获原理
信息在网络中是以广播形式发送的,以太网卡收到报文后,通过对目的地址进行检查,来判断是否是传递给自己的,如果是,则把报文传递给操作系统;否则,将报文丢弃,不进行处理。数据包捕获程序工作在网络底层,将网卡设置为混杂模式以后,从网络底层捕获到的数据包会直接上发给应用程序进行处理,而不象普通的数据包那样经过操作系统的层层过滤。这样一来,应用程序接收到的数据包是最原始的数据包,是经过封装的。也就是说监听主机接收到的数据包中,除了数据包本身的内容之外,还带有从对方主机中的传输层、网络层以及数据链路层等各层打上的数据包头信息,所以要想获得数据包里的应用数据,是需要我们自己来按照每一层的协议剥离数据包头中的每一层首部内容的,这就是协议分析需要完成的工作。
1) 首先是需要去掉数据链层的包头,此时可以获得IP数据报,在这一层中可以对IP数据报做一定的统计和分析,如流量统计、网络扫描等等;
2) 对于IP数据报去除网络层的包头以后,可以获得传输层数据报,在该文的模型中就特指的TCP报文和UDP报文,对这一层数据报进行协议分析的主要工作就是根据TCP数据包和UDP数据包的包头标志,将一个连接的所有IP数据报重整还原出一个完整的TCP流和UDP流,在这一层中还可以获得数据报的端口号信息,根据端口号进一步判断数据报属于何种应用层协议。
1.3 总体设计
该软件是运用Microsoft Visual C++开发的,该软件主要由两大主要部分(功能)构成:
1) 数据包截获:用程序实现本地网卡状态为“混杂”模式,当网卡处于这种“混杂”方式时,该网卡具备“广播地址”,它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
2) 数据包分析:通过对数据包帧的格式的分析,判断数据包所含协议的类型,源IP地址及目的IP地址,源端口和目的端口。这样我们对数据包的安全性有所了解。
数据包捕获模块用于监视和验证网络流量情况,可以捕获通过原始套接口(Socket)的原始数据包(Raw Packet),当一个数据包到达网络接口时数据包捕获程序就直接从缓存区读取捕获的数据包,以供数据分析和处理时调用。数据包截获模块的结构如图1所示。
在数据包捕获程序中,通过设置网卡工作于混杂状态,对网络链路进行监听并收集数据包,从而获得数据包头信息。其流程图如图2示。
可以看出,整个监听检测程序主要分为两大部分:程序驱动程序部分和应用程序部分。驱动程序工作在核心态,负责网络数据的接受和发送;应用程序工作在用户态,除了与驱动程序进行正常的通信外,还需要将有关信息显示出来,并提供过滤等操作。缓冲区由应用程序动态分配提供。
2 数据包截获及分析工具代码实现
1) 创建套接字
使用Socket()函数创建原始套接字Socketfd=Socket(AF INEF,SOCK RAW,0)。第一个参数是地址类型,设为AFINET~I是用于不同主机之间的通信;第二个参数即Socket的类型参数,这里使用SOCK RAW;第三个参数是协议参数,指定程序使用具体的协议。这里使用0,表示TCP/IP协议。
2) 将网卡设置为混杂模式
在程序中使用WSAIoct10函数是用来将网卡设置为混杂模式的。IntWSAloctl(SOCKETS, DWORDdwloC-ontrolCode, LPVOID IpvinBufer, DW ORDcbinBuffer, LPVOID lpvoutBufer, DWORD cbout-Bufer,LPDW ORD lpcbByteReturned, LPW SAOV?ELAPPED lpOverlapped, LPW SAOVERLAPPED-COM PLETION-ROUTINE IpcompIetionRoutine)。
3) 捕获数据包
网络接口设置为混杂模式以后,进人捕获数据包的模块。调用Recv(socket,bufer,sizeof(bufer),0)函数。其中第一个参数是以连接套接字的描述符。第二个参数是接收数据的缓冲区地址。第三个参数是缓冲区大小。第四个参数是调用方式,O表示无特殊行为。
引言
S1C33209是EPSON公司推出的RISC结构的32位高性能CMOS微处理器,具有高速、低功耗、低电压操作、精简指令集等特点,提供乘与累加功能,既可用于办公设备,也特别适用于需要高级数据处理的便携设备,可以进行高速运算、灵活的I/O口控制和高效的数据操作。S1C33209具有8KB的内部RAM,其运算速率可达60MHz,加上优化的多数为单时钟周期的指令集,使S1C33209吞吐量大为提高。S1C33209比常规MCU有更快的运算速度及可靠的性能、可重复编程的结构,使得精简的TCP/IP能够在其中可靠运行。
1 硬件平台结构及设计
信息家电远程访问时,通信数据量不大,10M以太网的通信速率即可满足要求;其次信息家电对实时性的要求不高,可定位在秒级。
在这种情况下,构造了家电网络硬件平台服务器S1C-WebServer,其结构如图1所示。S1C33-WebServer主要由三部分组成,即S1C33209微处理器、RTL8019AS全双工以太网控制器(RealTek公司出品,100脚的TQFP封装,最大速率10Mbps,自带16KB的SRAM,工作在Ethernet II和IEEE802.3、10Base5、10Base2、10BasetT下,全双工,支持8位与16位数据总线,与NE2000兼容)、可擦写Flash(采用Intel的E28F320,容量为4MB)。考虑到Flash的擦写在程序调试中不太方便,所以为S1C33209外围扩展512KB的SDRAM。在S1C33209中,运行用户程序和S1C33-Stack。在Flash中,存放S1C-WebServer的各种Web资源信息,综可处理Web页面、图像文件等,与PC机上WebServer中的硬盘可以存储大量的不同页面。Flash的容量决定了WebServer的资源文件的大小。RTL9019AS是Ethernet控制器,负责S1C33209与Ethernet的数据传递。在信息家电已具备RS232或相关标准接口的条件下,使用家庭自动化总线HAB(Home Automation Bus)作为S1C33-WebServer与家庭网络协议SHNP(Simple Home Networks Protocol)。家电通过RS232接口与S1C33-WebServer连接,经由EEthernet接入Internet。
经过分析,S1C33209与RTL8019AS读写时序是兼容的,而且MCU的读写时延比RTL8019AS小得多。MCU与RTL8019AS的连接如图2所示。RTL8019AS的工作电压为5V,而S1C33209的工作电压为3.3V,所以RTL8019AS的数据线输出需要电平的转换。选用2个8位(采用16位数据总线)的具有双向数据传输功能的74HC245来完成,由于S1C33209的输出电平符合RTL8019AS输入电平的要求,所以地址线可以直接相连,而不需电平转换,RTL8019AD中断信号(INT0)为高电平有效,在S1C33209中选用端口中断输入的K60端口与之相连。由于S1C33209的中断有效方式(高、低电平或脉冲)可以根据对寄存器的设置调节),所以不用对INT0作反向或电平转换。
2 精简TCP/IP协议栈的实现
构建的S1C33-Stack运行在以S1C33209嵌入式CPU为基础的硬件平台上,是一组可配置的多种Internet协议的组成。这些协议按照分层协议栈的方式组织,包括应用层的HTTP、DHCP、SMTP,传输层的TCP、UDP,网络层的IP/ICMP、ARP,通过链路层和物理层(如Ethernet)进行数据的交互。S1C33-Stack的结构模型如图3所示。S1C33-Stack利用S1C33的高速处理能力处理TCP/IP数据包,避免了在有限容量的RAM中缓存大量数据,使得控制器可以处理比内部RAM总线更多的数据包。利用嵌入的S1C33-Stack,Webserver能通过Hypertext Transfer Protocol(HTTP)与任何浏览器通信,能够提供各种类型的资源,如HTML、图片文件等。这些资源可以使用一种特殊的文件系统URI,被存放在容量为4MB的Flash中。这种文件系统可包含任意多的目录,对URL的长度也没有限制。
考虑到嵌入式系统的可用资源有限,在此采用经过裁减的TCP/IP协议栈—uIP。uIP协议主要包括TCP/IP协议组中的四个基本的协议:ARP、IP、ICMP、TCP。链路层协议,如PPP,则作为设备驱动在uIP底层实现。应用层协议,如HTTP、FTP、SMTP则作为应用程序在uIP上层实现。
(1)地址解析协议ARP
该协议将IP地址映射成以太网MAC地址。在uIP中,ARP的执行依靠维持一张表来完成IP地址和MAC的地址的映射。当有一个IP数据包要发送到以太网上时,从ARP表中查询相应的MAC地址。如果在ARP表中找不到IP地址则送出相应的ARP请求。当目的主机收到ARP请求报文后,发送ARP REPLY报文将请求的MAC地址送出。当收到ARP REPLY后,ARP表被更新。每隔10s,ARP表就被新新一次,旧的ARP表项将被删除。每个ARP表项的生存周期是20min。
(2)网间协议IP
在uIP中,IP层的代码有两个功能:验证到来的IP报文报头的正确性,并且对TCP和ICMP报文实行分流。因为不考虑IP的分片和重组,uIP中IP层的代码非常的精简。
(3)网间报文控制协议ICMP
在uIP中,仅有一种类型的ICMP信息被实现:ICMP ECHO主要用于应用程序ping,检查网络是否连通。在uIP中,ICMP ECHO通常以一种很简单的方式进行处理;将ICMP类型由“ECHO”改为“REPLY”,同时调整ICMP校验,交换发送方和接收方的IP地址。
(4)传送控制协议TCP
为了减少对内存的使用,在uIP中,TCP并不使用滑动窗口来接收和发送数据,到达的TCP报文并不进行缓冲而是立刻交给应用程序处理。但是应用程序本身可以对要发送的程序本身可以对要发送的数据进行缓冲,因为每次连接中通常有若干的TCP报文要发送。uIP网络通信模块结构如图4所示。
网络通信需要要底层RTL8019AS驱动程序的支持,参考RTL8019AS与S1C33209的资料说明文档,编写出针对此系统的RTL8019AS驱动。
uIP并不缓存到达的数据包,当网络上有数据包(在这里专指出太帧)到达网卡时,网卡驱动程序将暂存在网卡缓存中的数据包,一次一个的以DMA形式传送到目标板上的RAM中。这时将会有一段代码将到达目标板RAM中的数据包复制到全局数组uip_buf[]中,uIP协议栈程序随后对uip_buf[]中的数据进行操作。
当上层应用程序或协议栈程序产生了向网络上发送的数据包时,也将数据包放入uip_buf[]。然后调用网卡驱动程序,将uip_buf[]中的数据读到网卡的缓存中,随后发送到网络中。
在此要说明一下协议栈与网卡驱动程序、应用程序之间的同步机制问题。在系统初始化的时候,通过操作系统提供的系统调用vcre_tsk()创建三个任务:任务一(task1),uIP协议栈;任务二(task2),家电监控程序;任务三(idle_task),空闲任务。而网卡驱动程序则作为硬件中断,由“检测到网络上传过来数据包”事件激发。
整个协议栈程序流程图如图5所示。
任务一的优先级最高,任务二次之,任务三的优先级最低。当系统开始运行时,任务一首先进入RUN状态,在任务一中加入系统调用wai_flg(),由于没有网络请求,任务一随后进入WAIT状态。此时任务二进入RUN状态。当网络上有数据包到达,网卡驱动程序作为硬件中断开始执行。在退出中断前,通过系统调用set_flg(),将任务一期望的标志位置位。当中断返回后,由于任务一的等待条件已经满足,任务一的优先级又高于任务二,因此任务一进入RUN状态,即uIP协议开始处理数据。如果网络上一直有数据包到达,则任务一和中断程序不断的切换。当网络任务完成,返回到任务二的断点处继续向下执行。
由于uIP不缓存网络数据,因此在任务一执行的过程中,即uip_buf[]正在作时,将关闭所有中断。这样可以避免数据包被破坏,缺点是实时性差了一些,但是满足本系统要求。
3 操作系统
本系统使用的操作系统是由EPSON公司提供的ROS33V31。ROS33是为S1C33系列MCU提供的一种嵌入式实时操作系统,符合uITRON 3.0标准。使用ROS33可以迅速、有效地开发针对打印机、PDA以及各类控制设备的嵌入式应用程序。
ROS33具有以下特点:
*支持uITRON 3.0标准——符合该标准的S级*最大任务数为255,采用优先级调度机制,支持9种不同的优先级,提供信号灯、邮箱、消息缓冲等多种通信机制:
*内核优先并紧凑——最小可为1.7K;
*响应快——最快调度响应时间为7.8μS(CPU主频为33MHz,下同),最大中断屏蔽时间为4.3μs ;
*高级语言支持——除汇编语言外,还支持基于ANSI标准的C语言编程。
注释:μITRON将系统功能分成四级。R级(必要级)只提供包括实时、多任务OS所需的基本系统调用;S级(标准级)提供所有标准的系统调用;E级(扩展级)包括附加的和扩展的系统功能;C级(CPU依赖级)的系统功能依赖于具体的CPU和系统实现方式。
ROS33基本内核按功能划分为6大部分:
*任务管理——负责系统中任务状态的变迁;
*任务相关的同步管理——通过睡眠/唤醒、挂起/解挂等操作,处理相关任务及任务之间的同步关系;
*同步与通信——通过信号灯、事件、邮箱等通信机制,实现独立任务之间的同步与通信;
*系统管理——对系统环境的管理;
*时钟管理——日历时钟、定时器、定时任务等的管理;
*中断管理——开/关中断。
图6给出了ROS33内核的概念模型。
4 Web服务器及上层应用程序框架
WEB服务器所采用的方式称为uip_connect,比通常在设计中所使用的Socket套接字更适合于嵌入式系统下面即是WEB服务器的大体框架。
#include<uip.h>
void http_listen_init(void){
uip_listen(80);
} //http listen初始化
void listen_init(void){
http_listen_init();
}
void application(void){
if(uip_connected()) //如果当前的连接状态为connected
switch (uip_conn->lport){
case htons(80):
httpd; //如果80 PORT有数据到达,则调用HTTP处理HTML文件的传送
}
}
首先,服务器与客户机建立连接,再通过侦听端口80,判断是否有客户请求到达,若有则将调用应用程序httpd进行相应处理,否则,继续侦听。Httpd是用于处理HTTP请求的应用程序,具体设计在协议栈uIP中有描述。uip.h是协议uIP的一个头文件。
在应用软件上实现简单WEB服务器功能,其主要由两个模块构成:一是用户登陆模块;二是家电监控模块。用户登陆模块需要解决用户的合法性检查,即接收用户输入的用户名和密码,进行校验,合法则进入家单监控页面,非法则发出警告页面。家电监控模块针对各家电的硬件情况,收集信息家电的状态码,并通过网页形式显示。
在两个模块中,有一部分相似的处理,即对输入的数据进行解析。现在定义数组htmlinputs来存放解析后的信息。对表单输入的数据进行解析后,将其name值和value值分别存放在htmlinput_struct.name和htmlinput_struct.value里,便于以后的处理。变量htmlinputcount存放表单里输入变量的个数。定义如下:
struct htmlinput_struct htmlinputs[100];
int htmlinputcount=0;
除此外,定义函数get_inputs()和translate()对输入的数据进行处理。
Int get_inputs();//将从表单输入的数据分别装到对应的name/value数据队中
Void translate(char*sourcestr);//解读编码URL字符
具体程序代码在此就不再多述。
整个上层应用程序的流程图如图7所示。
关键词:计算机 网络通信协议
0 引言
本文就计算机网络通信协议、选择网络通信协议的原则、TCP/IP通信协议的安装、设置和测试等,作进一步的研究和探讨。
1 网络通信协议
目前,局域网中常用的通信协议主要有:NetBEUI协议、IPX/SPX兼容协议和TCP/IP协议。
1.1 NetBEUI协议 ①NetBEUI是一种体积小、效率高、速度快的通信协议。在微软如今的主流产品,在Windows和Windows NT中,NetBEUI已成为其固有的缺省协议。NetBEUI是专门为几台到百余台PC所组成的单网段部门级小型局域网而设计的。②NetBEUI中包含一个网络接口标准NetBIOS。NetBIOS是IBM用于实现PC间相互通信的标准,是一种在小型局域网上使用的通信规范。该网络由PC组成,最大用户数不超过30个。
1.2 IPX/SPX及其兼容协议 ①IPX/SPX是Novell公司的通信协议集。与NetBEUI的明显区别是,IPX/SPX显得比较庞大,在复杂环境下具有很强的适应性。因为,IPX/SPX在设计一开始就考虑了多网段的问题,具有强大的路由功能,适合于大型网络使用。②IPX/SPX及其兼容协议不需要任何配置,它可通过“网络地址”来识别自己的身份。Novell网络中的网络地址由两部分组成:标明物理网段的“网络ID”和标明特殊设备的“节点ID”。其中网络ID集中在NetWare服务器或路由器中,节点ID即为每个网卡的ID号。所有的网络ID和节点ID都是一个独一无二的“内部IPX地址”。正是由于网络地址的唯一性,才使IPX/SPX具有较强的路由功能。在IPX/SPX协议中,IPX是NetWare最底层的协议,它只负责数据在网络中的移动,并不保证数据是否传输成功,也不提供纠错服务。IPX在负责数据传送时,如果接收节点在同一网段内,就直接按该节点的ID将数据传给它;如果接收节点是远程的,数据将交给NetWare服务器或路由器中的网络ID,继续数据的下一步传输。SPX在整个协议中负责对所传输的数据进行无差错处理,IPX/SPX也叫做“Novell的协议集”。③NWLink通信协议。Windows NT中提供了两个IPX/SPX的兼容协议:“NWLink SPX/SPX兼容协议”和“NWLink NetBIOS”,两者统称为“NWLink通信协议”。NWLink协议是Novell公司IPX/SPX协议在微软网络中的实现,它在继承IPX/SPX协议优点的同时,更适应了微软的操作系统和网络环境。Windows NT网络和Windows的用户,可以利用NWLink协议获得NetWare服务器的服务。从Novell环境转向微软平台,或两种平台共存时,NWLink通信协议是最好的选择。
1.3 TCP/IP协议 TCP/IP是目前最常用到的一种通信协议,它是计算机世界里的一个通用协议。在局域网中,TCP/IP最早出现在Unix系统中,现在几乎所有的厂商和操作系统都开始支持它。同时,TCP/IP也是Internet的基础协议。①TCP/IP具有很高的灵活性,支持任意规模的网络,几乎可连接所有的服务器和工作站。但其灵活性也为它的使用带来了许多不便,在使用NetBEUI和IPX/SPX及其兼容协议时都不需要进行配置,而TCP/IP协议在使用时首先要进行复杂的设置。每个节点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”和一个“主机名”。在Windows NT中提供了一个称为动态主机配置协议(DHCP)的工具,它可自动为客户机分配连入网络时所需的信息,减轻了联网工作上的负担,并避免了出错。同IPX/SPX及其兼容协议一样,TCP/IP也是一种可路由的协议。TCP/IP的地址是分级的,这使得它很容易确定并找到网上的用户,同时也提高了网络带宽的利用率。当需要时,运行TCP/IP协议的服务器(如Windows NT服务器)还可以被配置成TCP/IP路由器。与TCP/IP不同的是,IPX/SPX协议中的IPX使用的是一种广播协议,它经常出现广播包堵塞,所以无法获得最佳的网络带宽。②Windows中的TCP/IP协议。Windows的用户不但可以使用TCP/IP组建对等网,而且可以方便地接入其它的服务器。如果Windows工作站只安装了TCP/IP协议,它是不能直接加入Windows NT域的。虽然该工作站可通过运行在Windows NT服务器上的服务器(如Proxy Server)来访问Internet,但却不能通过它登录Windows NT服务器的域。要让只安装TCP/IP协议的Windows用户加入到Windows NT域,还必须在Windows上安装NetBEUI协议。 ③TCP/IP协议在局域网中的配置。只要掌握了一些有关TCP/IP方面的知识,使用起来也非常方便。④IP地址。TCP/IP协议也是靠自己的IP地址来识别在网上的位置和身份的,IP地址同样由“网络ID”和“节点ID”(或称HOST ID,主机地址)两部分组成。一个完整的IP地址用32位(bit)二进制数组成,每8位(1个字节)为一个段(Segment),共4段(Segment1~Segment4),段与段之间用“,”号隔开。为了便于应用,IP地址在实际使用时并不直接用二进制,而是用大家熟悉的十进制数表示,如192.168.0.1等。在选用IP地址时,总的原则是:网络中每个设备的IP地址必须唯一,在不同的设备上不允许出现相同的IP地址。⑤子网掩码。子网掩码是用于对子网的管理,主要是在多网段环境中对IP地址中的“网络ID”进行扩展。例如某个节点的IP地址为192.168.0.1,它是一个C类网。其中前面三段共24位用来表示“网络ID”;而最后一段共8位可以作为“节点ID”自由分配。⑥网关。网关(Gateway)是用来连接异种网络的设置。它充当了一个翻译的身份,负责对不同的通信协议进行翻译,使运行不同协议的两种网络之间可以实现相互通信。如运行TCP/IP协议的Windows NT用户要访问运行IPX/SPX协议的Novell网络资源时,则必须由网关作为中介。如果两个运行TCP/IP协议的网络之间进行互联,则可以使用Windows NT所提供的“默认网关”(Default Gateway)来完成。⑦主机名。网络中唯一能够代表用户或设备身份的只有IP地址。但一般情况下,众多的IP地址不容易记忆,操作起来也不方便。为了改善这种状况,我们可给予每个用户或设备一个有意义的名称,如“HAOYUN”。
2 选择网络通信协议的原则
2.1 所选协议要与网络结构和功能相一致。如你的网络存在多个网段或要通过路由器相连时,就不能使用不具备路由和跨网段操作功能的NetBEUI协议,而必须选择IPX/SPX或TCP/IP等协议。另外,如果你的网络规模较小,同时只是为了简单的文件和设备的共享,这时你最关心的就是网络速度,所以在选择协议时应选择占用内存小和带宽利用率高的协议,如NetBEUI。当你的网络规模较大,且网络结构复杂时,应选择可管理性和可扩充性较好的协议,如TCP/IP。
2.2 除特殊情况外,一个网络尽量只选择一种通信协议。现实中许多人的做法是一次选择多个协议,或选择系统所提供的所有协议,其实这样做是很不可取的。因为每个协议都要占用计算机的内存,选择的协议越多,占用计算机的内存资源就越多。一方面影响了计算机的运行速度,另一方面不利于网络的管理。事实上一个网络中一般一种通信协议就可以满足需要。
2.3 注意协议的版本。每个协议都有它的发展和完善过程,因而出现了不同的版本,每个版本的协议都有它最为合适的网络环境。从整体来看,高版本协议的功能和性能要比低版本好。所以在选择时,在满足网络功能要求的前提下,应尽量选择高版本的通信协议。
2.4 协议的一致性。如果要让两台实现互联的计算机间进行对话,它们两者使用的通信协议必须相同。否则中间还需要一个“翻译”进行不同协议的转换,这样不仅影响通信速度,同时也不利于网络的安全和稳定运行。
3 TCP/IP通信协议的安装、设置和测试
局域网中的一些通信协议,在安装操作系统时会自动安装NetBEUI通信协议;在安装NetWare时,系统会自动安装IPX/SPX通信协议。在3种协议中,NetBEUI和IPX/SPX在安装后不需要进行设置就可以直接使用,但TCP/IP要经过必要的设置。下面是Windows NT环境下的TCP/IP协议的安装、设置和测试方法。①TCP/IP通信协议的安装:在Windows NT中,如果未安装有TCP/IP通信协议,可选择“开始/设置/控制面板/网络”,出现“网络”对话框后,选择对话框中的“协议/添加”命令,选取其中的TCP/IP协议,然后单击“确定”按钮。系统会询问你是否要进行“DHCP服务器”的设置。如果你的IP地址是固定的,可选择“否”。随后,系统开始从安装盘中复制所需的文件。②TCP/IP通信协议的设置:在“网络”对话框中选择已安装的TCP/IP协议,打开其“属性”,在指定的位置输入已分配好的“IP地址”和“子网掩码”。如果该用户还要访问其他Windows NT网络的资源,还可以在“默认网关”处输入网关的地址。③TCP/IP通信协议的测试:当TCP/IP协议安装并设置结束后,为了保证其能够正常工作,在使用前一定要进行测试。笔者建议大家使用系统自带的工具程序PING.EXE,该工具可以检查出任何一个用户是否与同一网段的其他用户连通,是否与其他网段的用户正常连接,同时还能检查出自己的IP地址是否与其他用户的IP地址发生冲突。
互联网是基于TCP/IP协议,TCP/IP是TransmissionControlProtocol/InternetProtocol的简写,而且TCP/IP协议由很多协议组成的。TCP/IP协议中有一个重要的概念就是分层,TCP负责发现传输的问题,保证数据的准确传输。而IP是给因特网的每一网设备规定一个地址,相当于一个精确地址,防止丢失。
网络协议即网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。
一台计算机只有在遵守网络协议的前提下,才能在网络上与其他计算机进行正常的通信。网络协议通常被分为几个层次,每层完成自己单独的功能。通信双方只有在共同的层次间才能相互联系。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。在局域网中用得的比较多的是IPX/SPX.。用户如果访问Internet,则必须在网络协议中添加TCP/IP协议。
(来源:文章屋网 )
关键词:无线TCP;无线局域网
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)16-31019-01
TCP Wireless LAN Technology
DING Zhi-yun
(Yancheng Institute Technician,Yancheng 224002,China)
Abstract:Wireless communications and the Internet is the future with the development trend. Internet TCP protocol provides reliable end-to-end services, multimedia services can provide QoS guarantees transmission is widely used in support such as FTP, Telnet, HTTP and Internet business. TCP was originally aimed at the design of cable channel, cable channel transmission performance is relatively good, network congestion that can affect QoS is the only reason, therefore this is a TCP Congestion Control and Flow Control. The channel features such as multipath fading, interference, and makes limited spectrum when the traditional wired TCP performance when used in wireless serious decline.
Key words:Wireless TCP;Wireless LAN
1 引言
根据OIS参考模型来看,传输层协议应该使用独立于下面各层的技术。例如,TCP不必关心IP是运行于有线网络还是无线网络,TCP也没有必要关心数据在数据链路层的转换和其他变换。在有线网络中这些假设正确,而在无线网则不成立。在有线网络中TCP负责传输层拥塞控制,而当今几乎所有的程序实现都假设分组丢失是由拥塞而非信道(数据链路层)错误引起的,所以当定时器超时后会放慢数据发送速度。这种方法隐含的意思是减轻网络的载荷以缓解拥塞,然而无线传输线路是很不可靠的,丢失分组是经常的事。解决分组丢失的最好方法是尽快地重发这些分组而不是放慢数据发送速度,如果这样只会使情况更糟。由此可见,在无线网络中对于分组丢失的错误解释使得网络的性能大大降低,有线网络TCP/IP参考模型包括网络接口层,网际层IP,运输层,应用层,其中TCP传输控制协议工作在运输层;无线网络逻辑结构包括物理层,数据链路层,网络层,高层协议,其中TCP工作在数据链路层。
2 影响TCP的无线环境因素
2.1无线链路数据包丢失原因
在传统的TCP中,绝大多数数据段和确认的丢失是由于网络拥塞引起的,而对于一般的无线链路,大多数丢失是由于以下原因引起的。
(1)数据包在高误码率的无线链路上传输发生的错误;
(2)连接的临时断开(由于信号衰落,用户的移动引起的连接临时断开或者网络断开)
(3)数据包在最后一跳路由器发生拥塞问题。
2.2影响TCP的无线环境因素。
(1)带宽有限
有线LAN的速率可达100Mb/s,而在IEEE802.2b中所规定的无线局域网的速率仅为11Mb/s。所以当无线主机和有线主机之间进行数据交换时会产生瓶颈。
(2)较长的链路往返时间RTT
一般来说无线媒介的等待时延比有线的要长。因为在无线网络中数据要借助电磁波进行传输,其间可能遇到障碍物或者影响介质,如此一来平均往返时间就会增加。
(3)误码率较高
因为无线链路采用空气中的电磁波做为介质,所以比起有线链路来更加容易丢失数据。
(4)用户的移动
当用户从一个蜂窝移动到另一个蜂窝时,期间会有一小段的断开时间,TCP会误将这一小段的时间使用拥塞控制/拥塞避免算法,引起网络性能下降。
(5)短流量
短流量数据传输导致数据链路不能得到充分利用
(6)功率损耗
3 提高无线TCP 性能的方案
(1)端到端方案
对于这类协议,发送端可以知道下层的信道是有线还是无线,此方案直接修改通信两端的TCP协议,修改后的协议可以改善无线TCP环境。如TCP-Reno,TCP-SACK等。TCP Reno 利用一定数目的累计ACK和超时计时器来判定分组是否丢失,但它只能判定一个发送窗口中的数据分组发生了丢失,而不能判定有几个分组丢失。所以当一个发送窗口中有多个分组丢失时,TCP Reno 无法给发送端提供足够的信息来进行快速恢复。为了解决这个问题,可使用增强型的TCP算法,如选择证实(SACK)算法和SMART算法。SACK中每一个ACK都包含连续三个数据分组被接收端成功接收的信息,其中每一个数据分组用开始和结尾的字节序号来描述。当分组丢失发生时,仍然使用标准TCP的拥塞控制机制。SMART机制中,使用的ACK中包含累积ACK和已经成功接收的TCP分组的序号,当发现序号不连续时,立刻重发。
此方案的优点在于符合TCP语义,通信时两端是一个完整的TCP连接,发送方收到的确认即意味着接收方收到了该数据。缺点在于需要修改双方的TCP协议,工作麻烦,并且只能和具备这些协议的主机通信。
(2)TCP分段连接方案
TCP分段连接方案采用的是分裂连接协议,比如间接TCP(Indirect-TCP)。在无线链路上,重传是差错恢复的有效方法,但因为端到端重传太慢,会引入长的时延,故可将TCP端到端连接分裂,将其为两部分,从无线主机到基站为无线连接段,使用改进的TCP/RLP协议;从基站到有线主机为有线连接段,使用传统的TCP/IP协议。无线链路上的数据丢失对发送端是屏蔽的。中间节点是基于数据的转发。此方案的优点是两个连接段均为同质的,对有线和无线部分上的超时可以分别采用不同的机制来处理,缺点是破坏了端到端的TCP连接语义,并且无线主机和中间节点需要修改TCP协议。因为现在每部分都是一个完整的TCP连接,中继站可以按通常的方式对每个TCP数据段进行确认,但是发送方收到的确认并不意味着接收方收到了该数据,而只是说明了中继站得到了该数据。
(3)TCP缓存方案
此方案最具代表性的是Snoop协议,Snoop协议在基站中引入一个“Snoop”的模块,如图5,该模块监视通过双向TCP连接的每一个分组。当固定主机向移动主机发送数据时,Snoop将已发送但还未得到接收端确认的TCP报文段保存在存储区中。利用从移动主机接收的累积复制TCP ACK的数目或本地计时器超时来判断分组是否在无线链路上丢失,并对丢失分组(仍然存在Snoop的存储区中)进行本地重传。同时,清除累计复制TCP ACK的计数,这样TCP发送端就不知道在无线链路上发生的分组丢失,即对TCP隐藏了与网络拥塞无关的分组丢失。
反之,当移动主机向固定主机发送数据时,Snoop 监视收到的分组的丢失情况,根据本地存储区排队长度等信息,区分该丢失的种类,是拥塞还是无线链路差错造成的,并记录下来。当收到固定主机发送的ACK 确认该分组丢失时, 在TCP ACK报文段的首部加上1bit 的ELN。ELN ( Explicit Loss Notification) 用于通知TCP 发送端分组丢失的种类。移动主机的TCP 根据收到的ELN 识别丢失与拥塞无关,因此,只重传该分组,而不启动任何拥塞控制算法。
此方案的优点是不破坏TCP语义,是通过对中继站网络层编码进行一些细小的改动来实现的,增加一种探测来探测和缓存发往移动主机的TCP数据段,以及传回的确认。缺点是Snoop协议并不能完全解决系统的分组丢失问题,比如在高拥塞丢失率的情况下性能较差。
4 结束语
本课题主要研究将基于有线的TCP技术应用于无线网络所带来的问题;提高无线TCP技术的性能方案;以及在实际环境中TCP所引起问题的解决。研究的目的在解决将基于有线的TCP技术应用于无线网络所带来的性能下降问题;掌握无线环境下TCP的差错和流量控制,从而提高无线TCP 性能。以及在以后构建无线网络环境时能更好地处理传输控制的性能,也有利于以后对无线局域网的差错控制和传输控制。
参考文献:
[1]刘乃安.无线局域网(WLAN)-原理,技术与应用.西安电子科技大学出版社,2004:322-336.
[2]谢希仁.计算机网络.北京:电子工业出版社,1999:68-83.
[3]金庆江.无线网络技术及应用.上海:上海交通大学出版社,2003:55-56.
关键词: 网络编程;TCP/IP;实时监测
0 引言
作为现代网络的主导技术,TCP/IP编程看起来非常简单,但在经历了最初的高效率后,往往会在细节面前停滞不前,这常常是因为对TCP协议底层细节的缺乏了解所导致的。
TCP是面向连接协议,而UDP是无连接协议,许多初学者发现可以没有任何数据流通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,则在两个TCP模块之间不交换任何信息。这意味着可以启动一个客户与服务器建立一个连接,然后离去数小时至数个星期连接依然保持。中间路由器可以崩溃和重启,电话线可以被挂断再连通,只要两端的主机没有被重启,则连接依然保持建立。
因此,初次接触TCP/IP协议组的程序员感到很迷惑:TCP中并没有可以在其他网络协议中发现的连接阶段的轮询,甚至发现TCP不给应用程序提供既时的网络连接中断的通知。一些程序员据此断定TCP不适用于一般的应用程序到应用程序的通信。TCP为什么不提供通知呢?
1 原理分析
TCP通常被称为可靠的协议,即“TCP保证发送数据的传输”,这通常会产生误解:TCP不会出错。事实是只要双方保持连接,TCP就能保证数据的正确传输,但是当连接中断时,就会产生问题,原因有3个:1)永久的或暂时的网络紊乱;2)对等方应用程序崩溃;3)对等方主机崩溃,当出现以上问题时,会使双方应用程序不能互相通信,而其中一个应用程序却不能立刻意识到。发送数据给对等方的应用程序可能在知道TCP在放弃重发之前才会发现连接中断,如果应用程序没有发送数据,可能永远不会发现网络已经中断。例如应用程序可能是一个正在等待对等方发出下一个请求的服务器,因为客户端不能和服务器通信,下一个请求永远不会到达,甚至客户端的TCP放弃并撤销连接,导致客户端中断,服务器也没有意识到这一点。
其他的通信协议如SNA和X.25,当连接中断时会给应用程序提供通知。比如简单的直接点对点专有链接复杂的任何协议都必须使用一种轮询协议来连续地测试对等方是否存在。轮询-选择协议可能会采用显式地发送“你有要发送给我的任何数据吗?”诸如此类的消息的形式,或者它们会采用后台静态帧的形式来检测虚拟线路是否仍然存在。每一个轮询消息都会消耗网络资源,而这些资源本来可以用于“有效负载”数据的传输。
对可获得的网络带宽的消耗是TCP不提供网络中断立即通知的一个原因。因为大多数的应用程序不需要即时的通知,所以没有必要以降低带宽的代价来提供这个功能。需要以一种及时的方式知道对等方不可到达的应用程序可以实现它们自己的机制来发现网络中断,如后面介绍的那样。
TCP/IP设计中使用的一个基本原则是终端对终端参数[Saltzer el al.1984],该参数应用到网络上时可以表述为所有的智能应当尽可能地接近连接的终端点,而网络本身应当相对没有智能。这就是为什么TCP自己处理错误控制而不是依靠网络来提供它的原因。当这个原则应用到监控对等应用程序之间的连接时,应用程序应当提供它自己需要的功能,而不是不管应用程序是否需要这个功能都由下层提供。
TCP不提供及时连接中断通知的最重要的原因是:网络突然中断时仍可以维持通讯的能力。TCP最早是美国国防部发起的一项研究的成果,它要求提供一个遇到战争或自然灾害引起的网络中断时仍然可以维持计算机之间可靠的通信的网络协议。通常网络紊乱是暂时的,路由器也可能找到连接的另一条路径。通过允许连接的暂时中断,甚至在终端应用程序意识到中断之前TCP就已经处理好了紊乱。
2 解决方案
2.1 方案一:使用TCP Keep-alive机制
人们希望知道连接是否中断了,因此许多TCP的具体实现提供了一个称作Keep-alive的机制用于检测死连接,但是它并不经常用于应用程序。如果应用程序启用Keep-alive机制时,TCP就会在连接已经空闲了一段时间间隔后发送一个特殊的段给对等方。如果对等方主机可到达而且对等方应用程序仍然运行,对等方TCP就会响应一个ACK应答。在这种情况下,TCP发送Keep-alive重置空闲时间为零,并且应用程序不会收到消息交换的任何通知。
如果对等方主机可以到达但是对等方应用程序没有运行,对等方TCP就响应RST消息,发送Keep-alive消息的TCP撤销连接并返回ECONNRESET错误给应用程序。这通常是对等方主机崩溃后重起的结果,因为如果仅仅是对等方应用程序中断或崩溃了,对等方TCP可能已经发送FIN消息了。
如果对等方主机没有响应ACK或RST消息,发送Keep-alive消息的TCP继续发送Keep-alive探询消息,直到它认为对等方不可到达或已经崩溃了。这时它就撤销连接并通知应用程序ETIMEDOUT错误,如果路由器已经返回主机或网络不可到底的ICMP消息的话,就返回EHOSTUNREACH或ENERUNREACH错误。
通过Keep-alive机制,TCP提供了协议层面的网络中断通知功能,但这种机制有很多问题以至于很少用于应用程序。