首页 > 文章中心 > icmp协议

icmp协议

icmp协议

icmp协议范文第1篇

关键词:计算机网络 WINSOCK 测试编程

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2012)08-0023-01

1、引言

当前在计算机应用中,Windows与网络已是最为广泛和不可缺少的应用。在Windows下的各种网络编程接口中,Windows Sockets越来越得到大家的重视,这是因为Windows Sockets规范是一套开放的、支持多种协议的Windows下的网络通信编程的API接口,也是Windws网络编程的事实标准,研究和开发在Windows下的网络编程技术具有普遍的应用价值。

本文通过对网络最基本的应用实例——网络测试程序的分析,使初学网络编程的人对Windows Sockets的使用有一个基本的了解。网络测试是网络编程中最基本的应用,用来测试与网络上另一个主机的网络连接是否正常。工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文原样传回给发送者,发送者通过与原报文对比及发送和接收报文的时间差得知网络通讯的好坏。下面就测试网络的C++程序进行分析,来了解Windows Sockets的使用。

2、网络测试程序的原理

通过向测试机发送ICMP回应请求消息,并接收ICMP回应回复消息,通过这些消息来判断与主机的网络连通状况。

ICMP(Internet Control Message Protocol)即Internet控制消息协议(RFC-792),它是TCP/IP协议集中的一个子协议,属于网络层协议。应用中,它使用IP做为底层支持,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用,每一种IP模块必须实现ICMP。ICMP报文有两种类型,ICMP错误报告报文和ICMP查询报文,每个ICMP报头均包含类型、编码和校验,其余选项则随ICMP的功能不同而不同。这里只使用ICMP报文中的两种:请求回送和请求回应。

网络测试程序发送ICMP回应请求消息并记录收到ICMP回应回复消息,通过这些消息作为测试网络或主机是否正常的一个依据。

3、网络测试程序分析

要使用WinSock在程序开始应有#include ,程序开始用WSAStartup(wVer,&wsaData)对WinSock进行初始化,其中wVer是WinSock需要的版本号,wsaData通过WSADATA wsaData定义,然后创建一个SOCK个例rawSocket:

SOCKET rawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);

如果rawSocket不是SOCKET_ERROR,说明创建成功,就可以使用此Sock了,把ICMP设为请求回送方式(ICMP_ECHOREQ),填充当前时间及其它项目,其中校验和使用网际校验和算法,把被校验的数据16位进行累加,然后取反码,若数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。

向要测试主机的IP地址发送ICMP包,发送程序如下:

int SendEchoRequest(SOCKET s,LPSOCKADDR_IN lpstToAddr) {

static ECHOREQUEST echoReq;

static nId = 1;

static nSeq = 1;

int nRet;

//填写ICMP头部为响应请求

echoReq.icmpHdr.Type = ICMP_ECHOREQ;

echoReq.icmpHdr.Code = 0;

echoReq.icmpHdr.Checksum= 0;

echoReq.icmpHdr.ID = nId++;

echoReq.icmpHdr.Seq = nSeq++;

//置发送数据

for (nRet = 0; nRet < REQ_DATASIZE; nRet++)

echoReq.cData[nRet] = '' ''+nRet;

//记下发送的时间标记

echoReq.dwTime = GetTickCount();

//计算校验和

echoReq.icmpHdr.Checksum=in_cksum((u_short*)&echoReq,sizeof(ECHOREQUEST));

//发送响应请求ICMP

nRet = sendto(s, (LPSTR)&echoReq,sizeof(ECHOREQUEST),0,

(LPSOCKADDR)lpstToAddr,sizeof(SOCKADDR_IN));

if (nRet == SOCKET_ERROR)

ReportError("sendto()");

return (nRet);

}

运用WinSock的select(),来接收主机返回的数据包,

int WaitForEchoReply(SOCKET s) {

struct timeval Timeout;

fd_set readfds;

readfds.fd_count = 1;

readfds.fd_array[0] = s;

Timeout.tv_sec = 5;

Timeout.tv_usec = 0;

return(select(1, &readfds, NULL, NULL, &Timeout));

}

