OSI网络模型 是指:开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由ISO(国际标准化组织)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。
ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论,最终提出了作为通信协议设计指标的OSI参考模型。这一模型将通信协议中必要的功能分成了7层。通过这些分层,使得那些比较复杂的网络协议更加简单化。在这一模型中,每个分层都接收由它下一层所提供的特定服务
为了更好的理解,我们主要讲解五层协议:
从上往下分别是:
1.应用层
2.传输层
3.网络层
4.数据链路层
5.物理层
从下往上更容易理解,所以先从物理层开始:
电脑要联网,当然要把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。
这就叫做"物理层",它就是把电脑连接起来的物理手段
物理层中,将数据的0、1转换为电压和脉冲光传输给物理的传输介质
物理层主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
假设两台主机A和B,A和B已经有了连接的介质,现在A给B传输数据,这些数据其实就是一堆的0和1,B主机收到这一堆0和1 要怎么解析呢?多少个电信号算一组?每个信号位有何意义?到底是按8位还是按16位解析?如何解析就是数据链路层干的事情
早期的时候,每家公司都有自己的电信号分组方式。
逐渐地,一种叫做 "以太网"(Ethernet)的协议,占据了主导地位。
以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
head包含:(固定18个字节)
Data:就是数据包的具体内容,最短为46字节,最长为1500字节
因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
2.1 MAC地址
以太网(Ethernet)协议规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址,MAC地址也称物理地址。
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。
前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
PS:MAC地址一共有FFFFFF FFFFFF=2^48次方=281474976710655 多种可能,也就是有281万亿个MAC地址可以被使用,以目前的情况,根本不必担心会用完
2.2 广播
每块网卡都有了自己的MAC地址,那么发送端A网卡怎么知道另一块网卡的MAC地址?
答案是 以太网(Ethernet)协议 采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。
上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。
有了数据包的定义、网卡的MAC地址、广播的发送方式,"数据链接层"就可以在多台计算机之间传送数据了。
总结:
数据链路层 规定了互连设备之间解析数据帧。
数据链路层使用最频繁的协议就是以太网(Ethernet)协议,而以太网协议主要就是在标头中加入MAC物理地址
以太网协议,依靠MAC地址发送数据,但是这仅局限于局域网,也就是一个小的网络段,这样才能通过广播的方式来通信。但是如果我想访问欧洲的主机,我们和欧洲肯定不在一个局域网里,我们的互联网是由无数个子网络组成的
就算我们和欧洲在同一个局域网内,通过广播的方式也是不切实际的,你每天会收到全世界各地的无数的请求包
因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由" 就是指如何向不同的子网络分发数据包)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。
这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"或者IP地址。
判断是否是一个网络要用到子网掩码(subnet mask),一般为255.255.255.0
判断的方法是将子网掩码分别和不同的IP地址做AND运算,若结果相同,则在一个子网络内,若不同则代表不是一个网络,那么久采用路由的方式,发送给网关,让网关来处理。网关就是相当于子网络与外界通信的一个IP地址
IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络,使用子网掩码。
所以网络层主要就是IP地址管理和路由选择,以IP协议为主,在标头添加Ip地址
传输层就是规定了应用程序之间的通信,一台主机上运行着多个应用程序(如邮件,浏览器,QQ), 收到包了,怎么判断是要给哪一个应用程序用的,这时候就要用端口来区分了,每个应用程序都会有一个端口。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。应用程序会随机选用一个端口,然后与服务器的相应端口联系。
传输层就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了
传输层的协议主要有UDP和TCP。TCP就是比较可靠的UDP,因此远比UDP复杂
可以简单理解成TCP和UDP也是分为"标头"和"数据" , 标头就是端口,数据就是具体的内容
应用层很好理解,就是使用不同的协议,如HTTP,FTP等,这些协议规定了具体的数据解析方式。
比如HTTP协议,就会把HTTP包完整的放进TCP的Data部分,就是说HTTP是依赖传输层的协议(TCP或者UDP协议) 进行发送的
一个正常的以太网协议包,大概是下面这样的,一层套一层
以太网协议(数据链路层) 的标头存放mac地址,IP协议(网络层)的标头存放IP地址,TCP|UDP协议(传输层)的标头存放端口信息,而应用层就是具体的协议的完整数据包了。
七层网络模型和五层网络模型对于的各类协议,如下图:
七层网络模型的具体分工:
参考链接:
https://blog.csdn.net/taotongning/article/details/81352985
http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
https://baijiahao.baidu.com/s?id=1606474671793061553&wfr=spider&for=pc