【Linux】计算机网络的背景和协议分层

文章目录

  • 网络发展
  • 协议
    • 何为协议
    • 网络协议
    • 协议分层
    • OSI七层模型
    • TCP/IP五层模型(四层)
  • 基本通信流程
  • mac地址和ip地址
  • 网络通信本质

网络发展

从一开始计算机作为一台台单机使用,到现在网络飞速发展,从局域网Lan建立起局域网,到广域网Wan将远隔千里的电脑联系在一起,网络极大的促进了社会的发展和人类之间的交流,自从同一台主机进程间相互通信开始,网络的出现就是必然的。

协议

何为协议

何为协议,顾名思义,协议是双方都要遵守的 “约定” ,而在计算机的世界里,数据都是光电信号,用01表示强弱,要想传递好各种各样的信息,就要约定好对应的格式

举个简单的例子,在现代社会我们使用纸币交易,而在古代我们使用银子交易,这些交易方式其实就是“协议”

网络协议

为什么要有网络协议?
1、计算机硬件设备很多,都是由不同的厂商生产
2、计算机操作系统也很多。

为了让这么多厂商生产出来这么多产品能够相互的流畅的通信,自然就需要一套标准让大家都要遵守,在这种要求下,网络协议就自然诞生咯

协议分层

协议为什么要分层?我们先来看一下网络传输带来的问题:

1、首先,网络传输是长距离传输,容易出现数据异常的问题,比如丢失。
2、其次,网络中主机数量非常庞大,如何定位一台主机。
3、然后,如何进行数据转发、路径选择
4、最后,选择好路径,又要如何在硬件上传输

为什么会带来这么多问题? 很简单,数据传输的距离变长了而已。
这些问题是有上下关系的,比如定位问题解决后,如何数据转发路径选择?选择好路径又如何在硬件上传输?

基于这样的特点,网络被设计为高内聚、低耦合的 层状结构 ,这样每一层都只关注自己同层的功能,使用下一层的接口,任何一层出现问题,都不会直接影响另外一层。

高内聚:把相关的问题放在一起,设计出解决方案
低耦合:按照不同的功能,设计不同的模块

OSI七层模型

在这样的要求下,第一个网络标准协议模型就制定出来了,该模型非常完善的制定了网络中的各个层的功能,在真正设计的时候,由于有些层与应用高度相关,因此我们重点来学习另一个模型

在这里插入图片描述

在这里插入图片描述

TCP/IP五层模型(四层)