Timeout是超时时间,它有两个长整字段,秒和微秒,超过该设定值返回0。select() 可以完成非阻塞式即执行此函数时程序不必等待事件的发生,以返回值的不同来反映函数的执行情况,根据select()返回值,结合接收和发送数据的时间差,就可以知道网络的状态和通讯质量的好坏。

4、结语

Windows Sockets是Windows下开放的、支持多种协议的网络编程接口。提供给应用程序开发者一套简单的API,它包含了丰富的Windows扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程,实现网络通信的目的。

参考文献

[1]张晓明,陈明.计算机网络编程技术[M].北京:中国铁道出版社,2009,10.

icmp协议范文第2篇

关键词:网络技术;Ping命令;ICMP协议

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)19-30028-03

The Realization of Ping Command in Virtual Network Construction

LV Jin-rong, GONG Pei-zeng, YANG Zhi-qiang

(Dept of Computer Science and Engineering, Tongji University, Shanghai 200092, China)

Abstract: Network Technology is being more and more important not only in teaching but also in practical application. The paper based on the teaching curriculum and experiment requirement and did a primary researching in Virtual Network Construction. This experiment method use the simple icons to behalf the real network equipment which been used to construct network. Also the experiment method gives a command interface line in a separated window and simulates some network commands to check the states of net. This paper realizes the Ping command and analyzes with an experiment.

Key words: network technology; Ping command; ICMP protocols

1 引言

随着计算机技术及网络技术的迅速发展,个人、家庭或宿舍中拥有多台计算机已变得十分的普遍,将多台计算机组建成网络可以提高资源的利用率和协同工作的效率,所以网络技术无论在教学还是在现实生活中都变得异常的重要。

在实际学习中,由于资源设备的限制,提供完善的实验环境存在一定的难度,所以提供一种模拟的组建网络的平台具有很强的现实意义。虽然在应用中,业界有很多优秀的成品软件,如:虚拟机软件vmware、virtual pc;以及网络认证考试的软件NetSim、Dynamips等工具也可用于模拟组建网络的练习工具,但是由于它们所面向的是高级的网络应用,在教学的应用中需要更简单直观的平台。

文中就是基于面向网络技术教学的目的而设计的实验平台,提供了简单直观实验的要求。文中重点实现了Ping命令,根据Ping命令的运行原理,对它进行了模拟实现,相应的其他检查网络状态的命令,如:tracert、ipconfig、netstat等等,也可以根据各自的运行原理进行实现[1]。

2 Ping命令及ICMP协议简介

2.1 Ping命令简介

“Ping”这个名字源于声纳定位操作,最早Ping程序是由Mike Muuss编写[2],目的是为了测试另一台主机是否可达,该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。

一般来说,如果不能Ping到某台主机,那么就不能Telnet或者FTP到那台主机;反过来,如果不能Telnet到某台主机,那么通常可以用Ping程序来确定问题出在哪里。但是随着Internet安全意识的增强,Ping不通一台主机也可能是受路由器、防火墙的影响,但在一般的应用中可以将Ping作为检测网络连通状况的实用工具。

图1 Ping命令发送ICMP报文

2.2 ICMP协议简介

ICMP协议(Internet Control Message Protocol, Internet控制报文协议)是TCP/IP协议族的一个子协议,该协议位于网络层,提供了传输差错报文、控制报文和询问报文的功能;允许ICMP报文在IP数据报内携带。封装格式如下图:

图2 ICMP封装在IP数据报内部

ICMP报文有多种类型,Ping程序使用ICMP的回显请求报文,该报文的结构如下:前四个字节为报文头部分,第一个字节为报文类型,第二个字节未用,第三、四个字节为报文的校验和,第五、六个字节为报文的标志符,第六、七个字节为报文的序号,最后为选项数据但是报文总长度不超过64KB。

ICMP回显请求和回显应答报文格式如下图:

图3 ICMP回显请求和回显应答报文格式

3 Ping命令执行原理及实现步骤

3.1 执行原理和步骤

