目录

网络_分层

网络分层

./网络分层图.png

在OSI七层模型中,每一层的作用和对应的协议如下:

./网络分层及代表协议.png

我们都知道数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。接收端的操作就刚好与此相反,它是一层一层剥数据的过程。 每个数据都会经过数据的封装和解封装的过程。

  • 第7层 应用层 应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3.HTML.等。

  • 第6层 表示层 表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。在传输之前是否进行加密或压缩处理。

  • 第5层 会话层 会话层(Session Layer)负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。查木马。

  • 第4层 传输层 传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。udp并不能保证可靠传输,这个时候就要依赖应用层来保证了。

  • 第3层 网络层 网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议(IP)等。负责规划最佳路径,规划IP地址。网络层并不能保证成功传输。 整个包最大65535字节。

  • 第2层 数据链路层 数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。帧的开始和结束,透明传输,差错校验(但不能纠错,纠错由传输层)。 分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Medium access control,MAC)子层。 这个帧最大1500字节。网络层数据过大就分片。网络层头部分有个“标识”字段,在链路层分片后是可以看到的,相同的“标识”值是同一个ip数据包分割而来的。

  • 第1层 物理层 物理层(Physical Layer)在局部局域网上传送数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。

链路层

数据链路层的主要功能

  • 封装成帧
  • 差错控制
  • 流量控制
  • 链路控制
  • MAC寻址
  • 区分数据和控制信息
  • 透明传输
  1. 成帧(帧同步)—将数据组合成数据块,封装成帧

为了向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层是以比特流进行传输的,这种比特流并不保证在数据传输过程中没有错误,接收到的位数量可能少于、等于或者多于发送的位数量。而且它们还可能有不同的值,这时数据链路层为了能实现数据有效的差错控制,就采用了一种”帧”的数据块进行传输。而要采帧格式传输,就必须有相应的帧同步技术,这就是数据链路层的”成帧”(也称为”帧同步”)功能。

采用帧传输方式的好处是:在发现有数据传送错误时,只需将有差错的帧再次传送,而不需要将全部数据的比特流进行重传,这就在传送效率上将大大提高。

采用帧传输方式的好处是带来了两方面的问题:

(1)如何识别帧的开始与结束;

(2)在夹杂着重传的数据帧中,接收方在接收到重传的数据帧时是识别成新的数据帧,还是识别成重传帧呢?这就要靠数据链路层的各种”帧同步”技术来识别了。”帧同步”技术既可使接收方能从并不是完全有序的比特流中准确地区分出每一帧的开始和结束,同时还可识别重传帧。

  1. 差错控制

在数据通信过程中可能会因物理链路性能和网络通信环境等因素,难免会出现一些传送错误,但为了确保数据通信的准确,又必须使得这些错误发生的几率尽可能低。这一功能也是在数据链路层实现的,就是它的”差错控制”功能。

在数字或数据通信系统中,通常利用抗干扰编码进行差错控制。一般分为4类:前向纠错(FEC)、反馈检测(ARQ)、混合纠错(HEC)和信息反馈(IRQ)。

FEC方式是在信息码序列中,以特定结构加入足够的冗余位–称为”监督元”(或”校验元”)。接收端解码器可以按照双方约定的这种特定的监督规则,自动识别出少量差错,并能予以纠正。FEC最适合于实时的高速数据传输的情况。

在非实时数据传输中,常用ARQ差错控制方式。解码器对接收码组逐一按编码规则检测其错误。如果无误,向发送端反馈”确认”ACK信息;如果有错,则反馈回ANK信息,以表示请求发送端重复发送刚刚发送过的这一信息。ARQ方式的优点在于编码冗余位较少,可以有较强的检错能力,同时编解码简单。由于检错与信道特征关系不大,在非实时通信中具有普遍应用价值。

HEC方式是上述两种方式的有机结合,即在纠错能力内,实行自动纠错;而当超出纠错能力的错误位数时,可以通过检测而发现错码,不论错码多少都可以利用ARQ方式进行纠错。

