计算机网络中的OSI模型和TCP/IP模型

在计算机网络工程中,我们总听过有几层几层的,有的说七层,有的说五层。其实就算我们不清楚每层是什么,也应该听过有分什么应用层、物理层啊啥的。本篇就详细的讲述一下,关于计算机网络的这些所谓的层都是怎么来的,以及它们代表了什么。

 

一、关于OSI模型

1.什么是OSI模型?

OSI的英文全称是Open System Interconnection Reference Model,翻译就是开放式系统互联通信参考模型,说人话就是一个网络互联模型。是ISO(国际标准化组织)于1984年发布的一种概念模型。

我们一般直接叫OSI参考模型,注意,它只是个模型,描述了一些抽象的概念,实现方式是各大计算机厂商该去考虑的。不管是用什么方式实现的,只有大家都是按照这个模型去做的,那肯定都能相互通信。

 

2.OSI参考模型有几层?

OSI参考模型有七层,可以说是最全面的了,毕竟其他类型的模型层数都比它少。

从低到高分别是:

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

每层实现各自的功能和协议,并完成与相邻层的接口通信。

既然是层的结构,所以当然下层是上层的基础,而上层基于下层的支持提供更加高级的服务。就像一栋大楼一样,每层之间都是有着紧密联系的。

 

3.说明一下各层的作用

这里我们概括一下各层是用来干嘛的,会比其他的文章详细一丢丢,当然仍然是远远不够的。因为每层都有很丰富的内容,我在这也只是写个小总结概括一部分。

从低到高的说起

①物理层(Physical,PH)

物理层是OSI分层结构体系中最重要也是最基础的一层,是面向网络的层涉及与网络物理部分有关的协议。

物理层传递信息需要利用一些物理传输媒体,如双绞线、同轴电缆、光纤、无线信道等。物理层的任务就是为上层提供一个物理的连接,以及该物理连接表现出来的机械、电气、功能和过程特性,实现透明的比特流传输

在这一层,数据还没有组织。发送端只发送信号,接收端只检测信号,它不关心有多少位组成每个数据单元,也不关心正在传输的数据的含义,仅作为原始的比特流提交给上层(数据链路层)。最后,物理层还负责物理拓扑结构或实际的网络布局。物理层包括网络布线,集线器,中继器和NIC。

个人总结

反正物理层就是开辟通路传输数据用的,不管上层多抽象多复杂,最终都得靠它去传输数据,并且一般传输的都是二进制的信号(比特流)。我们无需在乎它是什么设备、有线的还是无线的,因为它自己也在尽可能的屏蔽物理设备和传输媒体,以免让上一层知道它的细节。这样上一层就不会受到影响,不管物理层是什么方式有线无线的传输数据,都不会影响上一层的功能和协议。

物理层就像个送快递的机器人,完全不知道自己运输的是什么东西,它可能坐车、坐飞机或坐船,反正将快递送达到对方那里就行了。而它的上一层数据链路层就像雇主,也不需要知道它是怎么送快递的,只需要知道快递到了没有。

 

②数据链路层(Data-link,D)

数据链路层是OSI中的第二层,位于物理层与网络层之间。它主要的作用是在不可靠的物理线路上实现数据的可靠传送。这一层的数据单位是数据帧Frame),它是由三部分组成的:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息(mac地址)、差错控制信息等,数据部分则包含网络层传下来的数据。

