网络——入门基础

目录

协议    

网络协议

OSI七层模型

网络传输基本流程

网络传输流程图

局域网通信

数据包的封装和解包

广域网通信

网络地址管理

IP地址

MAC地址


协议

        关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么是协议。

        “协议”其实就是一种约定,双方想要通信就需要做某种约定,通过这种约定来完成某种特定事情。比如小时候和同学做的约定,敲一下门要做什么,敲两下要做什么。

        网络协议就是通信计算机双方必须共同遵守的约定,所以用计算机语言将这种约定表达出来,双方计算机才能识别约定的相关内容。但是计算机之间的传输媒介是光信号和电信号,可能有的通过频率或者强弱来表示0或1这样的信息,有的可能通过不同的策略,因为计算机只认识0和1,所以各个做硬件的厂商也要共同遵守某种约定,让不同的计算机识别的信息是一样的。

        那么操作系统要不要进行协议管理呢,那就又是先描述再组织。协议本质上就是一个软件,那么软件是可以“分层”的,什么是分层呢?曾经我们写过的各种类,在类外中我们叫做使用这个类中的方法,在类中就是方法的实现,使用和实现就是两层;面向对象的多态,实现多态就要有继承体系,每个继承体系就可以叫做一层软件层。


网络协议

        所以协议在设计的时候也是要分层的。

        两个人在打电话的时候,你并没有直接跟对面的人说话,而是把你的声音交给了手机,你的手机把声音交给了对方的手机,对方才能在手机中听到你的声音。

        为什么要分层呢?原因就是以后的通信场景变得很复杂了,我们将功能解耦,更便于维护,某一层出了问题只需要解决某一层,其他层不会受到影响。

        这些都是分层的好处,为了让网络通信也变的更好,也对网路协议进行了分层。


OSI七层模型

        我们通信的复杂程度主要和通信的距离是正相关的,从通信的方面来说:

  • 如果两个人的通信距离过远,会有没收到的情况,这就叫做丢包
  • 在发送的时候,如何找到对方主机的位置,这就是定位问题
  • 通信距离远的时候,我们的信息不可能直接发给对方,需要通过多个路由器帮我们跳转,那怎么保证下一个路由器是正确的
  • 不管是发送还是接收信息,都是通过信号的频率或强弱来识别的,也要有硬件的支持

        再从我们应用的方面来说:

  • 为了实现通信,我的数据一定是经过一些处理才发给对方的,对方收到了也是要经过处理才能看得懂,那如何处理数据也是一个问题。

        为了解决上面的这些问题,就有了网络协议的层状结构,这些问题对应的层分别是:传输层、网络层、数据链路层、物理层、应用层。

        我们也把左边的网络协议层也叫做TCP/IP协议。

        未来我们也是使用传输层提供的系统调用接口进行网络编程。

物理层:
        负责光电信号的传递,他决定了最大传输速率、传输距离等。

数据链路层:

        负责设备之间的数据帧的传送和识别,例如网卡驱动,交换机就工作在数据链路层。数据链路层和物理层就负责数据的发送过程。

网络层:
        负责地址的管理和路由的选择,路由器工作在网络层。

传输层:
        负责两台主机的数据传输,确保数据的可靠发送。比如传输过程中可能会出现丢包问题。

应用层:
        负责应用程序之间的沟通,应用层需要根据通信的目的,对数据进行分析与处理,达到某种业务性的目的。

        这一层一层的结构也叫做网络协议栈,网络协议栈的下三层主要的完成就是信息传输,而应用层完成的就是数据分析和业务处理。

        但其实最开始提出的协议层并不是TCP/IP协议,而是OSI七层模型。

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
  • 把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器工作在网络层,交换机工作在数据链路层。
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
  • 但是, 它既复杂又不实用,所以我们都是使用TCP/IP四层或五层模型,物理层也不会考虑太多。


网络传输基本流程

