网络基本知识分享

news/2024/6/1 22:29:38 标签: 网络, 网络协议, tcp/ip

目录

1.IP地址

2.端口号

3.协议

4.协议分层

5.Tcp/Ip五层网络模型

5.1 应用层

5.2 传输层

5.3 网络

5.4 数据链路层

5.5 物理层

6.封装和分用

6.1 封装

6.1.1 应用层拿到数据

6.1.2 向下传递给传输层

6.1.3 继续向下传递给网络

6.1.4 继续向下传递给数据链路层

6.1.5 最后交给物理层

6.2 分用

6.2.1 物理层还原二进制序列

6.2.2 向上传递给数据链路层

6.2.3 继续向上传递给网络

6.2.4 继续向上传递给传输层

6.2.5 最后交给应用层

7. 客户端与服务端

8. 请求和响应

9. 两台主机之间的网络通信流程


1.IP地址

     ip地址用于标识一台主机的位置,它由32个二进制位采用点分十进制的方法组成,共四个字节.主要分为四个部分,每一个部分对应一个字节(取值范围为0~255).

win+r 打开命令行输入ipconfig命令.

如图,标明的就是当前电脑的ip地址(动态分配的):


2.端口号

     大家都知道我们一台电脑上可以运行很多程序,而端口号就用于标识主机上某个应用程序.


3.协议

     结合实际,我们与他人签合同时,都需要按照合同上的要求来做,假如乙方是投资方,甲方是被投资方,那么合同中就可能会有,乙方需要投资多少钱给甲方,乙方的投资方式是什么等等,而甲方在合同期限内需要向乙方支付多少本金回报,以年度利润的百分之多少向乙方分红等等.所以协议可以理解成"约定",遵守约定的人分为发送方和接收方,发送方需要约定自己发送数据的格式,而接收方得知道发送方的发送数据格式,这样才能进行正常的网络通信.

          在网络传输中,网线传输的是高电平(表示1)和低电平(表示0),光纤传输的是光信号(光包括波长和频率,通过不同频率来表示1或0),它们传输的都是二进制数据,那么在传输之前,就需要发送方和接收方知道每一组0 1的二进制数据是什么意思.为了方便大家理解,再举个例子:

我和朋友要偷偷出去玩儿,但是我妈咪担心不让我出去,所以每次我都偷偷在手机上和朋友对暗号,暗号对上了,就代表我妈妈出去了,我就可以偷摸溜出去了,这个暗号就可以理解为协议,但是对暗号的方式是任意的,也可以是装饰,行为等等.


4.协议分层

     为什么要进行协议分层呢?大家要知道真实的网络通信中,协议其实是很复杂的(如果暗号太复杂我也记不住啊),一个协议太复杂,我们就可以把它拆分成多个协议,有的协议作用和定位类似,针对这些协议,再进行分类,然后再根据不同的类别进行分层(约定层级与层级之间的调用关系,上层协议调用下层协议,下层协议给上层提供支持,且不能跨层调用).

类似于这种相邻层级与层级之间交互,如图:

 皇帝级-->公级-->卿级-->郡级,再下层依次是县/道级-->乡级-->亭级-->里级-->什伍级-->综合.

每一层是不同的级别,层与层之间进行交互,但是不能跨层调用(一个平民一般是不能够直接去跟皇帝提意见的).

注:协议分层的好处:

     1. 分层之后,层与层之间,耦合度比较低,上层协议不必了解下层的细节,下层也不必了解上层细节.

     2. 方便对某一层协议进行替换.


5.Tcp/Ip五层网络模型

      它是当下最广泛使用的网络模型,从上到下分别是应用层,传输层,网络层,数据链路层,物理层.

5.1 应用层

         主要关注传输到该层的数据要用来做什么.比如要显示到哪个页面还是将它保存到数据库.

5.2 传输层

         不考虑中间路径,只关注起点和终点.

5.3 网络

         主要负责两个相离很远的节点之间的路径规划.

5.4 数据链路层

         主要负责两个相邻节点之间的传输.

5.5 物理层

         网络通信的基础设施.比如网线,光纤,网络接口等等.

         讲到这里大家肯定对这几层知识可能还不太理解,给大家举个例子吧!

         很常见的一件事,放暑假我一般都会回老家,我老家在四川,从湖南到四川.那么它们几层就会起到这样的作用:

         1). 物理层就是一路上修的路啊什么方便我行走或者搭乘交通工具

         2). 数据链路层就关注我从湖南到重庆是搭乘什么交通工具,我一般坐的是火车,但是也可以坐高铁直接到宜宾

         3). 网络层就负责路径规划,我要从湖南回四川,肯定不止一条路径,那么网络层的任务就是从众多路径中找到一个合适的路径让我能更快到家(我没钱,但是我知道哪条路能最快到家)

         4). 传输层就关注我的起点和终点,我的起点是湖南,终点是四川.(具体地址就不透露了啊)

         5). 应用层就涉及到我这个传输过来的数据要干嘛了,当然是回家干家务以维持为数不多的亲情,除了学习外,就是做家务.千万不能天天躺大床上玩儿手机,反正我是不敢.嘤嘤嘤~