如果是用以太网进行传输,那么数据帧可以叫以太网数据帧以太帧。一个以太帧的结构,从头到尾大致如下:

  • 前同步码:用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。可以理解为正式传输帧数据前的预热
  • 帧的开始符:帧的起始符,是用于告诉接收端适配器帧信息要到了的标志。
  • 目的地址:接收端开始接受帧时会先校验地址,看看是不是发给自己的,如果不是,就直接丢弃。
  • 源地址:发送帧的网络适配器的物理地址(MAC 地址),通过这个就知道是谁发给自己的了。
  • 类型:上层协议的类型,由于上一层网络层的协议太多了,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 IP 协议。
  • 数据:也称为效载荷,表示交付给上层的数据,一个帧数据长度最小为 46 字节最大为 1500 字节。如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元MTU)。
  • 帧校验码(FCS):检测该帧是否出现差错,这个部分可以自己去了解,主要就是检测传输过程中是否发生了数据丢失或改变,如果有,就需要重传这一帧。也就是差错控制。
  • 帧间距:在帧校验码结束后,一个帧就结束了。但是在下一个帧到来前必须留出一定的间隔,需要再发送至少12个octet的空闲线路状态码。

关于数据链路层的差错控制流量控制,这里就不多说了,想深入了解的话可以自己去了解一下。差错控制主要是通过一些码判断的,如奇偶校验码、循环冗余码CRC和海明码。而流量控制则主要是控制发送方的发送速率,保证不会让接收方处理不过来就行,具体有停止-等待协议、后退N帧协议、选择重传协议等。

个人总结

虽然物理层帮助我们传输了信号,但是它怎么知道往哪里传?传的对不对?这就需要数据链路层了,它将上一层传下来的数据进行了一次封装,封装成一个叫数据帧的东西,然后才传给物理层变成比特流传过去。

其实这个数据帧就是在数据的前后加上了帧头帧尾,帧头里有一些开始符,自己的地址、目标的地址、上层协议的类型信息,通过它们我们能定位到要传输到的地方,保证数据传输到正确的位置。帧尾则是校验码用于差错控制,通过保证数据传输的正确性,有问题的数据帧需要重新传一次。

数据链路层的地址都是mac地址,即网卡地址,每个网卡都有的独一无二的地址

可以看到数据链路层同样也没有自己处理数据信息,它只是拿到了上层的数据然后包装一下而已,同时监督物理层保证数据传输的正确性。

它的工作就像快递的运送系统,负责确认好上一站和要送到的下一站(到某个中转站),快递内部(数据)是什么他们也不需要了解的太多,知道是什么类型就可以了。等到快递送到下一站的时候,还要检查快递是否正确的到达了,有没有丢件或破损。它也不用管快递员是怎么运送的,只需要控制快递能正确的送达即可。

 

③网络层(Network,N)

网络层是通信子网最高的一层,通信子网与资源子网的接口。网络层主要是为了上一层(传输层)服务,它仍然没有处理数据,只是帮助传输层进行数据的传送。它负责寻址和规划最佳的传输路径,维护路由表。确定哪一个路由线路是最快捷最合适的,以及何时使用替代路由器。它还具有一定的拥塞控制和流量控制的能力。

网络层发送的数据单位叫数据包Packet),它和前面的数据帧有点相似,同样是专属于这一层的消息容器,但是它所能容纳的数据就比数据链路层要多很多了,以IP协议IP数据包为例,它的最大长度就是64K(65535)的字节。相比数据帧就大很多了,即便是以太网传输,最大的MTU(最大传输单元)也只有1500,那么这种时候,就需要进行数据分片了,将一个数据包分成数十份,而且如果在传输过程中,碰到MTU更小的数据链路,还需要再次进行分片。

以IP数据包为例,简单看一下它的结构:

image-20210531163620141

  • 版本:标识了数据包的IP版本号。其中0100表示IP版本4,0110表示IP版本6,目前通常都是IPv4。

  • 头长:数据包头部长度,它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。

  • 服务类型:包括8个二进制位,每个位都代表了一些包配置,如重要性、延迟、流量、可靠性、成本等。

  • 包裹总长:表示整个数据包的总长度,单位是字节,这里是64K(65535字节)。

  • 重组标识:用于进行分片重组,同一个IP数据包的分片,会使用相同的标识。

  • 标志:用于分片的配置,包括3个二进制位,但有一个是保留位,所以有两项配置:是否允许分片是否是最后的一片包

  • 片偏移:用于分片的偏移量,以字节为单位,表示当前分片在原IP包中的相对位置。一般第一个分片都是0,第二个分片就需要根据前一个分片的数据长度计算偏移量了。

  • 生存时间:ping命令看到的TTL(Time To Live)就是这个,虽然看起来像是时间的概念,但实际上它是IP数据包在计算机网络中可以转发的最大跳数,每被转发一次,它的数字就会减少1,当变成0时,就会被丢弃。它的最大值是255,推荐值是64。

  • 协议代码:表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

  • 头检验和:用于检测IP数据包的头部完整性和正确性。

  • 源始地址和目的地址:就是IP地址的源地址和目标地址。

  • 可选选项:一些特殊的情况可能会使用。

  • 用户数据:包的数据信息。

 

个人总结

网络层又常常被称为IP层,因为这层有比较核心的IP协议,通过IP寻址来建立两个终端之间的连接。数据包Packet)也由于IP的关系,也有时候叫IP包。但是关于IP的协议,并没有定义在OSI中,因为OSI只负责抽象,而IP协议已经是具体的实现类了。

数据链路层主要是通过mac去联系其它端的,也就只有当两个端是相连的时候,它才能找到,一旦经过了网络,稍微复杂一点,想靠mac去找到是不可能的。这时候就需要网络了,子网、IP那些啥巴拉巴拉的,网络层就是干这个的,即便距离很远,只要中间是有路径的,它就能通过九九八十一难取到西经。

同时它也有差错控制顺序控制的功能,我们知道,在数据链路层已经有了差错控制,保证了每个数据帧能完整和正确的传输,那么在网络层的差错控制其实就只是针对数据包的头部了,它只对包头进行校验,保证数据包头没问题就OK了(当然其实也是因为在上一层传输层会再次进行一层差错控制,所以网络层也就无需对数据再费劲的控制一次了)。

顺序控制则是因为路途遥远,我们不一定每个包都是同一条路径过去的,还有中间可能会丢包重传等,这样到达的顺序就会不同。顺序控制其实只是将收到的包按顺序排列好而已,并不是强迫按顺序的接收包。网络层在这一层仍然是个打工仔,是帮上层人干活的。

网络层举例的话,就像快递的接收站一样,在收到件时,确认好寄件人和收件人,然后规划好最佳的路径,到哪个中转站中转。如果快递太大了,超出了下一层的单次配送大小,还需要先将其分成好几个包裹运送,当然在收到件时也会将其组装好再交给上一层。

 

④传输层(Transport,T)

前面的三层主要任务是数据通信,也就是传输数据的“工具人”,传输层刚好在七层的中间,也是起到承上启下的作用。提供端到端的交换数据机制,并进行差错控制和流量控制,为会话层、表示层和应用层这高三层提供可靠的传输服务。

这一层有两个重要的协议:TCP和UDP。TCP协议是面向连接的,提供可靠传输的协议,而UDP是面向无连接的,不可靠传输协议。

关于它们的区别有很多,这里简单说一点点。TCP协议我们更熟悉一些,它每次在传输数据前都要建立连接,传输结束后释放连接,还要进行差错控制、流量控制、计时器、反复确认等等,包括我们听过的三次握手四次挥手啥的,可以说它为了保证数据传输的安全和稳定可靠,做出了很多努力,自然传输的开销就需要大一点。我们常用到的应用层协议HTTP、FTP就是基于TCP的(虽然你不一定懂它们是什么协议,但是你一定听过)。

而UDP就如前面所说,是不可靠的,因为它是无连接的,所以想传数据时,也不管对方啥情况,甚至不管它存不存在,想发就发,可以说是很随心所欲了,也因为如此,它的传输效率会比TCP高很多,但是又因为如此,它的不安全性太高了,很容易丢包或出错。所以如果要使用UDP,请务必用其他手段控制和保证消息的容错率。