网络传输流程图

局域网通信

同一个局域网下的两台主机的通信流程就是这样的:

        这幅图举个例子就很好理解了,你住在一栋楼的10楼,你现在要给另一栋也住在10楼的小伙伴送个东西,那你一定要一层一层的下楼,然后跑到他的楼下,再一层一层的上楼,这样你才能把东西送给他,他也不会管你是怎么来的。

        所以局域网中的两台主机是可以直接通信的。那我们接下来就要再说一下网络的概念:

  • 每层都有自己的协议定制方案。
  • 每层协议都要有自己的协议报头
  • 从上到下交付数据的时候要添加报头
  • 从下到上拿到数据的时候要去掉报头

        再来举个例子说一下什么是报头,我们买东西的时候一定是在网上给卖家说我要买这个,经过一系列的操作,卖家要被快递交给物流,物流拿到东西之后一定要给这个快递贴上快递的信息,再经过一系列操作到了楼下的快递站,我们从快递站拿到这个快递,拆开就能用了。这个快递中的物品就好比是数据,这个快递信息就好比是协议报头,通过这个报头就可以送到我楼下的快递站,我拿到了快递再拆开去掉协议报头就拿到了里面的数据。

数据包的封装和解包

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在数据链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(报头),称为封装
  • 首部信息中包含了一些类似于首部有多长,有效载荷有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再将报头和有效载荷分离,根据首部中的 "上层协议 字段" 将数据交给对应的上层协议处理,这叫做解包

        这次就不是快递了,比如我们给同学发微信:

        通过对数据一层一层的封装,送到另一台主机后再一层一层的解包,所以两台主机在每一层都以为自己在和另一台主机的相同层在逻辑上直接通信,所以不可能把以太网帧直接发给网络层或者其它层。

        在同一个局域网中。除了当前正在通信的主机A和主机F还有其他主机,那怎么只有主机F收到了呢?

        实际主机A发数据给主机F的时候,其他主机也都收到了该数据,只不过除了主机F以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了

        如果主机A不仅在和主机F通信,还和别的主机也在通信,但是同一个局域网中使用的都是同一个通信信道,每个主机发出的数据就可能会相互干扰

        每个局域网也可以看做一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,这两台主机在该碰撞域中就发生了碰撞

        那么如何判断发生了碰撞呢?当一个主机将数据发送到局域网,它自己也可以收到这个数据,收到后与之前发送的数据进行比较,如果不同就说明发生了碰撞。

        想要处理碰撞其实很简单,当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。但是计算机处理的速度很快,所以发生的概率不是很大。

广域网通信

        上面说了局域网通信,那我们再来说一下广域网通信,前面我们提到过,我要给很远的一台主机发送信息,要先遵守应用层的协议,通过传输层稳定的把数据发送过去,通过网络层确定是那一台主机,通过数据链路层和物理层发送和接收信号。

        局域网之间都是通过路由器连接起来的,一个路由器至少能够横跨两个局域网。这些被路由器连接的局域网都认为该路由器就是本局域网内的一台主机,所以路由器可以和这些局域网内的任意一台主机进行直接通信。

        主机A使用自己的MAC地址封装报头,到了路由器时解包向上交付,路由器看到IP地址后就知道要转发到哪一个主机下。所以在使用TCP/IP协议时,IP及其向上的协议看到的报文都是一样的,只有数据链路层的MAC会变成不同的,这里只有一个路由器,但事实上是会有很多路由器才能跳转到对应的主机的。


网络地址管理

