嵌入式Linux网络编程,终于有人把网络的七层说清楚等(不可多得的好文,推荐先收藏!)本文主要从以下几个方面讲解网络层:InternetProtocolIPIP地址和IP支持多种协议网络地址转换器(NAT)地址解析协议(ARP)反向地址转换协议(RARP)互联网控制消息协议(ICMP)IGMPIP数据报格式IP数据报头固定部分中的每个字段IP数据报头的可变部分IP数据报头Flow路由表,用于IP层转发数据包默认路由(defaultroute)路由表搜索网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间。它进一步管理数据链路层提供的两个相邻端点之间的数据帧传输。网络中的数据通信试图通过若干个中间节点将数据从源端传输到目的端,从而为传输层提供最基本的端到端数据传输服务。主要内容有:虚电路分组交换和数据报分组交换、路由算法、拥塞控制方法、X.25协议、综合业务数据网(ISDN)、异步传输模式(ATM)和Internet互连的原理与实现。IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP数据都以IP数据报格式传输。IP提供不可靠、无连接的数据报传送服务。不可靠是指不能保证IP数据报一定能成功到达目的地。IP只提供最好的传输服务。任何所需的可靠性必须由上层(例如TCP)提供。术语无连接意味着IP不维护有关后续数据报的任何状态信息。每个数据报都独立于其他数据报进行处理。这也表明IP数据报可能不会按发送顺序接收。如果源将两个连续的数据报(先是A,然后是B)发送到同一目的地,则每个数据报都是独立路由的,可能在不同的路由上,因此B可能在A到达之前到达。到达。1.1网际协议IPIP是英文InternetProtocol(网络间互连协议)的缩写,中文简称“互联网协会”,是为计算机网络之间相互通信而设计的协议。在互联网中,它是使所有连接到互联网的计算机网络能够相互通信的一套规则,规定了计算机在互联网上进行通信时应遵守的规则。任何厂商生产的计算机系统,只要符合IP协议,都可以与Internet互连。各个厂商生产的网络系统和设备,如以太网、分组交换网等,不能相互通信。不兼容的主要原因是它们传输数据的基本单位(技术上称为“帧”)格式不同。IP协议实际上是由软件程序组成的一套协议软件。它将各种“帧”转换成(NNT流量)或“IP数据包”格式。这种转换是互联网最重要的特征之一。它使各种计算机能够在因特网上相互通信,即具有“开放性”的特点。数据包也是包交换的一种形式,就是把传输的数据分割成“包”,然后再传输。但与传统的“连接型”分组交换不同的是,它属于“无连接型”,将每一个“数据包”(packet)作为一个“独立的报文”进行传输,因此被称为“数据包”。袋”。这样,在开始通信之前不需要连接电路,每个数据包也不一定通过相同的路径传输,所以称为“无连接类型”。这个特性很重要,它大大提高了网络的健壮性和安全性,每个数据包有两个部分:header和message,header包含目的地址等必要的内容,这样每个数据包都可以准确的到达目的地,而不需要经过相同的路径。在目的端恢复原来发送的数据,这就需要IP具备封包打包和组装组装的功能,在实际传输过程中,数据包还可以根据指定的包大小改变数据包的长度通过网络。IP数据包的最大长度可达65535字节。?一些中间设备用于连接网络。?中间设备也称为int中间系统或中继系统。?物理层中继系统:中继器(repeater)。?数据链路层中继系统:网桥或网桥(bridge)。?网络层中继系统:路由器(router)?网桥和路由器的混合体:网桥设备(brouter)。?网络层之上的中继系统:网关。互联网络使用路由器:?当中继系统是中继器或网桥时,一般不称为互联网络,因为它只是一个网络的放大,它仍然是一个网络。?网关由于其复杂性目前较少使用。?互联网是指通过路由器互连的网络。?由于历史原因,很多关于TCP/IP的文献都将网络层用作网关的路由器称为网关。?数据包在Internet中的传输1.2PIP地址所谓IP地址就是分配给每台连接到Internet的主机的32位地址。按照TCP/IP协议,IP地址是用二进制表示的,每个IP地址的长度是32位,把位换算成字节就是4字节。例如,一个二进制形式的IP地址是“00001010000000000000000000000001”,这样的IP地址太长了,人们无法处理。为了方便人们的使用,IP地址常以十进制形式书写,并加上符号“.”。中间用来分隔不同的字节。因此,上述IP地址可以表示为“10.0.0.1”。IP地址的这种表示法称为“点分十进制表示法”,显然比1和0要好记得多。?IP地址及其分类原则IP地址是一种层次地址,一般格式为:M—类号,NET——网络号,HOST——主机号。IP地址按照类号分为A、B、C、D、E五类。如下图所示,网络号和主机号在32位中所占的位数随着不同的层次。网络地址的最高位必须是“110”。C类IP地址中网络标识长度为24位,主机标识长度为8位。C类网络地址地址数量多,适用于小型局域网。每个网络最多只能包含254台计算机。C类IP地址范围为192.0.1.1-223.255.254.254(二进制表示:11000000000000000000000100000001-11011111111111111111111011111110)。C类IP地址的子网掩码为255.255.255.0,每个网络最多支持的主机数为256-2=254个特殊地址除了以上三种IP地址外,还有几种特殊IPaddresses,TCP/IP协议规定,凡是IP地址中第一个字节以“lll0”开头的地址,都称为多播地址。因此,任何第一个字节大于223且小于240的IP地址都是多播地址;IP地址中每个字节为0(“0.0.0.0”)的地址对应于当前主机;每个字节为1的IP地址(“255.255.255.255”)为当前子网的广播地址;IP地址中带有“llll0”的所有地址均保留供将来用于特殊用途;不要以十进制“127”开头。这类地址中127.0.0.1到127.1.1.1的数字用于环路测试,如:127.0.0.1可以代表本机的IP地址,使用“http://127.0.0.1”来测试Web服务器本机配置。网络ID的前6位不能全部设置为“0”,全部为“0”表示本地网络。D类IP地址的第一个字节以“1110”开头,这是一个专门保留的地址。它不指向特定网络。目前,这种类型的地址用于组播(Multicast)。多播地址用于同时寻址一组计算机,它标识一组共享同一协议的计算机。地址范围224.0.0.1-239.255.255.254。以“1111”开头的E类IP地址保留供将来和实验使用。?广播地址,主机号全为“1”的网络地址用于广播,必须知道宿网络的网络号。?有限广播地址,TCP/IP规定使用全“1”的32位Internet地址在本网络上进行广播。“0”类地址,TCP/IP规定将位全为“0”的网络号解释为“本地”网络。?"环回地址,A类网络地址127是一个保留地址,用于网络软件测试和本机进程间通信,称为环回地址。不管是什么程序,一旦使用环回地址发送数据,协议软件立即返回,无需任何网络传输。TCP/IP协议规定,包含网络号127的数据包不能出现在任何网络上;主机和网关不能为该地址广播任何路由信息。?私网地址(保留地址)A类地址:10.1.1.1-10.254.254.254B类地址:172.16.1.1-172.31.254.254C类地址:192.168.1.1-192.168.254.25432位IP地址分为两部分,即网络号和主机号,分别称为IP地址的“网络部分”和“主机部分”。子网掩码用于区分这两部分。子网掩码IP协议规定每个使用子网的网络点选择一个32位的位模式。如果模式中的某个位置为1,那么对应IP地址中的某个位就是网络地址中的位。如果位模式中的某个位为0,则IP地址中对应的位是主机地址中的位。如果IP地址的主机部分的所有位都设置为0,则称为网络地址。另外,在网络地址后面加了几个表示网络地址长度的数字,即在IP地址“/”后面画一个斜杠,在网络地址部分后面写一个代表数字位数的数字削减。示例IP地址由“网络地址”和“主机地址”组成。以IP地址为“192.168.10.68”,网络地址为26位为例。二进制数11000000.10101000.00001010.01000000/26Internet中的IP地址1.3支持PIP的几种协议InternetProtocolIP是TCP/IP体系中最重要的两个协议之一。与IP协议一起使用的还有四种其他协议:?地址解析协议ARP(地址解析协议)?反向地址解析协议RARP(反向地址解析协议)?互联网控制消息协议ICMP(互联网控制消息协议)?互联网组管理协议IGMP(InternetGroupManagementProtocol)1.3.1NetworkAddressTranslator(NAT)这项技术是在局域网中设置一个私有IP地址,然后在连接到Internet时将其转换为全球IP地址。并且,如果是可以代替TCP或UDP端口号的网络地址端口转换器(NAPT:NetworkAddressPortsTranslation),就可以使用一个全球IP地址在多台主机之间进行通信。1.3.2地址解析协议(ARP)省略。1.3.3反向地址解析协议(RARP)省略。1.3.4互联网控制消息协议(ICMP)ICMP是(InternetControlMessageProtocol)互联网控制消息协议。它是TCP/IP协议族的一个子协议,用于在IP主机和路由器之间传输控制消息。控制消息是指网络本身的消息,如网络是否不可达、主机是否可达、路由是否可用等。这些控制消息虽然不传输用户数据,但在用户数据的传输中起着重要的作用。基本介绍ICMP协议是一种面向连接的协议,用于传输错误报告控制信息。它是一个非常重要的协议,对网络安全有着极其重要的意义。它是TCP/IP协议族的一个子协议,属于网络层协议。主要用于主机和路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当IP数据无法到达目标、IP路由器无法按照当前传输速率转发数据包等情况时,会自动发送ICMP报文。ICMP提供一致且易于理解的错误报告消息。发送的错误信息返回给发送原始数据的设备,因为只有发送设备才是错误信息的逻辑接收者。然后发送设备可以从ICMP消息中确定发生了什么类型的错误以及如何最好地重新发送失败的数据报。但ICMP的唯一功能是报告问题,而不是纠正错误,纠正错误的任务由发送方完成。我们在网络中经常会用到ICMP协议,比如我们经常使用的Ping命令来检查网络是否不可达(Linux和Windows都有)。这个“Ping”过程其实就是ICMP协议的工作过程。还有其他一些网络命令,比如跟踪路由的Tracert命令,也是基于ICMP协议的。PICMP协议内容ICMP的全称是InternetControlMessageProtocol。从技术角度看,ICMP是一种“错误检测和报告机制”。它的目的是让我们检测网络的连接状态,保证连接的准确性。终端主机是否存在。?创建和维护路由数据。?重定向数据路由。?数据流控制。类型字段为3,表示这是一个ICMP目标不可达数据包。code字段的值进一步说明了具体的错误原因,取值范围为0-12。每个值的含义如下表所示。此外,我们注意到ICMPDestinationUnreachable数据包的最后一个字段包含错误IP数据包的lP头和IP数据包数据部分的前64位。之所以包含这个字段是为了让IP数据包的发送方知道是哪个数据包出错了。(3)当源端关闭时,路由器只根据单个数据包的信息转发IP数据包,不能为某个数据包预留一定的资源。由于路由器的资源(内存、计算时间等)是有限的,当网络数据流量比较大时,路由器可能会为了转发数据包而耗尽所有资源,这就是阻塞。拥塞是指路由器能力有限,不能转发所有需要转发的数据包。这时,路由器会选择丢弃一些数据包。但是仅仅这样做仍然不能缓解网络拥塞,因为发送方往往在发送完数据包后收不到响应,就会向网络发送更多的数据包,这样会使网络更加拥塞,网络拥塞就会变得更加严重。更认真。因此,当路由器丢弃数据包时,它会向数据包的发送方发送消息,通知其网络被阻塞,请延迟发送数据包。ICMP源关闭数据包用于发送此通知。数据包格式如下图所示。(4)Timeouterror在IP包中有一个TTL字段。路由器每转发一次IP数据包,该字段的值至少会减1。当该字段的值减为0时,路由器将丢弃该数据包。但是这种情况很少见,因为IP数据包中这个字段的值设置的足够大,以至于数据包转发到目标主机的时候这个字段的值仍然大于0。但有时也会出现这种情况,比如几台路由器组成一个环,路由器中的路由表有错误,此时在其中转发的数据包可能会留在环中,直到TTL字段减为0.路由器在丢弃TTL为0的数据包之前,需要通知数据包的源主机数据包转发超时。由于一个IP数据包在转发到目标主机的过程中可能会被分成多个段,而这些段是分开路由的。因此,IP数据包的多个片段可能只会部分到达目标主机,而其他片段可能会丢失。当目标主机重组一个IP数据包的多个段时,如果等待一定时间后剩余的段还没有到达,目标主机就会认为这些段不会到达而将收到的段丢弃。在丢弃这些分片之前,目标主机通知源主机IP数据包的分片在重组时超时。在任何一种情况下,路由器和目标主机都会通过向源主机发送ICMP超时数据包来通知源主机。数据包的格式如下图所示。请求主机可以将数据包广播或直接发送给路由器,路由器将网络的子网掩码告知主机。
