目录
4.4 ARP协议(Address Resolution Protocol)
4.5 RIP协议(Routing Information Protocol)
4.7 ICMP协议(Internet Control Message Protocol)
5.1 UDP协议(User Datagram Protocol)
5.2 TCP协议(Transmission Control Protocol)
6.3 DHCP协议(Dynamic Host Configuration Protocol,动态主机配置协议)
一、网络分层
1.1 OSI七层模型
由国际标准化组织提出的一种概念模型。该模型将通信系统中的数据流划分为七个层次,每个中间层为其上一层提供功能,其自身功能则由其下一层提供,第1层在底部。
第七层 应用层:提供为应用软件而设计的接口,以设置与另一应用软件之间的通信。
第六层 表示层:把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第五层 会话层:负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。对应主机进程,指本地主机与远程主机正在进行的会话
第四层 传输层:把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。
第三层 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。
第二层 数据链路层:负责网络寻址、错误侦测和改错。将比特组合成字节,进而组合成帧,用MAC地址访问介质,能发现错误但不能纠正。
第一层 物理层:建立、维护、断开物理连接。
1.2 TCP/IP 四层模型
OSI七层模型只是一种理论上的概念模型,并没有提供一个可以实现的方法,而只是描述了一些概念,并不一定就完全代表了实际情况。其实在实践中不用分的那么细致,OSI中的一些理论分层可以"合并"实现。实际情况使用的就是TCP/IP四层模型,其定义如下:
第四层 应用层:相当于组合了OSI七层模型中的会话层、表示层、应用层
第三层 传输层:同OSI七层模型中的传输层
第二层 网际层:同OSI七层模型中的网络层
第一层 网络访问(链接)层:相当于OSI七层模型中的物理层和数据链路层
1.3 五层模型
除了上面提到的理论上的七层模型和实际使用的四层模型,还有一个五层模型。这个五层模型结合了七层模型和四层模型,主要用于网络协议原理介绍,它与TCP/IP四层模型的区别就是将网络访问(链接)层分为了数据链路层和物理层。OSI七层模型、TCP/IP四层模型和五层模型对比如下:
接下来就以五层协议为标准进行总结。
二、物理层
物理层是模型中最低的一层,它确保原始数据可以在各种物理媒介上传播。所谓的媒介包括光纤、电缆或者电磁波等等,这些媒介可以传输物理信号,比如高电压、低电压。若用1表示高电压,0表示低电压,将数据转化为按照规范组合的0/1序列,就可以在物理媒介上传播了。对于接收设备,也需要接口能接受这些物理信号,将其重新转换为0/1序列,以完成数据的接收。
三、数据链路层
即连接层,在两个网络实体之间提供数据链路连接的创建、维持和释放管理,信息以帧为单位传输。所谓帧,就是一段0/1序列组合,其中有收信地址、送信地址、校验序列(探测错误)等等,其中的地址是MAC地址。帧中的数据往往符合更高层协议,供上层使用。数据链路层就像一个送货员,不会关心数据的具体内容。
此层中常见的协议有以太网、WiFi、帧中继等等,通过这些协议,我们可以建立一个局部网络(局域网),使得一个局域网中的两台计算机可以通信。
帧分为帧头、数据、帧尾,帧头和帧尾包含同步信息、收发地址信息、差错控制信息等,数据部分则包含网络层传下来的数据,比如IP数据包。
帧头包含一段被称为序言的0/1序列,开始会以一定的频率发送序言,接收设备要按照一定的频率接收才能做到不丢失信息。就像我们收听录音机之前,需要先调整接收频率,直到听清楚播报内容,这个过程叫做调频。在帧中,序言就是为了发送设备和接收设备频率一致,这个过程叫做时钟复原。时钟调整好之后,等待帧的起始信号(SFD,start frame delimiter,为固定值)。起始信号之后,还有帧的发送地址和目的地址,当然,这个地址是MAC地址。
关于数据部分,前面已经提过了,一般包含符合更高层协议的数据,但是由于数据有最小长度限制,所以尾部可能包含一部分0填充。
帧尾包含校验序列(FCS ,Frame Check Sequence),主要是为了校验数据是否发生错误。检测使用CRC(Cyclic Redundancy Check,循环冗余检查)算法:在一个n位二进制序列之后增加一个m位的二进制序列,生成长度为n+m的新二进制序列。这个m位的二进制序列可以称之为校验位,m位的校验位与n位的原数据之间存在一定的关联,如果原数据异常,就能通过校验位检测出来。
3.1 集线器和交换器
一台集线器或者交换器上有很多端口,每个端口都能连接一台设备。
-
集线器:一台设备将帧发送到集线器,集线器会将帧广播到其他所有端口,每台设备收到帧之后,检查帧的目标地址是不是本设备的MAC地址,如果不是则忽略该帧。也就是以广播的方式转送消息,所有设备都能收到其他设备发送的消息。存在的问题一个是安全性,当然可以加密消息;另外一个是不允许多路同时通信,如果两台设备同时向集线器发送消息,那么集线器会提醒发生冲突,设备上可以实现冲突检测算法,如果发生冲突,那么随机等待一段时间再发送。WiFi的工作方式与此类似,所以WiFi需要特别注重加密(WPA、WPA2)。
-
交换器:交换器记录了每个设备的MAC地址,当交换器收到帧之后,会根据帧的目的地址和本机存储的MAC地址记录,只将帧发送到对应的端口,进而准确发送到对应的设备。交换器允许多路同时通信。
四、网络层
数据链路层使得同一个局域网中的的计算机可以相互通信,但是也只限于同一个局域网。要想让一个局域网里的计算机和以太网上的另一台计算机通信,则需要一些其它手段。这就是网络层需要做的事儿:提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。
在数据链路层的帧中,只有送信地址和收信地址(MAC地址),但是跨局域网通信至少需要四个地址(比如数据从一个计算机经过WiFi接口,以太网接口,再到另一个计算机),又由于数据链路层已经存在并且正在使用,不能随意对其更改,所以只能在数据内容上做文章:将目标地址、校验信息等写到数据内容开头,反正数据链路层也不关心具体的数据,这就是IP协议。网络层协议由IP协议规定和实现,所以网络层又称为IP层。
关于目标地址,IP协议需要的地址和数据链路层需要的地址不一样。数据链路层的地址是物理地址(MAC地址),相对应的,网络层使用的地址叫做IP地址。当设备连接网络,设备将被分配一个IP地址用作标识。通过IP地址,不同网络间的设备可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,哪个是接收方。
大多数接入Internet的方式是把主机通过局域网组织在一起,然后再通过交换机或路由器等设备和 Internet 相连接。在同一个局域网络中的计算机不需要网络层,仅依靠数据链路层就可以通信,但是对于不同的网络之间相互通信则必须借助路由器等设备。
4.1 MAC地址和IP地址
两台设备进行通讯的前提就是知道双方的地址,而IP地址和MAC地址都是地址,那么仅仅依靠IP地址或者MAC地址能否完成路由呢?
随着网络接入设备越来越多,为了解决寻址的问题,网络结构被层次化构造,被划分为了很多个子网,在路由的时候,如果数据包的目的地在其他子网,那么只需要把数据包路由到该子网,剩下的工作交由子网内部处理,这极大的减少了路由器计算量。
MAC地址有48位,可以唯一表示一个网卡,是网络设备制造商生产时写在硬件内部的。而基于子网的这个结构,如果使用MAC地址进行以太网设备的寻址,那么路由器需要记住每个MAC地址所在的子网。但是理论上,MAC地址可以有2^48个,这个数据量需要占用的内存就不允许我们这样做,所以有了IP地址。(以下对于IP地址的描述都基于IPV4)。
IP地址由IP协议提供统一的地址格式。一个IP地址包含两个标识码:网络ID和主机ID。同一个局域网络上的所有设备都是用同一个网络ID,网络上的一个主机(包括路由器)有一个主机ID与其对应。IP地址(IPV4)是一个32位的二进制数,通常被分割为4个8位二进制数,一共4个字节,比如通过点分十进制表示格式为:123.324.213.23,其中每个部分都是对应8位二进制数的十进制形式。同时,Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。以C类IP地址为例:
一个C类IP地址的4段号码中,前三段为网络ID,第四段为主机ID,也就是说C类IP地址由3字节(24位)的网络地址和1字节(8位)的主机地址组成。而C类地址的最高位固定为110(二进制),所以其能表示的地址范围为:11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110,对应的点分十进制即:192.0.0.1-223.255.255.254,子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2(除去私有地址192.168.0.0到192.168.255.255)=254台。
有了IP地址,再回到寻址的问题。IP地址是和子网相关的,对于通一个