在进行Ping操作时,首先从客户机向服务器发送ICMP回显请求报文,当服务器接收到客户机发送来的ICMP回显请求报文时,服务器就会向客户机发送ICMP回显应答报文,客户机通过接收来自服务器的ICMP回显应答报文,从而判断与远程主机的联通状态。

实现步骤如下:

步骤 1:根据ICMP回显请求的报文格式,定义报文;

步骤 2:客户机发送封装ICMP回显请求报文的IP数据包;

步骤 3:客户机接收封装ICMP应答报文的IP数据包。

3.2 数据包的检验和算法

为了保证包头和数据不被破坏,数据包在计算机网络中传输期间使用了检验和(图3中的第三四字节),ICMP的检验和字段覆盖整个ICMP报文,而求ICMP的检验和是必须的,检验和保证了ICMP报头和数据的正确性。

检验和算法在所有的协议中都是相同的,只是由于协议的不同,检验和保证的域的内容不同。检验和在各种协议中所保证的各种域如下:

检验和icmp_ckSum算法如下[4]:

① 在检验和的域中设置为0;

② 在数据长度为奇数时,在其域中最后追加0,使其调整为以16为单位(在这种调整方法中,即使追加8位,也不包含包长度);

③ 以16位为单位,将一个伪报头、报头、数据部分加上1的补码;

④ 将所求出的值:1的补码存储到报头检查和的区域中。

如果首部在传输的过程中没有发生任何差错,那么接收方计算的结果应该为全1;如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报,但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

4 模拟命令的实验过程及结果

4.1 实验要完成的功能

本实验平台要实现的功能界面如图4。

在“工作台”窗口中,组建了一个简单的局域网,通过模拟网络命令测试该局域网的网络连通状态,在“命令交互”窗口中,用Ping命令从PC1到PC2,返回的结果将与实际的局域网中得到的结果相似。

4.2 Ping命令的Visual C#模拟实现

安装Ping命令的执行原理、步骤,其具体的实现过程如下:

① ICMP数据包类的定义和实现。