IRQ方式是一种全回执式最简单差错控制方式。在该检错方式中,接收端将收到的信码原样转发回发送端,并与原发送信码相比较,若发现错误,则发送端再进行重发。只适于低速非实时数据通信,是一种较原始的做法。

  1. 流量控制

在双方的数据通信中,如何控制数据通信的流量同样非常重要。它既可以确保数据通信的有序进行,还可避免通信过程中不会出现因为接收方来不及接收而造成的数据丢失。这就是数据链路层的”流量控制”功能。

数据的发送与接收必须遵循一定的传送速率规则,可以使得接收方能及时地接收发送方发送的数据。并且当接收方来不及接收时,就必须及时控制发送方数据的发送速率,使两方面的速率基本匹配。

  1. 链路控制

数据链路层的”链路管理”功能包括数据链路的建立、维持和释放三个主要方面。

当网络中的两个节点要进行通信时,数据的发送方必须确知接收方是否已处在准备接收的状态。为此通信双方必须先要交换一些必要的信息,以建立一条基本的数据链路。在传输数据时要维持数据链路,而在通信完毕时要释放数据链路。

  1. MAC寻址

这是数据链路层中的MAC子层主要功能。这里所说的”寻址”与下一章将要介绍的”IP地址寻址”是完全不一样的,因为此处所寻找的地址是计算机网卡的MAC地址,也称”物理地址”、”硬件地址”,而不是IP地址。

在以太网中,采用媒体访问控制(Media Access Control, MAC)地址进行寻址,MAC地址被烧入每个以太网网卡中。这在多点连接的情况下非常必需,因为在这种多点连接的网络通信中,必须保证每一帧都能准确地送到正确的地址,接收方也应当知道发送方是哪一个站。

  1. 区分数据和控制信息

由于数据和控制信息都是在同一信道中传输,在许多情况下,数据和控制信息处于同一帧中,因此一定要有相应的措施使接收方能够将它们区分开来,以便向上传送仅是真正需要的数据信息。

  1. 透明传输

这里所说的”透明传输”是指可以让无论是哪种比特组合的数据,都可以在数据链路上进行有效传输。这就需要在所传数据中的比特组合恰巧与某一个控制信息完全一样时,能采取相应的技术措施,使接收方不会将这样的数据误认为是某种控制信息。只有这样,才能保证数据链路层的传输是透明的。

注:在以上七大链路层功能中,主要的还是前面的五项,后面两项功能是在前五项功能中附带实现的,无需另外的技术,所以在此仅介绍前面五项功能。

链路层向网络层提供的服务

数据链路层的设计目标就是为网络层提供各种需要的服务。实际的服务随系统的不同而不同,但是一般情况下,数据链路层会向网络层提供以下三种类型的服务:

  1. 无确认的无连接服务

“无确认的无连接服务”是指源计算机向目标计算机发送独立的帧,目标计算机并不对这些帧进行确认。这种服务,事先无需建立逻辑连接,事后也不用解释逻辑连接。正因如此,如果由于线路上的原因造成某一帧的数据丢失,则数据链路层并不会检测到这样的丢失帧,也不会恢复这些帧。出现这种情况的后果是可想而知的,当然在错误率很低,或者对数据的完整性要求不高的情况下(如话音数据),这样的服务还是非常有用的,因为这样简单的错误可以交给OSI上面的各层来恢复。如大多数局域网在数据链路层所采用的服务也是无确认的无连接服务。

  1. 有确认的无连接服务

为了解决以上“无确认的无连接服务”的不足,提高数据传输的可靠性,引入了“有确认的无连接服务”。在这种连接服务中,源主机数据链路层必须对每个发送的数据帧进行编号,目的主机数据链路层也必须对每个接收的数据帧进行确认。如果源主机数据链路层在规定的时间内未接收到所发送的数据帧的确认,那么它需要重发该帧。 这样发送方知道每一帧是否正确地到达对方。这类服务主要用于不可靠信道,如无线通信系统。它与下面将要介绍的“有确认的面向连接服务”的不同之处在于它不需要在帧传输之前建立数据链路,也不要在在帧传输结束后释放数据链路。

  1. 有确认的面向连接服务