IP地址

  • IP地址是在IP协议中标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.16.1,用点分割的每一个数字表示一个字节,范围是0-255。

        需要注意的是,IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:00:16:3e:03:92:10)。
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。

        那我们再来重新看一下广域网通信。

        如果我在北京,我要给上海的朋友发消息,所以我在北京的主机的IP地址就叫做源IP,上海的朋友的主机的IP地址就叫做目的IP,比如这个信息要先传给当前地区的路由器,这条信息封装了MAC地址,这就是源MAC地址,通过自己家里的路由器放到当前地区的路由器,这就是下一站的MAC地址

        从消息发出到收到消息,源IP和目的IP都是不会变的,他要给下一站提供方向,会变化的就是MAC地址,通过当前地区的路由器就知道下一个路由器在哪里,继续封装MAC地址,这样一步步把消息传递过去。

        上述的源IP和目的IP、源MAC和下一站MAC都分别保存在对应层的报头中。

        在Linux中查看自己的MAC地址就要使用ifconfig命令。

这个ether就有以太的意思。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#使用MD5算法对密码进行加密

目录 一、涉及到的知识点 1.MD5 2.使用基类的 Create 方法来创建 MD5 对象 3.对每个字节进行加密并将其转换为十六进制字符串 4.ComputeHash(Byte[]) 二、使用MD5算法对密码进行加密 一、涉及到的知识点 1.MD5 MD5(Message Digest Algorithm 5)是一种被广泛使用的“消息…

【链表】Leetcode 24. 两两交换链表中的节点【中等】

两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1: 输入:head [1,2,3,4] 输出&#…

用连续自然数之和来表达整数 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 该整数的所有表达式…

java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics

今天在使用springBoot连接influxdb报错 java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 详细报错如下&#xff0c;提出我们缺少一个依赖 原因是由于创建influxdb客户端缺少Kotlin运行时库 解决办法就是 1.显示的添加okhttp的依赖 <dependency>…

蓝桥杯每日一题:接龙数列

题目来源&#xff1a;第十四届蓝桥杯软件赛省赛 B组 对于一个长度为 K K K 的整数数列: A 1 A_1 A1​, A 2 A_2 A2​ , … , A K A_K AK​ , 我们称之为接龙数列当且仅当 A i A_i Ai​ 的首位数字恰好等于 A i − 1 A_{i-1} Ai−1​ 的末尾数字 ( 2 ≤ i ≤ K 2 \le i \l…

my2sql —— go语言版binlog解析及闪回工具

之前学习过python语言版binlog解析及闪回工具 MySQL闪回工具简介 及 binlog2sql工具用法 最近听同事介绍有了新的go语言版的my2sql。优点是不需要安装一大堆依赖包&#xff0c;直接可以安装使用&#xff0c;并且解析更高效&#xff0c;试用一下。 一、 下载安装 1. 软件下载 …

5分钟教你使用idea调试SeaTunnel自定义插件

在用Apache SeaTunnel研发SM2加密组件过程中&#xff0c;发现社区关于本地调试SeaTunnel文章过于简单&#xff0c;很多情况没有说明&#xff0c;于是根据自己遇到问题总结这篇文档。SeaTunnel本地调试官方文档&#xff0c;希望对大家有所帮助&#xff01; 使用的引擎为Flink(不…

极路由4获取不到local_token和uuid的解决方案

今天淘了个二手极路由4(HC5962)&#xff0c;想刷个Openwrt系统来着&#xff0c;就按着网上的教程来进行。 打开极路由ROOT local-ssh利用工具 (hiwifi.wtf)这个网站&#xff0c;然后第一步获取local_token就出问题了&#xff0c;显示的字是"找不到文件..."&#xff…

C/C++炸弹人游戏

参考书籍《啊哈&#xff0c;算法》&#xff0c;很有意思的一本算法书&#xff0c;小白也可以看懂&#xff0c;详细见书&#xff0c;这里只提供代码和运行结果。 这里用到的是枚举思想&#xff0c;还有更好地搜索做法。 如果大家有看不懂的地方或提出建议&#xff0c;欢迎评论区…

前端基础篇-深入了解 Ajax 、Axios

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Ajax 概述 2.0 Axios 概述 3.0 综合案例 1.0 Ajax 概述 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互是指&#xff0c;可以在不…

