传输介质简介
网络是什么?
网络就是通过介质把终端互连而成的一个规模大、功能强的系统,从而使得众多的终端可以方便地互相传递信息,共享信息资源。
两个终端,用一条能承载数据传输的物理介质(也称为传输介质)连接起来,就组成了一个最简单的网络。
传输介质(物理介质)
同轴电缆(传输电信号)
注:
10BASE5和10BASE2是早期的两种以太网标准,它们均采用同轴电缆作为传输介质。这两种标准都支持10Mbps的传输速率。10BASE5和10BASE2所使用的同轴电缆的直径分别为9.5mm和5mm,所以前者又称为粗缆,后者又称为细缆。
现在,10Mbps的传输速率早已不能满足目前企业网络需求,因此同轴电缆在目前企业网络中很少应用。
双绞线(传输电信号)
注:
与同轴电缆相比双绞线(Twisted Pair)具有更低的制造和部署成本,因此在企业网络中被广泛应用。双绞线可分为屏蔽双绞线(Shielded Twisted Pair,STP)和非屏蔽双绞线(Unshielded Twisted Pair,UTP)。屏蔽双绞线在双绞线与外层绝缘封套之间有一个金属屏蔽层,可以屏蔽电磁干扰。双绞线有很多种类型,不同类型的双绞线所支持的传输速率一般也不相同。例如,3类双绞线支持10Mbps传输速率;5类双绞线支持100Mbps传输速率;超5类双绞线及更高级别的双绞线支持千兆以太网传输。双绞线使用RJ-45接头连接网络设备。为保证终端能够正确收发数据,RJ-45接头中的针脚必须按照一定的线序排列。
光纤(传输光信号)
注:
光纤支持的传输速率包括10Mbps,100Mbps,1Gbps,10Gbps,甚至更高。根据光纤传输光信号模式的不同,光纤又可分为单模光纤和多模光纤。单模光纤只能传输一种模式的光,不存在模间色散,因此适用于长距离高速传输。多模光纤允许不同模式的光在一根光纤上传输,由于模间色散较大而导致信号脉冲展宽严重,因此多模光纤主要用于局域网中的短距离传输。光纤连接器种类很多,常用的连接器包括ST,FC,SC,LC连接器。
串口电缆
注:
网络通信中常常会用到各种各样的串口电缆。常用的串口电缆标准为RS-232,同时也是推荐的标准。但是RS-232的传输速率有限,传输距离仅为6米。其他的串口电缆标准可以支持更长的传输距离,例如RS-422和RS-485的传输距离可达1200米。RS-422和RS-485串口电缆通常使用V.35接头,这种接头在上世纪80年代已经淘汰,但是现在仍在帧中继、ATM等传统网络上使用。V.24是RS-232标准的欧洲版。RS-232本身没有定义接头标准,常用的接头类型为DB-9和DB-25。现在,RS-232已逐渐被FireWire、USB等新标准取代,新产品和新设备已普遍使用USB标准。
冲突域
上图中四台主机都是用同一根同轴电缆来与其它主机进行通信。(这跟同轴电缆被称为共享介质,相应的网络称为共享介质网络,简称共享式网络)
在共享式网络中,不同主机同时发送数据时,就会产生信号冲突问题。产生冲突的范围即为冲突域。
检测并避免冲突的机制:
CSMA/CD(载波侦听多路访问/冲突检测技术)
1、终端设备不停地检测共享线路的状态。如果线路空闲,则可以发送数据;如果线路不空闲,则等待一段时间后继续检测(延时时间由退避算法决定)。先听后发
2、如果有另外一个设备同时发送数据,两个设备发送的数据会产生冲突。边发边听
3、终端设备检测到冲突之后,会马上停止发送自己的数据,并发送特殊阻塞信息,以强化冲突信号,使线路上其他站点能够尽早检测到冲突。冲突停发
4、终端设备检测到冲突后,等待一段时间之后再进行数据发送(延时时间由退避算法决定)随机延迟后重发
双工模式
双工:发送方、接收方
双工模式:发送方和接收方可随时切换角色
(单工模式:指定发送方和接收方,信息只能由发送方发给接收方)
半双工 (half-duplex mode):数据收发不能同时进行
通信双方都能发送和接收数据,但不能同时进行。当一台设备发送时,另一台只能接收,反之亦然。
举例:对讲机
半双工模式下,共享物理介质的通信双方必须采用CSMA/CD机制来避免冲突。例如,10BASE5以太网的通信模式就必须是半双工模式。
全双工(full-duplex mode):
通信双方都能同时接收和发送数据
举例:手机
全双工模式下,通信双方可以同时实现双向通信,这种模式不会产生冲突,因此不需要使用CSMA/CD机制。例如,10BASE-T以太网的通信模式就可以是全双工模式。
注:同一物理链路上相连的两台设备的双工模式必须保持一致
网络通信协议
分层模型—OSI
七层模型
注:
物理层:在设备之间传输比特流,规定了电平、速度和电缆针脚。
数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。
网络层:提供逻辑地址,供路由器确定路径。IP地址
传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。
会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。
分层模型—TCP/IP
注:
TCP/IP模型的核心是网络层和传输层,网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用。
TCP/IP对应的数据封装形式
应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交换信息。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。
如上层数据在报头后得到的PDU被称为Segment(数据段);
数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包);
数据包被传递到数据链路层,封装传输层添加TCP数据链路层报头得到的PDU被称为Frame(数据帧);
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
数据包在以太网物理介质上传播之前必须封装头部和尾部信息,封装后的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输。 以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。
帧格式
1、这两种格式的主要区别在于Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理,IEEE802.3格式中,同样的位置是长度字段。
2、不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。以太网中大多数的数据帧使用的是Ethernet II格式。
3、以太网帧中还包括源MAC地址和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。
Ethernet_II帧格式
1、DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
2、 SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
3、 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0x0806的帧代表ARP协议帧。
4、 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
5、 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。
IEEE802.3帧格式
1、IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
2、Length字段定义了Data字段包含的字节数。
3、逻辑链路控制LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。
4、SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型(Type)字段组成。Org Code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:
1)当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。
2)当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。
3)DSAP和SSAP其他的取值均为纯IEEE802.3帧。
数据帧的传输
以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。
以太网的MAC地址
48位
MAC地址由两部分组成,分别是供应商代码和序列号。其中前24位(组织唯一标识符(OUI,Organizationally Unique Identifier))代表该供应商代码,由IEEE管理和分配。剩下的24位序列号由厂商自己分配。
(类似于人的身份证号,每一台设备的MAC地址都是全球唯一的)
帧的发送方式
单播(一对一)
从单一的源端发送到单一的目的端
MAC地址的第8位为0(表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端)
在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。
广播(一对所有)
帧从单一的源发送到共享以太网上的所有主机。
广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。
广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。
当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。
组播(一对多)
当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下通常会使用组播方式。
组播MAC地址的第8个比特为1
组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。
数据帧的发送和接收
1、帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。
2、如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。本例中,Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉。
IP编址
网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议就是IP协议
IP报文头部
IP报文头部信息用于指导网络设备对报文进行路由和分片。
同一个网段内的数据转发通过链路层即可实现,而跨网段的数据转发需要使用网络设备的路由功能。
分片是指数据包超过一定长度时,需要被划分成不同的片段使其能够在网络中传输。
IP编址
IPv4地址为32比特的二进制数,通常用点分十进制表示。
IP地址用来标识网络中的设备,具有IP地址的设备可以在同一网段内或跨网段通信。IP地址包括两部分,第一部分是网络号,表示IP地址所属的网段,第二部分是主机号,用来唯一标识本网段上的某台网络设备。
每个网段上都有两个特殊地址不能分配给主机或网络设备。
第一个是该网段的网络地址,该IP地址的主机位为全0,表示一个网段。第二个地址是该网段中的广播地址,目的地址为广播地址的报文会被该网段中的所有网络设备接收。广播地址的主机位为全1。除网络地址和广播地址以外的其他IP地址都可以作为网络设备的IP地址( 2 n − 2 2^n-2 2n−2)。
IP地址分类
IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。
A类,B类和C类地址为可分配IP地址,每类地址支持的网络数和主机数不同。比如,A类地址可支持126个网络,每个网络支持224 (16,777,216 )个主机地址,另外每个网段中的网络地址和广播地址不能分配给主机。
C类地址支持200多万个网络,每个网络支持256个主机地址,其中254个地址可以分配给主机使用。
D类地址为组播地址。主机收到以D类地址为目的地址的报文后,且该主机是该组播组成员,就会接收并处理该报文。
各类IP地址可以通过第一个字节中的比特位进行区分。如A类地址第一字节的最高位固定为0,B类地址第一字节的高两位固定为10,C类地址第一字节的高三位固定为110,D类地址第一字节的高四位固定为1110,E类地址第一字节的高四位固定为1111。
IP地址类型
私有地址范围:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
特殊地址(IPv4中的部分IP地址被保留用作特殊用途)
127.0.0.0~127.255.255.255 环回地址
0.0.0.0
255.255.255.255
为节省IPv4地址,A、B、C类地址段中都预留了特定范围的地址作为私网地址。
现在,世界上所有终端系统和网络设备需要的IP地址总数已经超过了32位IPv4地址所能支持的最大地址数4,294,967,296。
为主机分配私网地址节省了公网地址,可以用来缓解IP地址短缺的问题。
企业网络中普遍使用私网地址,不同企业网络中的私网地址可以重叠。
默认情况下,网络中的主机无法使用私网地址与公网通信;当需要与公网通信时,私网地址必须转换成公网地址。
还有其他一些特殊IP地址,如127.0.0.0网段中的地址为环回地址,用于诊断网络是否正常。IPv4中的第一个地址0.0.0.0表示任何网络,这个地址的作用将在路由原理中详细介绍。IPv4中的最后一个地址255.255.255.255是0.0.0.0网络中的广播地址。
网络通信
源主机必须要知道目的主机的IP地址后才能将数据发送到目的地。
源主机向其他目的主机发送报文之前,需要检查目的IP地址和源IP地址是否属于同一个网段。
如果是,则报文将被下发到底层协议进行以太网封装处理。如果目的地址和源地址属于不同网段,则主机需要获取下一跳路由器的IP地址,然后将报文下发到底层协议处理。
子网掩码
子网掩码用于区分网络部分和主机部分。子网掩码与IP地址的表示方法相同。**每个IP地址和子网掩码一起可以用来唯一的标识一个网段中的某台网络设备。**子网掩码中的1表示网络位,0表示主机位。
默认子网掩码
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
每类IP地址有一个缺省子网掩码。
A类地址的缺省子网掩码为8位,即第一个字节表示网络位,其他三个字节表示主机位。
B类地址的缺省子网掩码为16位,因此B类地址支持更多的网络,但是主机数也相应减少
。C类地址的缺省子网掩码为24位,支持的网络最多,同时也限制了单个网络中主机的数量。
通过子网掩码可以判断主机所属的网段、网段上的广播地址以及网段上支持的主机数。
如果企业网络中希望通过规划多个网段来隔离物理网络上的主机,使用缺省子网掩码就会存在一定的局限性。网络中划分多个网段后,每个网段中的实际主机数量可能很有限,导致很多地址未被使用,地址使用率很低。
变长子网掩码
缺省子网掩码可以进一步划分,成为变长子网掩码(VLSM)。
通过改变子网掩码,可以将网络划分为多个子网。本例中的地址为C类地址,缺省子网掩码为24位。现借用一个主机位作为网络位,借用的主机位变成子网位。一个子网位有两个取值0和1,因此可划分两个子网。该比特位设置为0,则子网号为0,该比特位设置为1,则子网号为128。将剩余的主机位都设置为0,即可得到划分后的子网地址;将剩余的主机位都设置为1,即可得到子网的广播地址。每个子网中支持的主机数为
2
7
−
2
2^7-2
27−2(减去子网地址和广播地址),即126个主机地址。
可变长子网掩码缓解了使用缺省子网掩码导致的地址浪费问题,同时也为企业网络提供了更为有效的编址方案。
无类域间路由
无类域间路由CIDR(Classless Inter Domain Routing)由RFC1817定义。
CIDR突破了传统IP地址的分类边界,将路由表中的若干条路由汇聚为一条路由,减少了路由表的规模,提高了路由器的可扩展性。
如上图所示,一个企业分配到了一段A类网络地址,10.24.0.0/22。该企业准备把这些A类网络分配给各个用户群,目前已经分配了四个网段给用户。如果没有实施CIDR技术,企业路由器的路由表中会有四条下连网段的路由条目,并且会把它通告给其他路由器。通过实施CIDR技术,我们可以在企业的路由器上把这四条路由10.24.0.0/24,10.24.1.0/24,10.24.2.0/24,10.24.3.0/24(前22位网络位相同)汇聚成一条路由10.24.0.0/22。这样,企业路由器只需通告10.24.0.0/22这一条路由,大大减小了路由表的规模。
网关(用来转发来自不同网段之间的数据包)
报文转发过程中,首先需要确定转发路径以及通往目的网段的接口,然后将报文封装在以太帧中通过指定的物理接口转发出去。
如果目的主机与源主机不在同一网段,报文需要先转发到网关,然后通过网关将报文转发到目的网段。
网关是指接收并处理本地网段主机发送的报文并转发到目的网段的设备。
为实现此功能,网关必须知道目的网段的IP地址。
网关设备上连接本地网段的接口地址即为该网段的网关地址。
IP包分片
网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个较小的片段才能够在链路上传输。
将报文分割成多个片段的过程叫做分片。
接收端根据分片报文中的标识符(Identification),标志(Flags),及片偏移(Fragment Offset)字段对分片报文进行重组。
标识符用于识别属于同一个数据包的分片,以区别于同一主机或其他主机发送的其它数据包分片,保证分片被正确的重新组合。
标志字段用于判断是否已经收到最后一个分片。
最后一个分片的标志字段设置为0,其他分片的标志字段设置为1,目的端在收到标志字段为0的分片后,开始重组报文。
片偏移字段表示每个分片在原始报文中的位置。
第一个分片的片偏移为0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。比如,如果首片报文包含1259比特,那么第二分片报文的片偏移字段值就应该为1260。
生存时间
报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会出现环路,导致报文在网络中无限循环,无法到达目的端。
环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文逐渐增多,网络将会发生拥塞。
为避免环路导致的网络拥塞,IP报文头中包含一个生存时间TTL(Time To Live)字段。
报文每经过一台三层设备,TTL值减1。初始TTL值由源端设备设置。当报文中的TTL降为0时,报文会被丢弃。同时,丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。
协议号
目的端的网络层在接收并处理报文以后,需要决定下一步对报文该做如何处理。
IP报文头中的协议字段标识了将会继续处理报文的协议。
与以太帧头中的Type字段类似,协议字段也是一个十六进制数。该字段可以标识网络层协议,如ICMP(Internet Control Message Protocol,因特网控制报文协议),
也可以标识上层协议,如TCP(Transmission Control Protocol,传输控制协议,对应值0x06)、UDP(User Datagram Protocol,用户数据包协议,对应值0x17)。
ICMP协议(网络层协议)
ICMP是TCP/IP协议簇的核心协议之一
ICMP协议用来在网络设备间发送控制报文传递各种差错、控制和查询信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。
ICMP重定向
ICMP Redirect重定向消息用于支持路由功能
主机A希望发送报文到服务器A,于是根据配置的默认网关地址(更小的那个,10.0.0.100/24)向网关RTB发送报文。网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径,所以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关RTA发送该报文。主机收到Redirect消息后,会向RTA发送报文,然后RTA会将该报文再转发给服务器A。
ICMP差错检测
ICMP Echo消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其他信息,如报文往返时间等。
ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。
ICMP错误报告
ICMP定义了各种错误消息,用于诊断网络连接性问题;
根据这些错误消息,源设备可以判断出数据传输失败的原因。
比如:
如果网络中发生了环路,导致报文在网络中循环,且最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。
又比如:
如果目的地不可达,则中间的网络设备会发送目的不可达消息给发送端设备。
目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。
ICMP数据包格式
ICMP消息封装在IP报文中。
ICMP消息的格式取决于Type和Code字段,其中Type字段为消息类型,Code字段包含该消息类型的具体参数。后面的校验和字段用于检查消息是否完整。消息中包含32比特的可变参数,这个字段一般不使用,通常设置为0。
在ICMP Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。
在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端向目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo请求和回复消息进行一一对应。
ICMP消息类型和编码类型
ICMP定义了多种消息类型,并用于不同的场景。
有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。比如,ICMP Echo回复消息的Type字段设置为0。
有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。
比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1)、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3)等。
ICMP应用—Ping
Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
Ping常用的配置参数说明如下:
- -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP
ECHO-REQUEST报文发送的源地址。Echo请求消息(Type=8)- -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。
- -h ttl-value指定TTL的值。缺省值是255。
- -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超时时间。
Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值以及往返时间。序号是包含在==Echo回复消息(Type=0)==中的可变参数字段,TTL和往返时间包含在消息的IP头中。
ICMP应用—Tracert
Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
Tracert常用的配置参数说明如下:
1、-a source-ip-address指定tracert报文的源地址。
2、-f first-ttl指定初始TTL。缺省值是1。
3、-m max-ttl指定最大TTL。缺省值是30。
4、-name使能显示每一跳的主机名。
5、-p port指定目的主机的UDP端口号。
1、源端(RTA)向目的端(主机B)发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,(因为在大多数情况下,大于30000的UDP端口号是任何一个应用程序都不可能使用的端口号。)
2、第一跳(RTB)收到源端发出的UDP报文后,判断出报文的目的IP地址不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第一跳的IP地址10.0.0.2),这样源端就得到了RTB的地址。
3、源端收到RTB的ICMP超时报文后,再次向目的端发送一个UDP报文,TTL值为2。
第二跳(RTC)收到源端发出的UDP报文后,回应一个ICMP超时报文,这样源端就得到了RTC的地址(20.0.0.2)。
4、以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口号,则向源端返回一个ICMP端口不可达(Destination Unreachable)报文。
5、源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端,则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径(10.0.0.2;20.0.0.2;30.0.0.2)。
ARP协议
ARP(Address Resolution Protocol)协议:通过目的IP地址来获取目的MAC地址。
一个网络设备要发送数据给另一个网络设备时,必须要知道对方的IP地址。但是,仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过数据链路进行发送,而数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。每一个网络设备在数据封装前都需要获取下一跳的MAC地址。IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中的重要组成部分,它能够通过目的IP地址获取目标设备的MAC地址,从而实现数据链路层的可达性。
ARP数据包格式
Hardware Type表示硬件地址类型,一般为以太网;
Protocol Type表示三层协议地址类型,一般为IP;
Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
Operation Code指定了ARP报文的类型,包括ARP Request和ARP Reply;
Source Hardware Address指的是发送ARP报文的设备MAC地址;
Source Protocol Address指的是发送ARP报文的设备IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0;
Destination Protocol Address指的是接收者的IP地址。
ARP报文不能穿越路由器,不能被转发到其他广播域
ARP缓存
网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。**如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。**学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。
ARP请求及响应(数据封装在数据链路层)
主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC地址。ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机A的MAC地址。此时,由于主机A不知道主机C的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。ARP Request报文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。网关将会阻止该报文发送到其他网络上。
所有的主机接收到该ARP Request报文后,都会检查它的目的协议地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。
主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply。ARP Reply报文通过单播传送。
主机A收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC匹配。如果匹配,ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。
ARP代理
同一网段、不同物理网络的计算机之间,可通过ARP代理实现相互通信。
启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP Request。主机A收到ARP Reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。
免费ARP
探测IP地址是否冲突
主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。
主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。
传输层协议
传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol)。
TCP
TCP是一种面向连接的传输层协议,可提供可靠的传输服务。
TCP端口号
端口号用来区分不同的网络服务。
协议 | 端口号 |
---|---|
ftp | 21、20 |
HTTP | 80 |
Telnet (远程控制) | 23 |
SMTP(邮件) | 25 |
TCP头部
TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。
TCP数据段由TCP Header(头部)和TCP Data(数据)组成。
TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。TCP Header是由如上图标识的一些字段组成,这里列出几个常用字段。
16位源端口号:源主机的应用程序使用的端口号。
16位目的端口号:目的主机的应用程序使用的端口号。
每个TCP头部都包含源和目的端的端口号,这两个值加上IP头部中的IP地址和目的IP地址可以唯一确定一个TCP连接。
32位序列号:用于标识从发送端发出的不同的TCP数据段的序号。
数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。
32位确认序列号:用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号加1。
4位头部长度:表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节。
16位窗口大小:表示接收端期望通过单次确认而收到的数据的大小。由于该字段为16位,所以窗口大小的最大值为65535字节,该机制通常用来进行流量控制。
16位校验和:校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。
TCP建立连接的过程
TCP通过三次握手建立可靠连接(双向连接)。
- 主机A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a。
- 服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。
- 主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认。
TCP终止连接则需要经过四次握手(在关闭连接之前,要确认收到来自对方的ACK)。
UDP
UDP是一种面向无连接的传输层协议,传输可靠性没有保证。