TCP/IP是一组协议的代名词,他们共同组成了TCP/IP协议族

  • 1、物理层 :负责光电信号的传递方式 物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器工作在物理层
  • 2、数据链路层:负责设备之间的数据帧的传送和识别。冲突检测(自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机工作在数据链路层.
  • 3、网络层:负责地址管理和路由选择。在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器工作在网路层.
  • 4、传输层:负责两台主机间的数据传输。
  • 5、应用层:负责应用程序间的数据传输。比如Http协议、SMTP(电子邮件传输)、FTP(文本传输协议)、Telnet(网络远程访问协议)

同层协议都要有两个功能:
1、报头要和有效载荷分离
2、报头必须支持将有效载荷交付给上层哪个具体协议(TCP?UDP?)

封装:报头+有效载荷 —>发送给下一层
分用:将二者分开,并将有效载荷交予上一层
在这里插入图片描述

基本通信流程

根据冯诺依曼体系结构,操作系统是计算机软件和硬件的管理者,要使用网卡这个硬件设备,就需要使用操作系统提供的接口,这也就注定了网络一定会贯穿操作系统,而传输层和网络层正是被设计进了操作系统里,操作系统可以有很多种,但是网络只能有一种。

如果不那么做,有人使用ip,有人不用,会直接无法通信。

跨网段的传输基本流程如图,中间要经过一个或多个路由器,路由器一定是级联至少两个子网的,路由器工作在IP层,而正是通过这样的方式,IP层屏蔽了底层子网之间的差异,可以说,IP是整个网络世界的基石!这样印证了那句话:在计算机设计哲学里,任何一个问题都可以在之间添加一层软件层。

在这里插入图片描述

mac地址和ip地址

在网络传输里通常会有两个地址,即mac地址和ip地址,通俗点来讲,目的ip地址就是最终目标,而目的mac地址决定下一站去哪里。即目的ip是不变的,而目的mac地址是一直在变化的。

需要注意的是,mac地址是全球唯一的,每一台网络设备都要有自己唯一的mac地址!而ip地址则是一台主机在公网内的唯一标识。

网络通信本质

理解本质之前,我们先要想一个问题:网络通信是两个主机在通信吗?

对,也不对,网络通信不单单是两台主机在通信,在主机接收到对方的数据后,要向上交付,交给对应的进程来处理,而网络通信的本质就是进程间通信。

暴漏自己的进程pid是不理智的,因此使用端口号来代替pid,一个进程可以绑定多个端口号,但一个端口号不可以被多个进程绑定!

我们把这种通过[源ip,源端口 + 目的ip,目的端口]的通信方式称为socket通信,即套接字通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/63220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git bash 安装sdkadmin

1.下载相关安装包,复制到git 安装目录 D:\software\Git\mingw64\bin 2. 运行 curl -s "https://get.sdkman.io" | bash

Service not registered 异常导致手机重启分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Service not registered 异常导致手机重启二、Service not registered 解决方案 一、Service not registered 异常导致手机重启 1.重启 的部分Log如…

某大型医院门户网站性能分析案例

故障现象 门户网站近期出现少量的访问体验慢现象,主要是由于服务器响应时间慢。出现慢页面的页面簇为:http://www.xxx.ac.cn/。 分析过程 下面将分析异常原因:页面的URL信息?页面慢的原因? 性能问题分析,定位到慢访…

不可错过的家装服务预约小程序商城开发指南

在当今社会,家装行业发展迅速,越来越多的人开始寻求专业的家装预约和咨询服务。对于不懂技术的新手来说,创建一个自己的家装预约咨询平台可能听起来很困难,但实际上通过一些第三方制作平台和工具,这个过程可以变得简单…

ES6 数组的用法

1. forEach() 用来循环遍历的 for 数组名.forEach(function (item,index,arr) {})item:数组每一项 , index : 数组索引 , arr:原数组作用: 用来遍历数组 let arr [1, 2, 3, 4]; console.log(arr); let arr1 arr.forEach((item, index, arr) > {console.log(item, index…

客服型电话呼叫中心系统,助力企业提升客户服务质量

客服型电话呼叫中心系统是企业客户服务的重要工具之一,它通过电话和网络等方式,为客户提供快速、便捷、高效的服务。客服型电话呼叫中心系统具备自动接听来电、自动路由、管理知识库、录音和监控、生成报表分析等多种功能,有利于企业提高客户…

【前端 | CSS布局】 网格布局(grid)

概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。 上图这样的布局&am…

VS+QT+VTK treeView树型结构模型加载隐藏实例

程序示例精选 VSQTVTK treeView树型结构模型加载隐藏实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTVTK treeView树型结构模型加载隐藏实例>>编写代码&#xff0c;代码…

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付&#xff0c;后端返回一串form表单&#xff0c;前端如何拿到支付串并且调用支付 1.调取接口拿到…

内容动态展示抽屉组件

知识点 mousemove与mouseenter的区别在于mousemove会触发事件冒泡&#xff0c;mouseenter不会&#xff0c;mouseleave同理。 mousemove会触发事件冒泡&#xff0c;因此鼠标在范围区域内移动时会一直触发。 mouseenter只触发一次&#xff0c;鼠标移入后触发&#xff0c;鼠标移…

Linux知识点 -- 进程间通信(二)

Linux知识点 – 进程间通信&#xff08;二&#xff09; 文章目录 Linux知识点 -- 进程间通信&#xff08;二&#xff09;一、System V共享内存1.原理2.申请共享内存3.System V共享内存的使用4.为共享内存添加访问控制 二、信号量&#xff08;概念理解&#xff09;1.概念2.信号量…

JVM 调优

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM调优是一项重要的任务&#xff0c;可以提高Java应用程序的性能和稳定性。掌握JVM调优需要深入了解JVM的工作原理、参数和配置选项&#xff0c;以及历史JVM参数的调整和优…

K8S系列文章 之 容器网络基础 Docker0

什么是Docker0 使用ip addr命令看一下网卡&#xff1a; rootKitDevVps:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host…

数据结构之栈和队列---c++

栈和队列的简单介绍 栈 栈是一个“先进后出”结构 队列 入队演示 队列是一种“先进先出”的结构 出队演示 接下来我们开始本次的内容 栈实现队列 分析 1.我们可以老老实实的写一个栈然后将所有的接口函数实现出来&#xff0c;最后再进行实现队列&#xff0c;但是显然…

集中/本地转发、AC、AP

1.ADSL ADSL MODEM&#xff08;ADSL 强制解调器&#xff09;俗称ADSL猫 ADSL是一种异步传输模式&#xff08;ATM)。ADSL是指使用电话线上网&#xff0c;需要专用的猫&#xff08;Modem)&#xff0c;在上网的时候高频和低频分离&#xff0c;所以上网电话两不耽误&#xff0c;速…

合并果子C++详解

题目描述 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;…

【MCU学习】GD32F427VG开发

&#xff08;一&#xff09;学习文档和例程 兆易创新GD32 MCU参考资料下载 1.GD232F4xx的Keil芯片支持包 2.标准固件库和示例程序 3.GD32F4xx_固件库使用指南_Rev1.2 4.用户手册&#xff1a;GD32F4xx_User_Manual_Rev2.8_CN 5.数据手册&#xff1a;GD32F427xx_Datasheet_Rev…

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具&#xff0c;基于Python写的&#xff0c;原理什么的就不过多再说了&#xff0c;详情参考&#xff1a;https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…

为react项目添加开发/提交规范(前端工程化、eslint、prettier、husky、commitlint、stylelint)

因历史遗留原因&#xff0c;接手的项目没有代码提醒/格式化&#xff0c;包括 eslint、pretttier&#xff0c;也没有 commit 提交校验&#xff0c;如 husky、commitlint、stylelint&#xff0c;与其期待自己或者同事的代码写得完美无缺&#xff0c;不如通过一些工具来进行规范和…

22.Netty源码之解码器

highlight: arduino-light 抽象解码类 https://mp.weixin.qq.com/s/526p5f9fgtZu7yYq5j7LiQ 解码器 Netty 常用解码器类型&#xff1a; ByteToMessageDecoder/ReplayingDecoder 将字节流解码为消息对象&#xff1b;MessageToMessageDecoder 将一种消息类型解码为另外一种消息类…