OSI 七层模型
在 OSI 网络分层模型中,每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的约定叫做接口 ;同一层之间的交互所遵循的约定叫做协议, 下图是 OSI 七层模型。
应用层:
应用层就是为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录等协议
从用户输入完所要发送的内容并点击发送按钮的那一刻开始,就进入了应用层协议的处理。该协议会在所要传送数据的前端附加一个首部信息。该首部标明了邮件内容和收件人。这一附有首部信息的数据传送给对应主机以后由该主机上的收发邮件软件通过收信功能获取内容
表示层:
表示层就是 将应用层处理的信息转换为适合网络传输的格式,或将来自上一层的数据转换为下层能够处理的格式。因此它主要负责数据格式的转换
表示层是进行统一的网络数据格式与某一台计算机或某一款软件特有的数据格式之间相互转换的分层。表示层与表示层之间为了识别编码格式也会附加首部信息,从而将实际传输的数据交换给下一层去处理
会话层:
负责建立和断开通信连接,以及数据的分隔等数据传输相关的管理。
假定用户 A 新建了 5 封电子邮件准备发送给用户 B 。这 5 封邮件的发送顺序可以由很多种。例如,可以每发一封邮件时建立一次连接,随后断开连接。还可以一经建立好连接后就将5 封邮件连续发送给对方。甚至可以同时建立好 5 个连接,将 5 封邮件同时发送给对方。决定采用何种连接方法是会话层的主要责任会话层也像应用层或表示层那样,在其收到的数据前端附加首部或标签信息后再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息
传输层:
管理两个节点之间的数据传输。起着可靠传输的作用
进行建立连接或断开连接的处理,在两个主机之间创建逻辑上的通信连接即是传输层的主要作用。此外,传输层为确保所传输的数据到达目标地址,会在通信两端的计算机之间进行确认,如果数据没有到达,它会负责进行重发
注意:会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理
为了确保可靠性,在这一层也会为所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的
网络层:
将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择
网络层的作用是在网络与网络相互连接的环境中,将数据从发送端主机发送到接收端主机
数据链路层:
负责物理层面上互连的节点之间的通信传输。将 0 、 1 序列划分为具有意义的数据帧传送给对端
物理层:
负责 0 、 1 比特流与电压的高低、光的闪灭之间的互换
通信传输实际上是通过物理的传输介质实现的。数据链路层的作用就是在这些通过传输介质互连的设备之间进行数据处理
物理层中,将数据的 0、1 转换为电压和脉冲光传输给物理的传输介质,而相互直连的设备 之间使用地址实现传输。这种地址被称为 MAC 地址,也可称为物理地址或硬件地址。采用 MAC
地址,目的是为了识别连接到同一个传输介质上的设备。因此,在这一分层中将包含 MAC 地址
信息的首部附加到从网络层转发过来的数据上,将其发送到网络
网络层与数据链路层都是基于目标地址将数据发送给接收端的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据
TCP/IP 四层模型
在 TCP/IP 模型中,我们讲将OSI 模型的应用层,表示层和会话层合并为 TCP/IP 模型的应用 层,讲数据链路层和物理层合并为 TCP/IP 模型的数据链路层,使得 TCP/IP 模型只有四层,如下图。
第一层: 数据链路层(网络接口层):
网络接口层负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层
第二层:网络层(互联网层):
互联网层使用 IP 协议,它相当于 OSI 模型中的第 3 层网络层。 IP 协议基于 IP 地址转发分包数据
TCP/IP 分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得
实现通过互联网转发分组数据包的功能
第三层:传输层:
传输层最主要的功能就是能够让应用程序之间实现通信以及以什么协议进行通信 (TCP/UDP)。计算机内部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号
第三层:应用层:
应用层有各种面向具体应用的协议,例如 Telnet 、 SSH 、 FTP 、 SMTP 、 HTTP 等。
MAC 层的传输单位是帧, IP 层的传输单位是包, TCP 层的传输单位是段, HTTP 的传输单位则是消息或报文
TCP/IP 通信模型示例
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层所必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。如上图,在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。
假定用户 A 要给用户 B 发送一封内容为早上好的邮件,首先是应用程序的处理,应用在发送邮件的那一刻建立 TCP 连接,从而利用这个 TCP 连接发送数据。它的过程首先是将应用的
数据发送给下一层的 TCP ,再做实际的转发处理。
TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。 TCP 提供将应用层发来的数据顺利发送至对端的可靠传输
为了实现 TCP 的这一功能,需要在应用层数据的前端附加一个 TCP 首部。 TCP 首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以表示该包中数据是发送端整个数据中第几字节的序列号)以及校验和(用以判断数据是否被损坏)。随后将附加了 TCP 首部的包再发送给 IP
IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。因此, IP 数据包中 IP 首部后面紧跟着 TCP 首部,然后才是应用的数据首部和数据本身。IP 首部中包含接收端 IP 地址以及发送端 IP 地址。紧随 IP 首部的还有用来判断其后面数据是 TCP 还是 UDP 的信息
IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。随后, IP 包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据
如果尚不知道接收端的 MAC 地址,可以利用 ARP 查找。只要知道了对端的 MAC 地址,就可以将 MAC 地址和 IP 地址交给以太网的驱动程序,实现数据传输
从 IP 传过来的 IP 包,对于以太网驱动来说不过就是数据,给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端 MAC 地址、发送端 MAC 地址以及标志以太网类型的以太数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的 FCS 由硬件计算,添加到包的最后。设置 FCS 的目的是为了判断数据包是否由于噪声而被破坏
主机收到以太网包之后,首先从以太网的包首部找到 MAC 地址判断是否为发送给自己的包。如果不是发给自己的包则丢弃数据,而如果是接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型是 IP包,因此再将数据传给 IP 的字程序。如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据
IP 模块收到 IP 包首部及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的 IP 地址与自己的 IP 地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是 TCP就将 IP 包首部之后的部分传给 TCP 处理;如果是 UDP 则将 IP 包首部后面的部分传给 UDP处理。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据
在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序,数据接收完毕后,接收端则会发送一个确认回执给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送,数据被完整地接收以后,会传给由端口号识别的应用程序
接收端应用程序会直接接收发送端发送的数据,解析数据进行处理
IP,ICMP, ARP 和 MAC 地址的概述
IP:
IP 是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP 协议使数据能够发送到地球的另一端,这期间它使用 IP 地址作为主机的标识,IP 还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信,虽然 IP 也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重复。因此,属于非可靠性传输协议
ICMP:
IP 数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个异常的通知。ICMP 就是为这一功能而制定的。它有时也被用来诊断网络的健康状况
ARP:
从分组数据包的 IP 地址中解析出物理地址( MAC 地址)的一种协议
MAC:
MAC 地址,直译为媒体存取控制位址,也称为局域网地址, MAC 位址,以太网地址或物理地址,它是一个用来确认网络设备位置的位址。在 OSI 模型中,第三层网络层负责 IP 地址,第二层数据链路层则负责 MAC 位址 。 MAC 地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的 MAC 地址
常见网络设备工作的层次
路由器:
选择网络数据的下一站,工作网络层上,IP 分配,能够理解 IP 地址是什么,如果收到一个数据包就会根据 IP 地址去处理数据包
集线器:
没有智力,工作在物理层,数据对于它来说仅仅是电流,当一个端口的电流到集线器的时候,只是简单的将电流转发到其他的端口。
交换机 :
稍微有点智力,工作在数据链路层,对它来说,数据仅仅是 MAC 地址的集合,它能够分辨数据包中的源 MAC 地址和目的 MAC 地址,因此交换机可以进行任意两个端口的通信。但是交换机并不懂 IP 地址是什么。
交换机内部的 CPU 会在每一个端口成功连接的时候,将 MAC 地址和端口对应,形成一张 MAC 表格
网关是什么?
网络的关口,从一个网络到另一个网络,必须经过一道“关口”, 网关实质上是一个网络通往其他网络的 IP 地址。