另外它们还有个区别,就是对数据的处理方式,UDP是面向报文的,上层应用层交给它多长的报文,它就保持原样然后加个头继续传给网络层,几乎懒得对其做任何处理,也不担心报文太大还是太小,这样的确速度很快。而TCP是面向字节流的,虽然上层和它也是一次交互一个大小不等的数据块,但是在TCP眼里,这只是一连串无结构的字节流,它会将陆续收到的字节流进行加工,选择合适的大小进行传送。

这一层的数据单位叫数据段或者报文段(Segment),先以TCP为例说明一下:

image-20210601144724152

  • 源始端口和目的端口:各两个字节,范围当然是0-65535,就是端口号嘛。

  • 数据序号:4个字节,TCP是面向字节流的,每个字节都有一个序号,这里存储的就是当前数据报的第一个字节的序号。例如当前的报文序号是301,然后携带了100个字节的数据,那么推算下一个数据报的序号就是401。

  • 确认序号:4个字节,确认序号是下一个报文的序号,也就是告诉接收者,期望它下次接收到的序号。正是由于这两个序号,才能保证TCP报文的顺序不会错乱。

  • 偏移:4位,表示TCP报文段的数据起始处距离TCP报文段的起始位置有多远,也算是报头长度的意思,因为TCP报头长度并不固定。

  • 保留字:6位,保留的位,暂时未使用,应置零。

然后就是6个位了, 这几个位大多是用在握手挥手里面的,可以自己去了解结合一下。

  • 紧急比特URG(URGent):当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

  • 确认比特ACK(ACKnowledgment):只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。相当于配置开启确认号的功能。

  • 推送比特PSH(PuSH):当一端的进程在发送报文后,需要立即就能够收到对方的响应。可以将PSH=1,这样接收方在接收到报文时,就会尽快地(即“推送”向前)交付给接收应用程序,而不再等到整个缓存都填满了后在向上交付。

  • 复位比特RST(Reset) :当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

  • 同步比特SYN(SYNchronization):同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。是TCP握手的发送的第一个数据包。

  • 终止比特FIN(FINal):用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  • 窗口字段:2个字节,窗口字段用来控制对方发送的数据量,是动态变化的。因为接收方的数据缓存空间是有限的,所以需要通过窗口号,让发送方了解到接收方目前允许发送的数据量。

  • 包校验和:2个字节,包括首部和数据这两部分的校验。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

  • 紧急指针:2个字节,紧急指针在URG=1时才有意义,指出在本报文段中的紧急数据的最后一个字节的序号。

  • 可选选项和填充位:可选选项是额外的一些配置,最长可以达到40个字节,而填充位则是用于凑数的,因为可选选项如果没凑到4个字节(32位)的整数倍,就需要填充位凑一下。

  • 用户数据:正式的数据信息。

可以看到TCP的报头也算是相当复杂了,为了建立可靠的通信信道,这也是必要的。

 

接下来是UDP,它的数据单位叫数据报Datagram),结构比TCP的要简单的多。报头只有8个字节左右,而TCP的的报头起码20个字节,这也是它传输的快的原因之一。它的报头内容如下:

  • 源端口:源端口号,16位,在需要对方回信时选用,不需要时可全用0。
  • 目的端口:目的端口号,16位,这在终点交付报文时必须要使用到。
  • 长度: 报头和数据的字节长度,16位,由于头部至少占8字节,所以最小值为8。
  • 校验和:用于校验,16位,检测UDP数据报在传输中是否有错,有错则丢弃。

UDP的是十分简单的报头,看得出来已经是尽可能短小了。

 

个人总结

高三层只负责搞数据不管传输,低三层只负责传输不管数据,而传输层在中间就是要两边都兼顾到。同时端口的概念也很重要,在网络层还只是IP到IP,在传输层才开始是端口到端口,我们平时启动程序、访问网站、设置代理,这些操作除了需要IP还需要端口,只有具体到端口,才能将数据准确的传输到这个电脑的某个进程中。