注:我主要关注应用层和传输层.


6.封装和分用

     在学习了协议以及协议分层的概念后,在协议分层的基础之上,我们通过封装和分用去进行网络传输.而前者指的是发送方发送数据,将数据从上到下,依次交给对应的层次的协议进行封装,后者指的是接收方收到数据,要把数据从下到上,依次交给对应的层次的协议进行解析.

6.1 封装

6.1.1 应用层拿到数据

          首先我想我老妈了,想知道她现在在干嘛,于是我打开QQ(别问为啥不想男朋友,因为我没有)给她发了个消息:

那么QQ拿到对应用户数据后,就会进行封装,也就是将拿到的数据封装成应用层数据包(本质就是字符串拼接),它们的应用层数据包可能大概是这样的:

 注:真正的应用层数据包是它们内部自己规定的,可能会更复杂.

6.1.2 向下传递给传输层

           传输层拿到从应用层(通过调用传输层提供的api来处理数据)传输过来的应用层数据包之后,根据传输层的某个协议(最主要的是TCP和UDP协议)对该应用层数据包再次进行封装.这里以UDP协议为例,给该应用层数据包添加上UDP报头:

在介绍传输层作用的时候,我们提到传输层主要关注的就是传输数据的起点和终点,这里UDP报头中的源端口和目的端口属性就表示了传输的起点和终点.(一个程序到另一个程序),当然不代表真实的UDP报头就只有这两个属性,只是这两个属性是最关键的属性.

注:一个典型的数据报都是通过报头+载荷的方式构成的,这里载荷部分指的就是从应用层传输过来的应用层数据报.举个例子,网上购物的时候,大多数时候都会将我们买的东西进行包装,包装好了之后再装入快递袋子或快递盒子里,分别贴上所需信息标签(或者二维码/条形码).

6.1.3 继续向下传递给网络

           接下来再将上述UDP数据报交给网络层的协议,网络层最常见的协议就是IP协议,根据IP协议对UDP数据报再次进行封装,给其添加上IP协议报头:

 源IP和目的IP(数据从一台主机发送到另一台主机)

6.1.4 继续向下传递给数据链路层

           这里封装用到的最主要的协议为以太网协议(物理层也会用到),而我们平时就是在使用以太网线上网,根据以太网协议对上述IP协议数据报添加以太网数据帧,分为帧头(主要讲帧头)和帧尾两部分:

注:mac地址(与网卡绑定)的作用和IP地址相似,也是描述一个主机在网络上的位置,但是IP地址用于网络层的路径规划,而mac地址用于数据链路层中两个相邻节点的传输.

6.1.5 最后交给物理层

          最后将以太网数据帧交给物理层,物理层负责将上述0101的二进制数据转换成光信号或者电信号,或其它信号进行传输.

注:上述过程本质都是字符串拼接.

6.2 分用

6.2.1 物理层还原二进制序列

           物理层中,网卡收到高低电平的二进制数据,然后对这些信号进行解析,还原成01这样的二进制序列.

6.2.2 向上传递给数据链路层

          然后数据链路层将上述二进制序列当做一个以太网数据帧取出中间载荷,再向上传递给网络层,网络层可以通过帧头的消息类型知道网络层封装时使用的是什么协议:

6.2.3 继续向上传递给网络

          分用到网络层,这时候就由网络层的IP协议进行数据报解析,去掉IP报头(也可能还会做一些其它的工作),取出载荷:

注:IP数据报,报头中也有标识传输层用哪个协议. 

6.2.4 继续向上传递给传输层

          传输层这里是由UDP协议来解析,也是去掉报头,取出载荷,最后把数据交给应用层:

注:借用端口号来区分具体是哪个应用程序,每个接收网络数据的程序都需要关联一个端口号.

6.2.5 最后交给应用层

          QQ应用程序对这个应用层数据报进行解析,然后放到程序界面中.

注:QQ服务器需要根据接收方QQ号找到对应客户端在哪个机器上登录.


7. 客户端与服务端

       ● 客户端

          简而言之,客户端就是发送请求的人,我们在客户端界面上向服务器发送请求和数据,让服务器去处理.

       ● 服务端

          服务端就是为客户端提供服务的人,它要接收并储存客户端发来的数据或请求,并且对请求进行响应,发送数据给客户端.

