当前位置: 首页 > news >正文

网络之再谈体系结构

大家都知道的是网络的体系结构,现代软件常用的体系结构无非是TCP/IP协议栈,OSI因为实现复杂并且效率没有TCP/IP协议栈好,所以不用OSI,但是,最近在复习网络知识的时候,发现了一些奇怪的地方,那就是OSI与TCP/IP协议栈的运输层以及ARP协议,有些争执。先看看两个体系的结构吧!如下:

不知道有没有人注意过,那就是在OSI与TCP/IP协议栈中,他们的区别有一个是OSI的传输层是面向接连的,没有无连接,但是TCP/IP协议栈的传输层是面向连接加无连接的,不知道大家注意到这一点没有。刚开始学习网络的时候,可能也没有往深处想,那天复习的时候,突然看见,就有点疑惑了。一直在想为什么呢?

刚开始我想到的是难道OSI没有UDP协议吗?错,后来才发现我错的离谱,因为没有想到一点,那就是他们建立模型的时候,是不同的,OSI是现有划分完层,再根据每层划分的功能,把协议分进去,而TCP/IP是先有了协议,根据协议划分的层,这使我顿时拨云见日。他们的先后顺序不同,且TCP/IP网络层中支持的是IP协议,而OSI网络层支持所有的网络协议。

其次,再看看下面的图:

看看其中网络层的ARP协议,有些朋友看到这里应该是疑惑了,不对,ARP不是是数据链路层的协议吗?怎么上网络层了,其实我刚开始注意的时候也很疑惑,这是为什么呢?后来查看了很多的资料,看了TCP/IP图解,各有各的说法,且都是对的。有人说他应该在网络层,应为他是服务于网络层的,这怎么说呢?其实是也很好理解,因为网络体系中,每一层几乎都是透明的,就是你传下来或者传上去的报文中,数据部分对于我这一层来说是不知道是什么,所以我根本就不知道你的内容,我只把自己这一层的功能做好就行了(这里忽略NAT与NAPT),所以很多人感觉既然他要知道IP地址,那么他如果是属于数据链路层的话,那么就不可能拿到IP地址,所以属于网络层。但是很多又说他是链路层的协议,所以这就产生了争议,但是其实都是对的,因为其实他是属于网络层之下,数据链路层之上的一个协议,从我们所学的五层模型来说的话,自下往上,我个人认为是它属于2.5层的协议,但是如果硬要说的话我会把它归纳到数据链路层。

其实原因是我自己认为的,不知道对不对,若是有大佬知道希望说一下。很简单,最直接的一个列子就是NAT技术,他是工作在网络层的,但是如果这样的话,他结合NAPT技术转换的时候,把我们的上层也就是传输层的端口号给改了,这说明什么,这说明下层我是知道你上一层的内容的(这里只是特殊处理,所以使得下层知道了上层的内容),如若不然,他是改不了我们传输层的端口号的,如若不用这用这个技术,那么好,你怎么用公网的资源,怎么访问公网服务器?公网服务器怎么给你所在的局域网返回请求呢?所以,个人认为这里的ARP协议与这里有点像,如果我有了网络中的唯一标识主机的地址,但是,跨网怎么办?跨越不同局域网需要路由器中路由算法,但是我怎么到路由器上,肯定是需要再局域网内传输的啊,那怎么到路由器上,这就需要mac地址了,所以此时就需要arp上场了,那么arp是属于数据链路层的,如果这样的话,他怎么知道这个IP地址呢?我个人认为它这里肯定是做了类似于NAT技术的那种处理,获取了上一层数据的报文内容。所以画图的时候我们都是这样画(五层模型):

这个是个人理解,若是有大佬知道,希望可以说一下。

http://www.lryc.cn/news/357110.html

相关文章:

  • 在flutter initState 方法,触发 setState导致循环执行
  • JavaScript字符串方法
  • YD/T 2698-2014 《电信网和互联网安全防护基线配置要求及检测要求 网络设备》标准介绍
  • QCC30XX如何查找本地地址码
  • 基于 DCT 的图像滤波
  • spdlog日志库源码:自定义异常类spdlog_ex
  • 3.每日LeetCode-数组类,爬楼梯(Go,Java,Python)
  • 单节点11.2.0.3参数文件恢复到RAC11.2.0.4启动失败
  • Windows电脑高颜值桌面便利贴,便签怎么设置
  • 代码随想录35期Day54-Java
  • Ubuntu使用sudo命令
  • 三方语言中调用, Go Energy GUI编译的dll动态链接库CEF
  • Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)
  • Java+Swing+Mysql实现飞机订票系统
  • 2024 rk
  • Java实现多张图片合并保存到pdf中
  • 揭秘智慧校园:可视化技术引领教育新篇章
  • 基础9 探索图形化编程的奥秘:从物联网到工业自动化
  • RPC-----RCF
  • StarRocks中,这些配置项是表属性的一部分
  • Activity->Activity生命周期
  • 乐鑫ESP串口驱动安装,安装cp210x驱动
  • Django缓存
  • Python 元组
  • JAVA面试题大全(十八)
  • 如何利用Firebase Hosting来托管网站
  • 揭秘“循环消费”模式:消费即收益,购物新体验
  • 图片怎样在线改像素大小?电脑快速修改图片大小的方法
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 【C++】list的使用方法和模拟实现