同时它又进行了最后一次的差错控制和流量控制,前面数据链路层毕竟是短线连接,只能管两个节点的传输。而传输层就是统筹全局,对整体的数据进行差错控制和流量控制。也正是因为它对全局的管控,才能被称之为可靠。传输层是数据传输的最后一道关卡,到了高一层就无需再管数据传输的事了。

TCP和UDP两大协议是传输层的核心,一个是有连接的,一个是无连接的,虽然我们乍一看觉得TCP才是永远的神,UDP问题这么多,快有什么用?但实际上UDP的快也是有意义的,例如QQ就很大一部分是基于UDP的,但是也没见它出现什么毛病不是?因为QQ基于UDP保证了数据传输的效率,但同时也用了其他手段保证了消息的准确性和容错率。还有一些直播软件、在线语音之类的,这种你总不能每说一个字都要收发信号响应吧?所以UDP也是有它的作用的。

那么这样我们就清晰了一些,在传输层收到数据后,先根据上层协议类型选择有连接还是无连接的协议(TCP/UDP),然后将其封装成数据段数据报,加上特有的报头。再然后就是是否要建立连接了,如果是无连接,直接丢给网络层传就完事了,不用考虑那么多。如果是有连接的,就要有来有回的打几个太极,直到确认了通信线路和两端的收发数据功能没有问题,才能正式确立连接,然后还需要校验每个报文是否准确的传输了。这就是传输层干的事,有连接的比无连接的要费劲许多,毕竟要达到可靠嘛。

 

⑤会话层(Session,S)

终于到了高层了,但是实际上可说的却没有前面那么多。

会话层建立在传输层之上,负责建立、管理、终止两个实体之间的会话,包括身份验证权限鉴定等环节。当然它并不会亲自去建立连接,而是交给传输层去做,而且这个会话和传输层的连接是不同的,虽然也是基于它,但是相比要更抽象、虚拟一点。它还负责寻址,找到目标的位置,例如通过域名找到IP和端口。这一层同样也有错误检查,但是已经不会再管数据传输过程中的错误了,而是磁盘空间、打印机缺纸等类型的高级错误。

以SMB协议为例,它是Windows系统在局域网进行共享文件时的一个协议,虽然百度百科中,它应该是一个会话层表示层以及小部分应用层的协议,但是并不妨碍我们用它说明会话层的一些作用。

当主机A在向主机B共享了一个文件夹时,主机B需要通过访问【\(主机A的IP)】这样访问到A的共享文件夹,这就是一个会话请求。但是首次访问时,都会提示输入主机A的账号密码,不然是不能访问的。又或者主机C在没有得到授权的情况下访问,这都是会被拒绝的,这就是会话层的身份验证、鉴权环节

当会话建立成功,B就可以将A的文件复制到本机上了,但是当B复制完毕后,关掉了共享窗口后,按理说这次传输肯定是已经结束了,传输层也不太可能继续开在那浪费时间了。但是当我们再次访问那个共享地址时,发现却不需要输入密码了,还是能够访问到。这就是会话层在保持会话,由于保持的是会话,而非一次传输层连接,所以本次会话实际上还没有结束。

只有进行了配置,例如关掉窗口就关闭会话,或一小时后自动超时关闭会话,这个会话才会被关闭。那时就和一开始一样,需要输入一遍账户密码,因为会话已经关闭了,需要重新建立。

另外,在会话层包括它以上的层中,数据都是统称为报文了,也没有特别的称呼了,因为它们已经不用管传输的事了。

个人总结

会话层又是为表示层提供的服务,它只负责发起和管理会话,实际上真正的脏累活都是传输层做的,这就是资本家了属于是。另外不要将它和我们web开发时的session相提并论,虽然听起来很像,但实际上不能说是一类东西。

而且说实话会话层、表示层可说的实在太少了,因为它们几乎没有成功的单独实现过,都是和应用层这高三层一起实现的。在TCP/IP模型中,直接就给这高三层合并为一个应用层了。OSI提出的终究是抽象模型,在目前的具体使用中,却还没有会话层和表示层的一席之地(都被并到应用层了)。

 