举个示例:我们去餐厅点菜,而服务员拿菜单给我们,过程中还可能给我们介绍本店的特色菜,我们点完菜后会让服务员核对完,就由服务员告诉厨房我们点了什么,我们则等待上菜,菜品陆陆续续完成后,也由服务员给我们上菜(返回响应).我们就相当于客户端,服务员就相当于服务器,过程中服务员主动向我们介绍菜品,就相当于服务器向客户端发送数据,我们点完菜交给服务员,服务员就给我们上菜,这个流程就类似于客户端向服务器发送请求,然后服务器处理请求并返回响应.


8. 请求和响应

       ● 请求

          顾名思义,客户端想要向服务器索要一些资源,就会发送请求.上述示例中,我就向服务员发送请求,我们需要点哪些菜.

       ● 响应

           客户端发送请求后,服务器对它的请求进行处理并回应请求.上述示例中,服务员上我们点的菜品,就是对我们要点哪些菜的响应.


9. 两台主机之间的网络通信流程

        ① 在封装和分用中,真实的网络环境,数据的传输中间可能要经历很多节点(很多交换机和路由器)的进行转发.发送方的电脑会将数据从应用层封装到物理层.交换机是进行"二层转发":先将我的电脑封装好的数据报从物理层分用到数据链路层,确认目的mac地址是否有误,然后再从数据链路层重新封装到物理层,将数据继续进行转发.而路由器是进行"三层转发":将得到的数据报分用到网络层.得到目的ip进行下一阶段的路径规划,然后重新从网络层封装到物理层(过程中会调整mac地址).最后通过逐步转发到达接收方电脑,然后才从物理层分用到应用层.

注:上述所述是教科书中的交换机和路由器,但是在实际生活中路由器也可能通过特殊手段只进行二层转发,而交换机也有高端的,支持三层转发.甚至还可以封装分用到网络层或应用层.


分享完毕~欢迎大家和我一起讨论哦~


http://www.niftyadmin.cn/n/323355.html

相关文章

登录的两种方式

Cookie 起源:「购物车」功能需求 工作机制 1.服务器需要客户端保存的内容,放在set-cookie headers里返回,客户端会自动保存 2.客户端保存的cookies,会在之后的所有请求里都携带进cookie header里发送给服务器 3.客户端保存coo…

前端开发推荐vscode安装什么插件?

前言 可以参考一下下面我推荐的插件,注意:插件的目的是用于提高开发的效率,节约开发的时间,像类似检查一些bug、拼写错误等这些可以使用插件快速的识别,避免在查找错误上浪费过多的时间,但切记不要过度依赖…

【LeetCode: 97. 交错字符串 | 暴力递归=>记忆化搜索=>动态规划 | 位置对应】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

KubeCon EU 2023 落幕,哪些技术趋势值得关注?

KubeConCloudNativeCon 是云原生领域的技术盛会,上个月月末,在荷兰阿姆斯特丹举办的欧洲 KubeConCloudNativeCon 刚刚落下帷幕,此次大会吸引了10000多名参会者以及200多家企业,其中58%的参会者是首次参会。这不仅反映了云原生领域…

如何在项目中自定义注解实现权限数据管理案例

如何在项目中自定义注解实现权限数据管理案例 一、准备工程基本功能1. 创建工程并添加依赖2. 配置数据库信息3. Mybatis-Plus 代码生成器生成基本项目结构4. 因为项目中引入了spring-security,所有接口被保护了,所以用户实体和service分别实现UserDetail…

Linux指令运行原理和权限

Linux指令运行原理和权限 一.命名行解释器二.权限1.用户分类2.什么是权限3.增删权限4.更改权限的拥有者5.三个概念1.权限掩码2.目录权限3.粘滞位 三.权限总结 一.命名行解释器 那么命令行解释器存在的意义:1.进行命令的解释。2.保护os,对于非法的请求&am…

flink入门

flink安装 flink本地安装 demo运行 本地模式安装 | Apache Flink flink1.13.1为例: cd /opt wget https://mirrors.advancedhosters.com/apache/flink/flink-1.13.1/flink-1.13.1-bin-scala_2.12.tgz tar zxf flink* rm -rf flink*.tgz mv flink* flink vim /etc/prof…

Pytorch代码——持续更新

1 连续两个argsort 返回张量中每个元素对应的排名 torch.argsort(torch.argsort(pred, dim1, descendingTrue),dim1,descendingFalse) 例子 使用一个argsort后得到的是张量中按列降序排序后的索引, 再使用一个argsort后是张量中每一个元素的排名。 例如第2行中…