大多数数据链路层都采用向网络层提供面向连接确认服务。利用这种服务,源计算机和目标计算机在传输数据之前需要先建立一个连接,该连接上发送的每一帧也都被编号,数据链路层保证每一帧都会被接收到。而且它还保证每一帧只被按正常顺序接收一次。这也正是面向连接服务与前面介绍的“有确认无连接服务”的区别,在无连接有确认的服务中,在没有检测到确认时,系统会认为对方没收到,于是会重发数据,而由于是无连接的,所以这样的数据可能会复发多次,对方也可能接收多次,造成数据错误。这种服务类型存在3个阶段,即:数据链路建立、数据传输、数据链路释放阶段。每个被传输的帧都被编号,以确保帧传输的内容与顺序的正确性。大多数广域网的通信子网的数据链路层采用面向连接确认服务。

以太网采用无连接的工作方式,读发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错的帧就把他丢弃,不采取其他行为。

帧格式

./链路层以太网帧格式.png 其中末尾的crc生成fcs是校验位,校验数据传输中是否出错,类似于数字签名。

链路层协议

以太网(Ethernet)协议;PPPoE(ADSL)协议;等

mac地址

以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡, 数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。MAC地址采用十六进制标识,共6个字节, 前三个字节是厂商编号,后三个字节是网卡流水号,例如 4C-0F-6E-12-D2-19

有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

网络层

网络层负责在不同网络之间尽力转发数据包,基于数据包的ip地址转发。 不负责数据的丢失重传,丢就丢了,也不负责顺序,这些都是上层传输层该干的事。

ip协议 静态路由:路由器判断ip数据包要想到达目的地下一步需要去哪个路由器,可以有静态的路由表。

动态路由:网段过多,静态路由显然不合适,而且网络变化静态路由不会跟着变化。动态路由可以自己学习。 动态路由有RIP协议,可以判断最佳路由路径。

ARP协议 网络层中为ip协议服务,主要作用是在同一网段中通过ip找到对应的计算机的mac地址。实现方式是通过广播,当计算机中收到数据时和自己的ip比对,如果一致就返回自己的mac地址。 有恶意的计算机会假装满足所有的ip,返回自己的mac就能收到后面的数据,或者返回一个不存在的mac的地址,造成别人无法正常通讯。 ICMP协议 ICMP协议是网络层在ip上层的协议,主要用于检测网络层是否畅通。 ping(网络包嗅探器)命令就是其协议的应用。 ping命令结果中有ttl,其含义是每经过一个路由器ttl就减少1,当减少到0的时候就不往下传了,这样可以避免路由循环占用流量。ttl的开始数据根据操作系统不同而不同。 IGMP协议 多播组播

ip数据报格式

ip数据报格式.png 由首部和数据两部分组成.首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的.在首部的固定部分的后面是一些可选字段,其长度是可变的。ipv6已经将首部长度改为固定的,去掉可选部分。

版本:占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致.日前广泛使用的 IP协议版本号为 4 (即 IPv4).IPv6 目前还处于起步阶段.

首部长度:占 4 位。

总长度:总长度指首都及数据之和的长度,单位为字节.因为总长度字段为 16位,所以数据报的最大长度为 216-1=65 535字节.在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit).当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,否则要分片.

标识 (Identification):占 16位.IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段.但这个"标识"并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题.当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有分片后的数据报的标识字段中.相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报.

标志 (Flag):占3 位,但目前只有2位有意义. 标志字段中的最低位记为 MF(More Fragment).MF=1即表示后面"还有分片"的数据报.MF=0表示这已是若干数据报片中的最后一个.标志字段中间的一位记为DF(Don’t Fragment),意思是"不能分片",只有当 DF=0时才允许分片.

片偏移:占 13位.较长的分组在分片后,某片在原分组中的相对位置.也就是说,相对用户数据字段的起点,该片从何处开始.片偏移以 8个字节为偏移单位,这就是说,每个分片的长度一定是 8字节(64位)的整数倍.

生存时间:占 8位,生存时间字段常用的英文缩写是TTL(Time To Live),其表明数据报在网络中的寿命.

协议:占 8 位.协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。比如交给tcp还是udp。TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.