⑥表示层(Presentation,P)

第六层表示层主要掌管数据,它的功能主要是对数据进行处理。控制数据的语法和格式,对数据进行编码与转换,压缩和解压缩,还可以对数据进行加密解密操作。通过这一层对数据进行合适的处理,才能保证兼容性,即便是不同的操作系统,也能够进行交互。

个人总结

到了表示层,就和数据的传输和连接完全没关系了,它只管处理数据,或者说是负责表示数据。例如两台编码格式不一样的机器,同样一句话,如果采用不同的编码解析肯定意义也是完全不同的。又或者是图片、音频、视频类型的数据,也需要将其转换处理,才能进行传输或交回给应用层。而这些都是表示层干的事,这一层可以说是专门只针对数据进行处理的一层。当然实际应用中也还是少有能将其独立出来的,在TCP/IP模型中,它也一样是并在应用层中。

 

⑦应用层(Application,A)

最后一层是应用层,这一层的协议也是最多的。应用层协议定义的是针对特定应用的,其进程间的通信和交互的规则,对于不同的应用也需要不同的应用层协议,所以协议的数量才那么多。

常见的协议如文件传输服务(FTP)、域名系统(DNS)、超文本传输协议( HTTP)、支持电子邮件的 SMTP协议等等。

个人总结

它是最后的一层,到这层已经和底层没什么关系了,已经算是直面用户的一层了。在TCP/IP模型中,它甚至直接把表示层和会话层吞并了,所以可想而知它的协议数量是很多很杂的。

但是,应用层终究是个,而非具体的应用,它是OSI中的抽象,也是TCP/IP模型中的模型,都是和具体的应用是无关的。虽然我们几乎是已经接触上它了,但是中间终究是有一层隔膜的。例如我们打开某个网页,直接和我们接触的是浏览器(谷歌或IE),而浏览器才是基于应用层协议HTTP的。我们用FTP下载文件,可能是利用安装的某个FTP客户端的软件,但是这个软件肯定是基于FTP协议开发的。又或者我们发邮件时,可能是outlook、也可能是网页在线打开,但是它们的内部肯定是基于SMTP和POP3协议的。

应用层就是如此,它不是具体的应用,但是它是为应用程序服务的。

 

⑧总结层

这层是我加的,当然实际上OSI就7层而已。以前在学网络工程时,听过无数遍这个OSI七层协议,但是始终都没能完整的记住它,而当现在我们懂了每层的意义,和它们的功能后,其实发现记下来也不是什么难事了。

从最底层的物理层开始,它就像个兢兢业业的搬运工人,只负责搬运就好了,也不管搬的是啥。

然后数据链路层主要负责管控物理层,因为物理层只管传输,是不可靠的,而数据链路层就是通过逻辑的手段(差错控制、流量控制),让不可靠的线路变的可靠。

网络层则站在更高的角度管理数据传输,同时这也是通信子网的最高一层,目前主要是通过IP进行定位的,途中可能会经过很多的节点,通过很多次数据链路层的传输。

再上一层是传输层,它虽然没有亲自参与任何传输过程,但是它却是掌管数据传输的,提供了一个端到端的数据交换机制。另外还分有连接和无连接两种模式,如果是有连接的TCP,这一层的存在就十分重要了,完全靠它才能建立起可靠的连接,如果是UDP,它的作用相对会小一些,相当于只是做了一层数据封装和简单处理就交给网络层了。

然后是高层会话层,它控制两个实体间的会话,也会进行身份校验和鉴权,这里它已经不参与任何具体的数据传输了,只是通过控制会话,进行一种虚拟的持续的连接。

再然后是表示层,它专精于数据处理,格式转换、加解密、压缩解压缩,它将各种数据处理好后才会交给下一层。

