OSI 参考模型(Open System Interconnection Reference Model,开放式系统互联通信参考模型),是 ISO (国际标准化组织)组织在 1985 年研究的网络互联模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。
OSI 参考模型
ISO 通信功能七个层次的划分原则是:
- 网路中各节点都有相同的层次;
- 不同节点的同等层具有相同的功能;
- 同一节点内相邻层之间通过接口通信;
- 每一层使用下层提供的服务,并向其上层提供服务;
- 不同节点的同等层按照协议实现对等层之间的通信。
OSI参考模型具有以下优点:
- 简化了相关的网络操作;
- 提供设备间的兼容性和标准接口;
- 促进标准化工作;
- 结构上可以分隔,各层可以独立修改或者扩充;
- 易于实现和维护;
- 有利于大家学习、理解数据通讯网络。
各层包含的协议大致如下图所示:
各层功能详述如下:
- 物理层 (Physical Layer):物理层是 OSI 参考模型的最低层,它利用传输介质为数据链路层提供物理连接。它主要关心的是通过物理链路从一个节点向另一个节点传送
比特流
,物理链路可能是铜线、卫星、微波或其他的通讯媒介。它关心的问题有:多少伏电压代表 1 ?多少伏电压代表 0 ?时钟速率是多少?采用全双工还是半双工传输?总的来说物理层关心的是链路的机械、电气、功能和规程特性。 - 数据链路层 (Data Link Layer):数据链路层是为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为
数据帧
。数据帧中包含物理地址(又称 MAC 地址)、控制码、数据及校验码等信息。该层的主要作用是通过校验、确认和反馈重发等手段,将不可靠的物理链路转换成对网络层来说无差错的数据链路。此外,数据链路层还要协调收发双方的数据传输速率,即进行流量控制,以防止接收方因来不及处理发送方来的高速数据而导致缓冲器溢出及线路阻塞。 - 网络层 (Network Layer):网络层是为传输层提供服务的,传送的协议数据单元称为
数据包(分组)
。该层的主要作用是解决如何使数据包通过各结点传送的问题,即通过路径选择算法(路由)将数据包送到目的地。另外,为避免通信子网中出现过多的数据包而造成网络阻塞,需要对流入的数据包数量进行控制(拥塞控制)。当数据包要跨越多个通信子网才能到达目的地时,还要解决网际互连的问题。 - 传输层 (Transport Layer):(TCP协议)传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题,传输层传送的协议数据单元称为
数据段(报文)
。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。 - 会话层 (Session Layer):会话层主要功能是管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话。会话层得名的原因是它很类似于两个实体间的会话概念。例如,一个交互的用户会话以登录到计算机开始,以注销结束。
- 表示层 (Presentation Layer):表示层处理流经结点的数据编码的表示方式问题,以保证一个系统应用层发出的信息可被另一系统的应用层读出。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据表示格式转换成网络通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
- 应用层 (Application Layer):(HTTP协议)应用层是 OSI 参考模型的最高层,是用户与网络的接口。该层通过应用程序来完成网络用户的应用需求,如文件传输、收发电子邮件等。
TCP/IP 协议栈
由于OSI模型和协议比较复杂,所以并没有得到广泛的应用。而TCP/IP(transfer control protocol/internet protocol,传输控制协议/网际协议)模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP协议栈也成为互联网的主流协议。
TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换。所谓”协议”可以理解成机器之间交谈的语言,每一种协议都有自己的目的。TCP/IP模型一共包括几百种协议,对互联网上交换信息的各个方面都做了规定。
这些协议可以大致分成四个层次,分别为连接层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer),上一层的协议都以下一层的协议为基础,数据传输的的过程如下图所示:
协议栈向下传递数据,并添加报头和报尾的过程称为封装
,数据被封装并通过网络传输后,接收设备将删除添加的信息,并根据报头中的信息决定如何将数据沿协议栈上传给合适的应用程序,这个过程称为解封装
。不同设备的对等层之间依靠封装和解封装来实现相互间的通信。
整个的因特网就是一个单一的、抽象的网络。IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位的标识符。
IP 地址
每个 32 位的 IP 地址由高位的可变长网络和低位的主机两部分组成。同一网络的所有主机,其地址的网络值是相同的。这意味着一个网络对应一块连续的 IP 地址空间,这块地址空间就称为地址的前缀
。如果前缀包含 2^8 个主机地址,那么就留下了 24 位用于网络部分,可以写成 *.*.*.*/24
。子网掩码
用来与一个 IP 地址进行 AND 操作,提取出该 IP 地址的网络部分。
子网划分
:在内部将一个网络块分成几个部分供多个内部网络使用,但对外部世界仍像单个网络一样。 路由聚合
:把多个小前缀的地址块合并成一个大前缀的地址块。(解决路由表过大的问题)。
1953年,IP 地址被分为 5 个类别:
注意全零(0.0.0.0)地址对应于当前主机。全1的IP地址(255.255.255.255)是当前子网的广播地址。
还有三个范围的 IP地址被声明为私有化,任何网络可以在内部随意地使用这些地址,但是不允许包含这些地址的数据包出现在 Internet 上。
- 1 个A类地址:10.0.0.0~10.255.255.255/8 (2^24 个地址)
- 16 个B类地址:172.16.0.0~172.31.255.255/16 (16 * 2^16 个地址)
- 256个C类地址:192.168.0.0~192.168.255.255/24 (256*2^8 个地址)
保留IP地址不会在internet网上出现,用于企业网络,A企业可以用,B企业也可以使用!
IP 报文
报头各字段:
- 版本号(Version):标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110)
- 头部长度(Header Length):这个字段的作用是为了描述IP包头的长度,因为在IP包中有变长的可选部分。
- 服务类型(Type of Service):这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS应用。(TOS字段的详细描述RFC 1340 1349)
- 总长(Total Length):长度16比特。IP包最大长度65535字节。
- 标识符(Identifier):该字段和Flags和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。
- 标记(Flags):该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
- 分段序号(Fragment Offset):该字段对包含分段的上层数据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要求重传。
- 生存时间(TTL):TTL长度8 bit,最大值是255,TTL的一个推荐值是64。虽然从字面上翻译,TTL是IP数据包在计算机网络中的存在的最长时间。但实际上TTL是IP数据包在网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向发送者发送 ICMP time exceeded消息。TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络带宽,并能使IP包的发送者能收到告警消息。这个字段可以防止由于故障而导致IP包在网络中不停被转发。
- 起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。
路由协议
在互联网中,网络结构是相当复杂的(存在复杂的局域网或广域网),若想要将数据包从一个主机成功发送到目的主机,则需要合理的路由将数据转发最终发送到目的主机。而要使路由能够正确的工作,需要路由控制模块和相关的路由协议
来支持路由的工作。
TCP,UDP区别
TCP协议和UDP协议特性区别,主要从连接性、可靠性、有序性、拥塞控制、传输速度、头部大小(Header size)等6个方面来讲。
- TCP是面向连接的协议,UDP是无连接协议。TCP用三次握手建立连接,UDP发送数据前不需要建立连接;
- TCP可靠,UDP不可靠。TCP丢包会重传,并且有确认机制,UDP不会;
- TCP有序,UDP无序。消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会;
- TCP 必须对数据进行校验,而UDP的校验是可选的;
- TCP有流量控制(滑动窗口)和拥塞控制,UDP没有;
- TCP传输慢,UDP传输快。因为TCP需要建立连接、保证可靠性和有序性,所以比较耗时。
- TCP要建立连接、保证可靠性和有序性,就会传输更多的信息,包头比较大(TCP头部至少需要20字节,UDP头部只要8个字节)。
基于TCP的协议有:HTTP/HTTPS,Telnet,FTP,SMTP。 基于UDP的协议有:DHCP,DNS,SNMP,TFTP,BOOTP。
网络层
网络层(network layer)是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet。更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息。
IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。
ICMP 协议
ICMP 是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息
。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP基于IP协议,也就是说,一个ICMP包需要封装在IP包中,然后在互联网传送。ICMP是IP套装的必须部分,任何一个支持IP协议的计算机,都要同时实现ICMP。
ICMP传输的控制信息可以分为两大类:
错误(error)信息
:这一类信息可用来诊断网络故障。IP协议的工作方式是“Best Effort”,如果IP包没有被传送到目的地,或者IP包发生错误,IP协议本身不会做进一步的努力。但上游发送IP包的主机和接力的路由器并不知道下游发生了错误和故障,它们可能继续发送IP包。通过ICMP包,下游的路由器和主机可以将错误信息汇报给上游,从而让上游的路由器和主机进行调整。咨询(Informational)信息
:比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答。
ICMP包有Type, Code和Checksum三部分:
- 类型:指明该数据包属于什么类型(大分类),长度1个字节。
- 代码:指明数据包属于大类里面的哪个小类,长度1个字节。类型字段与代码字段共同决定ICMP数据包类型,以及后续字段含义。
- 校验和: 指明该数据包的校验和,长度2个字节。该校验和覆盖整个ICMP数据包。
ICMP数据包通过类型字段与代码字段来共同决定该数据包传达的控制信息。常见的ICMP包类型:
- 0(Echo Reply):属于咨询信息,ping命令就是利用了该类型的ICMP包。
- 3(Destination Unreachable)属于错误信息。如果一个路由器接收到一个IP包,不知道下一步往哪里发送,就会向出发主机发送该类型的ICMP包。
- 11(Time Exceeded)属于错误信息。IPv4中的Time to Live(TTL)会随着经过的路由器而递减,当这个区域值减为0时,就认为该IP包超时(Time Exceeded)。traceroute就利用了这种类型的ICMP包,它向目的地发送IP包,第一次的时候,将TTL设置为1,引发第一个路由器的Time Exceeded错误。这样,第一个路由器回复ICMP包,从而让出发主机知道途径的第一个路由器的信息。随后TTL被设置为2、3、4,...,直到到达目的主机。这样,沿途的每个路由器都会向出发主机发送ICMP包来汇报错误。traceroute将ICMP包的信息打印在屏幕上,就是接力路径的信息了。
地址解析协议(ARP)
首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP地址。
当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应
。
RARP协议
:反向地址转换协议,允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTP或DHCP所取代。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系。当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。