统计a字符右边是否有足够多的b字符与之匹配

for (char c : s) {if (c a) {cnt;} else {cnt max(cnt - 1, 0ll);} } 23ccpc桂林GProblem - G - Codeforces void solve() {std::string s;std::cin >> s;int cnt 0;for (char c : s) {if (c () {cnt;}else {cnt std::max(cnt - 1, 0);}}std::cout << (cnt…

WPF新境界:MVVM设计模式解析与实战,构建清晰可维护的用户界面

概述&#xff1a;MVVM是一种在WPF开发中广泛应用的设计模式&#xff0c;通过将应用程序分为模型、视图、和视图模型&#xff0c;实现了解耦、提高可维护性的目标。典型应用示例展示了如何通过XAML、ViewModel和数据绑定创建清晰、可测试的用户界面。 什么是MVVM&#xff1f; …

APP广告变现,推荐对接哪些移动广告聚合平台,有哪些有优势?

对于中小APP&#xff0c;受困于团队资源有限&#xff0c;在不影响用户体验的情况下&#xff0c;把变现收益做到最大化&#xff0c;优先对接聚合广告变现平台能帮助媒体拓展填充渠道&#xff0c;提升广告曝光&#xff0c;收益做到最大化。媒体只需要把所有资源集中到核心业务——…

大模型第一讲笔记

目录 1、人工智能基础概念全景介绍... 2 1.1 人工智能全景图... 2 1.2 人工智能历史... 2 1.3 人工智能——机器学习... 3 监督学习、非监督学习、强化学习、机器学习之间的关系... 3 监督学习... 4 无监督学习... 5 强化学习... 5 深度学习... 6 2、语言模型的发展及…

演讲恐惧症?别怕!这3招帮你克服舞台紧张

演讲恐惧症&#xff1f;别怕&#xff01;这3招帮你克服舞台紧张 在人生的舞台上&#xff0c;演讲往往被视为展现个人才华、传递思想观点的重要平台。然而&#xff0c;对于许多人来说&#xff0c;站在舞台上却成为了一种难以克服的恐惧。演讲恐惧症&#xff0c;这个看似微不足道…

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲&#xff1a;首先&#xff0c;你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲&#xff0c;包括项目管理的五个过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;和十个知识领域&#xff1b; 2.制定学习计划&#xff1a;根据个人的时间…

发布镜像到阿里云仓库

发布上一篇Dockerfile实战-自定义的centos镜像。 1、登录阿里云 2、找到容器镜像服务 3、创建命令空间 4、创建镜像仓库 5、点击进入这个镜像仓库&#xff0c;可以看到所有的信息 6、根据操作指南测试推送发布 6.1登录阿里云 [rootzhoujunru home]# docker login --usernam…

如何添加 Android Native 系统服务

如何添加 Android Native 系统服务 工作学习过程中&#xff0c;我们可能需要去阅读不同类型的 Native 系统服务&#xff0c;也有可能会自己去完成一个 Native 系统服务。无论哪种情况都需要我们了解基本的 Native 如何去添加。就像我们写 Android App 得先了解一下四大组件才行…

【MySQL】锁信息

title: MySQL 锁信息 tags: MySQL abbrlink: 364637211 date: 2021-07-26 18:34:34 1 MySQL 锁定义 MySQL 锁&#xff08;Lock&#xff09;是数据库管理系统用于管理并发访问的一种机制。 在多用户同时访问数据库的环境下&#xff0c;可能会出现多个事务同时对相同的数据进行…

Python logging模块使用

Python logging模块使用 文章目录 Python logging模块使用 Python中的日志记录模块是 logging。它提供了一种灵活的方式来记录应用程序的状态、错误和调试信息。下面是使用Python中 logging模块的基本方法&#xff1a; 导入logging模块&#xff1a; import logging配置日志记…