public class IcmpPacket{private Byte_type;// 报文类型

private Byte_subCode;// 字代码类型

private UInt16 _checkSum;// 报文校验和

private UInt16 _identifier;//识别符

private UInt16 _sequenceNumber;// 序列号

private Byte[]_data; // 数据选项 }

② 模拟Socket的SendTo()方法的SimSendTo()方法。

在执行Ping命令时该方法将被调用,根据计算机名或虚拟的IP地址,将ICMP数据包的UInt16数组发送给目的主机进行验证。

在该方法中增加了对计算机名的名称的解析,可以将计算机名称与虚拟的IP地址对应起来,因此Ping命令后面的参数可以是计算机名也可以是具体的IP地址。

③ 模拟Socket的ReceiveFrom()方法的SimReceiveFrom()方法。

此方法在执行Ping命令是也会被调用,该方法返回了目的主机回显的信息,表明了目的主机是否已经接收到了发送的数据,若该方法的返回值为ICMP数据包的大小,则表明操作成功,将在终端显示接收信息;若返回的值为-1,则在终端显示“目的主机不可到达”的信息。

④ 检验和icmp_ckSum()算法的实现。

public static UInt16 icmp_ckSum(UInt16[] buffer)

{int cksum = 0;

for(int i=0;i

cksum += (int) buffer[i];

cksum = (cksum >> 16) + (cksum & 0xffff);

cksum += (cksum >> 16);

return (UInt16)(~cksum); }

5 结束语

该文对模拟组网的实验平台进行了介绍,详细介绍了Ping命令的原理及其工作方式,并对其模拟实现进行了详细的分析。依据此实现方式,可以对其他的命令tracert、ipconfig、netstat等等进行实现,以完善该实验平台。

当然该平台到目前只是对关键的技术进行了前期的研究和解决,很多的功能和相关的技术还要进行继续的研究,在命令的交互体验方面也应该更加真实,这些都成为以后工作的重点。

参考文献:

[1] Jon C.Snader. 刘江林,译. 高级TCP/IP编程[M].北京:中国电力出版社,2001.6.

[2] W.Richard Stevens.TCP/IP Illustrated, Volume 1:The Protocols.北京:机械工业出版社,2002.1.

[3] 潘爱明,译.计算机网络[M].第4版.北京:清华大学出版社,2004.8.

[4] 冯杰,闫鲁生,译.TCP/IP网络实验程序篇[M].北京:科学出版社,2003.4.

[5] Gary R.Wright,W.Richard Stevens.TCP/IP Illustrated, Volume 2:The Implementation[M].北京:机械工业出版社,2002.1.

[6] 李铭,黄静,译.C#2005&.NET 3.0高级编程.第5版.北京:清华大学出版社,2007.12.

[7] RFC 791-1981 INTERNET PROTOCOL[S].Network Working Group.

icmp协议范文第3篇

关键词:Windows 2000/XP;网络管理;工具命令

中图分类号: TP393.08 文献标识码:A 文章编号:1673-8500(2013)03-0089-01

使用操作系统提供的网络命令可以解决绝大部分网络运行的问题,了解网络运行的状况。这里主要介绍Windows2000的网络工具命令。在Windows2000的“运行”对话框中输入命令“cmd”,既可打开命令窗口,使用工具命令。

1. Windows2000的网络工具命令

当ping目标主机使用域名或主机地址时,首先会返回目标主机的IP地址:

C:\WINDOWS>ping

Pinging [162.105.129.12] with 32 bytes of data:

…………

Reply from 162.105.129.12: bytes=32 time=27ms TTL=244说明数据包的大小、从目标主机返回的时间、返回时的TTL值。

2.TTL:生存时间

指定数据报被路由器丢弃之前允许通过的网段数量。

TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。

使用PING时涉及到的 ICMP 报文类型。一个为ICMP请求回显(ICMP Echo Request);一个为ICMP回显应答(ICMP Echo Reply)

TTL 字段值可以帮助我们识别操作系统类型。

UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255

Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64

微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128

微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32

当然,返回的TTL值是相同的,但有些情况下有所特殊:

LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64

FreeBSD 4.1, 4.0, 3.4;

Sun Solaris 2.5.1, 2.6, 2.7, 2.8;

OpenBSD 2.6, 2.7,

NetBSD

HP UX 10.20

ICMP 回显应答的 TTL 字段值为 255

Windows 95/98/98SE

Windows ME

ICMP 回显应答的 TTL 字段值为 32

Windows NT4 WRKS

Windows NT4 Server

Windows 2000

ICMP 回显应答的 TTL 字段值为 128

这样,我们就可以通过这种方法来辨别操作系统。

3. tracert

tracert通过向目标主机发送不同TTL值的数据包,跟踪从本地计算机到目标主机之间的路由,显示所经过的网关的IP地址和主机名。命令格式为:

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] 目标主机

tracert可以检测某个主机不能连通时,在路由哪个环节出现了问题。

(1)netstat

netstat命令的功能是显示网络连接、路由表和网络端口信息,可以让用户得知目前都有哪些网络连接正在运作。检查系统是否有非法连接以及利用系统漏洞的病

4.毒或木马程序时,经常使用此命令。该命令的一般格式为:

netstat [选项]

-p proto 显示TCP协议的连接情况。

(1)ipconfig和winipcfg

(2)ipconfig

ipconfig可以查看和修改网络中的TCP/IP协议的有关配置,如IP地址、子卡掩码、网关、网卡的MAC地址等。命令格式是

ipconfig [参数1] [参数2]……

5.常用参数:

1.all:显示与TCP/IP协议的细节,如主机名,节点类型,网卡的物理地址,默认网关等。

Batch [文本文件名]:将测试的结果存入指定的文本文件名中。

2.winipcfg

winipcfg的功能和ipconfig基本相同,使用Windows

对话框显示TCP/IP配置情况。

6. nslookup的网络工具命令

nslookup命令的功能是查询一台机器的IP地址和其对应的域名。此命令需要在本机设置正确的域名服务器来提供域名服务。

命令的一般格式为:nslookup [IP地址/域名]

1. finger

finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的用户信息,

8.finger守护进程。

需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。

命令的一般格式为: finger [-l] [user] [@host]

1.arp

arp命令可以显示和修改“地址解析协议”(ARP) 所使用的到以太网的IP 或令牌环物理地址翻译表。该命令只有在安装了 TCP/IP 协议之后才可用。

命令的一般格式为:

arp -a [inet_addr] [-N [if_addr]

arp -d inet_addr [if_addr]

arp -s inet_addr ether_addr [if_addr]

icmp协议范文第4篇

[论文摘要]主要论述网管系统中一个重要的功能网络拓扑的自动发现。阐述相关的理论知识,并具体讨论基于snmp和基于icmp的拓扑发现,最后对算法所适用范围加以说明。虽然这种方法能够较好的发现网络拓扑,但是它需要占用大量的带宽资源。

随着计算机网络的普及,人们对计算机网络的依赖性大大加强了。在现有的技术条件下,人们希望有一个更加稳定可靠的网络环境。计算机网络管理系统就是应这样的需求而产生的。它对网络上的各种设备进行管理,通过监视和控制这些设备。及时地向管理人员报告网络状态,并且简化网络故障的处理,减少故障造成的损失,提高网络的服务质量和效率。在我国,人们开始认识到网络管理的重要性。

一、网络管理中传统的网络拓扑发现算法

网络拓扑的发现,实际上就是根据网络上节点连接情况,构造出来一个反映这种连接关系的图。网络节点可以是网关,也可以是子网:网关节点是与子网和其它网关节点相邻的节点;子网节点可被认为只与网关节点相邻,至少与它的缺省网关相邻。各子网通过各目的网关与其他子网通信,这些子网可以是一个局域网,也可以是某个局域网的一部分,它们都连接到网关的一个端口上。网关的端口可以连接子网,也可以同其他路由器相连。

主拓扑指的是反映出关键设备包括路由器,它们的接口和子网的连接关系,即路由器一路由器、路由器一子网、接口的关系。这些信息需要对网络进行搜索而获得:一般只需要对连接设备进行遍历就可以得到主拓扑结构。当前的网管软件都是通过对网络设备的mib库进行访问,所以这种方法又被称为基于snmp的拓扑发现。经过上述的遍历过程,可以得到网络拓拓扑图的整体构成,知道了网络主干通道情况。但是子网内部的具体设备以及连接状态尚不可知。这就需要依靠子网发现来做进一步的工作。子网发现完成的任务是确定子网内各网络设备的状态、类型以及网络接口。

遍历的定义是:对于无向图,以图中某一点为出发点,沿着边依次访问图的其余节点,如果图是连通的,则从图的任一点出发按一定的顺序沿着某些边可以访问图中的所有节点,而且每个节点仅被访问一次,这一过程称为图的遍历。在网络上,一个节点可以和很多的节点连接,所以当进行网络拓扑结构发现的时候,有可能会访问已经被发现过的节点。因此,在遍历的时候,必须对每一个节点设置一个标志。当节点未被访问过时,相应的标志为0,否则,就置为1。

二、改进的网络拓扑算法

前面基于snmp的拓扑算法在一定程度上是非常有效的,拓扑的速度也非常快。但它存在一个缺陷。那就是,在一个特定的域中,所有的子网的信息都依赖于设备具有snmp的特性,如果系统不支持snmp,则这种方法就无能为力了。还有对网络管理的不重视,或者考虑到安全方面的原因,人们往往把网络设备的snmp功能关闭,这样就难于取得设备的mib值,就出现了拓扑的不完整性,严重影响了网络管理系统的功能。针对这一的问题,下面讨论本文对上述算法的改进一基于icmp协议的拓扑发现。

(一)icmp报文的格式

icmp被认为是ip层的一个组成部分。它传递差错报文以及其他需要注意的信息。网际协议cip没有出错报告或出错校正机制,它依靠网际控制报文协议(icmp)模块来报告数据处理过程,井提供管理和状态信息。icmp报文在传送时被封装在ip数据报中,使用ip协议发送,但icep不看作是高层协议的内容。

回应请求与应答均以ip数据报的形式在网间传输,假如成功地收到一个应答(应答中的数据拷贝与请求中的任选数据完全一致),不但说明信宿机可以到达,而且说明数据报传输系统的相应部分工作正常,至少信源机和信宿机的icmp软件和ip软件工作正常,请求与应答经过中间网关也在正常工作。在许多tcp/ip实现中,用户命令ping便是利用icmp回应请求/应答报文测试信宿机的可到达性的。

(二)ping的实现

ping的主要操作是发送报文,并简单地等待回答。ping之所以如此命名,是因为它是一个简单的回显协议,使用icmp响应请求与响应应答报文。ping主要由系统程序员用于诊断和调试。一般的,ping的功能有:

loop back ping用于验证tcp/ip软件的操作。

pin g地址确定能否寻址物理网络设备。

ping远程ip地址验证能否寻址网络。

ping远程主机名验证主机上某个服务器的操作。

实现ping的过程主要是:首先向目的机器发送一个响应请求的icmp报文,然后等待目的机器的应答,直到超时。如收到应答报文,贝以报告目的机器运行正常,程序退出。

(三)traceroute的实现

在ip头的结构中,存在一个ip_ttl域,即生存时间(time to_live,ttl)。ttl参数用于测量数据报在网际存在多长时间。网络中的每个路由器都检查该域,如果ttl值为0,路由器就抛弃该数据报。路由器还必须对它处理的每个数据报的该域进行减i操作。在实际执行中,ttl域是一个反映跳段的值。所以,当数据报穿过一个ip节点(网关)时。ttl域中的值就减1。

traceroute的功能就是利用ip头中的ttl域。开始时信源设置ip头的ttl值为0,发送报文给信宿,第一个网关收到此报文后,发现ttl值为0,它丢弃此报文,并发送一个类型为超时的icmp报文给信源。信源接收到此报文后对它进行解析,这样就得到了路由中的第一个网关地址。然后信源发送ttl值为1的报文给信宿,第一个网关把它的ttl值减为0后转发给第二个网关,第二个网关发现报文ttl值为0,丢弃此报文并向信源发送超时icmp报文。这样就得到了路由中和第二个网关地址。如此循环下去,直到报文正确到达信宿,这样就得到了通往信宿的路由。

(四)网络拓扑的发现算法

具体实现的步骤:

1、于给定的ip区间,利用ping依次检测每个ip地址,将检测到的ip地址记录到ip地址表中。

2、对第一步中查到的每个ip地址进行traceroute操作,记录到这些ip地址的路由。并把每条路由中的网关地址也加到ip表中。

3、对ip地址表中的每个ip地址,通过发送掩码请求报文与接收掩码应答报文,找到这些ip地址的子网掩码。

4、根据子网掩码,确定对应每个ip地址的子网地址,并确定各个子网的网络类型。把查到的各个子网加入地址表中。

icmp协议范文第5篇

关键词:TCP/IP; 网络安全; 协议分析

1.TCP/IP数据链路层安全性缺陷

在TCP/IP协议栈中,数据链路层位于网络层底下,网络层的包拆封成不同的数据帧。数据链路层上的常见攻击方式是嗅探(sniff),嗅探是在共享的网络信道上,利用网络接口卡接收不属于自己的数据包。广泛应用的以太网、共享信道的媒体访问协议CSMA/CD、广播机制等构成了嗅探的物理基础。

攻击者可能从数据中分析出帐户、口令等关键数据。同时嗅探也是其他攻击(如IP欺骗、拒绝服务攻击)的基础。嗅探使用的包捕获技术依赖于具体的操作系统,其中比较流行的是UNIX平台上的BPF技术,在通常情况下,网卡驱动程序从网络上接收一个数据包,然后提交给系统协议栈。如果有BPF侦听网络,则驱动程序会先调用BPF,复制一个包给BPF的过滤器,过滤器根据用户规则决定是否接收此数据包,并判断此包是否是发给本机的。如果是,则提交给协议栈,然后返回。否则,驱动程序从中断中返回,继续接收数据包。

2.TCP/IP无线链路性能缺陷

无线链路的特点是易受干扰、多径衰减的影响。信道通信行为会随时间和地理位置而变化,链路层差错控制对包一级QOS的影响也会随时间变化。因此为固定网络开发的TCP无法很好地应用于移动通信和卫星等无线链路中,这是因为TCP/IP缺乏网络自适应性。

在有线网络中,流量控制和资源分配策略均基于底层的物理媒质是高度可靠的这一假定,但这对无线网不成立。在无线网上进行TCP传输TCP认为包的丢失是由拥塞引起的,而实际上包丢失可能是由于信道错误引起的包丢弃或网络延时而引发的,这将导致超时并启动拥塞控制算法,显然不必要。

同时在无线通信中还有一个问题:当主机不断移动时,它可能离开其IP地址标识的那个区域,从而无法连接到网络中。解决主机移动性问题的基本难题是主机的IP地址有双重意义,它既是对主机的惟一标识,又指示它所在位置。而移动主机的位置要经常变化,这意味着IP地址也应改变,这是TCP/IP无法解决的问题。

3.网络层与传输层性能缺陷

实现TCP的可靠传输需要三次握手,导致报文段在网络传输中遇到不利情况的概率增加:当第三次握手时,如果出现网络问题使主机A的一个报文段无法到达主机B,则主机B不会认为建立连接,而主机A认为连接已经建立,并开始发送数据,浪费了A的网络资源;同样如果一个报文段在某些结点延时过长才能到达主机B,在此之前主机B也不会认为连接建立,而主机A确会认为连接已经建立开始发送数据,从而也会浪费了A的网络资源。

所以无论是何种网络或则无论网络状况是否良好,进行三次握手都会比进行两次握手多出部分时延。

4.网络层与传输层安全性缺陷

网络安全中安全问题突出的部分,常发上在这两层上,以下为常见的安全问题与对策:

1.IP劫持(传输层)

当用户连接远程机器时,攻击者接管用户的连接,使正常连接与经过攻击者中转一样,客户和服务器都认为他们在互相通信,攻击者便能对连接交换的数据进行修改,冒充客户给服务器发送非法命令,或给用户发回虚假信息。

2.ICMP隧道(网络层)

几乎所有的基于TCP/IP的机器都会对ICMP echo请求进行响应。所以如果一个敌意主机同时运行很多个PING命令向一个服务器发送超过其处理能力的请求时,就可以淹没该服务器使其拒绝其它服务,而PING命令用的就是ICMP协议,ICMP的请求和应答可用来检验目的机是否可达。由于ICMP有一个可选的数据域,而很多防火墙都允许PING命令通过,这就可能形成一条秘密的信息通道,这种通道称为ICMP隧道。

3.ARP欺骗(网络层)

ARP协议用来进行IP地址和网络物理地址之间的转换。主机用ARP Cache来缓存已经得到的映射关系,并在一定时间后作废Cache的内容。ARP协议的一个重要特性是信任,ARP基于一种思想,认为所有机器都相互协作,而且任何响应都是合法的。主机保存了通过ARP得到的映射,却不考虑它们的有效性,也不维护一致性。因此,当ARP表把几个IP地址映射到同一个物理地址时,不违反协议规范。这个特性对于在网络中使用ARP技术是很重要的。但是一台机器可冒名顶替另一台机器以截获分组。攻击者可以利用暂时没有使用主机的IP地址,伪造IP地址和物理地址之间的映射,欺骗用户向虚假的物理地址发送报文。

4.使用SYN报文段淹没服务器

使用SYN报文段淹没服务器。利用TCP建立连接3的步骤的缺点和服务器端口允许的连接数量的限制, 窃取不可达IP地址作为源地址, 使得服务器端得不到而使连接处于半开状态, 从而阻止服务器响应别的连接请求。尽管半开的连接会因过期

而关闭, 但只要攻击系统发送的spoofed SYN请求的速度比过期的快就可达到攻击的目的。