最后是最高层应用层,其实会话层和表示层都可以说是它的马仔,虽然OSI的理想是好的,分的很具体,但是实际使用中,这三层都都被合并成了一个应用层,因为它们实在是太密不可分了,不同的应用层所需的表示层和会话层差异太大了,难以单独抽出来作为一层,所以上面两层稍微了解一下就好。应用层主要是为应用程序服务的,它有很多典型的协议,如http、ftp、dns等,是协议种类最多的一层。

 

 

二、TCP/IP体系结构

OSI学过了,现在我们则是要学习TCP/IP的体系结构,这就需要说明一下,它们两个模型之间相爱相杀的故事了,不过我们还是要先简单了解一下,什么是TCP/IP。

1.什么是TCP/IP协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

以上来自百度百科,所以明白了吗,TCP/IP协议通常并不只是说TCP协议和IP协议,而是它们整个协议簇,指的是一堆协议。而这一堆协议,自然也是有层次之分的,TCP/IP的层次结构共有四层:应用层、传输层、网络层和网络接口层

其实这四层我们大概也能知道意思,因为它也可以说是参考了OSI进行的分层,前面我们也以它为例说明了很多。

2.OSI与TCP/IP的区别

前面我们知道了,OSI是开放式系统互联模型,大白话说也就是为了让不同的电脑之间能通信,而制定的一种模型规则。只要按照它的模型去实现,就能实现不同系统之间的通信了(在网络上互联)。这个模型十分的详细周到,共有七层,每层都有不同的一堆协议。而且OSI是ISO组织推出的,要知道ISO就是权威,它制定的东西,都是世界级标准,按它说的做准没错。

按理说接下来就是等各大软件/硬件厂商去实现它就好了,但是实际上它并没有流行起来,因为它制定的标准实在是太复杂了,它太“完美”了,导致实现起来并不容易。刚好当时又有一套TCP/IP的通信协议,它基本上已经实现了网络通信,而且比OSI简单很多,那为啥不用现成的呢?

所以也可以理解为OSI败给了TCP/IP,输在了实用性上,当然OSI也并不完全被淘汰了,因为它的分层理论和思想什么的还是很值得参考的(可能就是因为只能用作参考,所以现在就叫参考模型了)。

TCP/IP的四层模型也可以看出来是参考了OSI的,如图:

image-20210609175448969

高三层的应用层、表示层、会话层被合并为应用层,减少了不必要的分层,而最下面则是把物理层和数据链路层合并为网络接口层

这里我们就不再每层都讲解一遍了,因为前面已经说明了挺多的,只要知道它的每层的作用就可以了。

 

3.哪来的五层架构?

现在我们知道了OSI有七层,而TCP/IP模型有四层,但是网络上我们常常看到的是五层的架构,这又是哪里的架构?

实际上只是将两种模型结合了一下而已,因为这样才能既不会很复杂,也能比较全面的讲解清楚,具体层次是:

 物理层、数据链路层、网络层、传输层、应用层

其实也就是把那高三层合起来了。

 

 

三、总结

本篇我们重点学习了OSI参考模型,并结合TCP/IP模型进行了说明,虽然对细节可能还不甚了解,但是至少我们可以说出来这七层大概都是干嘛的了(面试问的时候能BB几句了)。

其中TCP、UDP、IP这些协议其实是需要重点研究的区域,只是鉴于篇幅,我们留到下次再单独说明吧。。

 

 

 

OSI模型——百度百科

https://baike.baidu.com/item/OSI%E6%A8%A1%E5%9E%8B/10119902?fr=aladdin

以太网数据帧格式(结构)图解

http://c.biancheng.net/view/6391.html

TCP/IP数据包结构详解

https://blog.csdn.net/prsniper/article/details/6762145

TCP,UDP的报头详解

https://blog.csdn.net/weixin_42736024/article/details/84637154

OSI七层模型与TCP/IP五层模型

https://www.cnblogs.com/qishui/p/5428938.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值