快速了解网络原理

article/2025/9/29 0:54:17

作者:~小明学编程 

文章专栏:JavaEE

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

局域网和广域网

局域网

局域网组建的方式

广域网

网络通信基础

IP地址

端口号

协议

什么是协议

协议分层

分层模型

OSI七层模型

TCP/IP五层模型

网络设备所在的分层

封装和分层

封装

应用层

传输层(操作系统内核)

网络层(操作系统内核)

数据链路层(驱动程序)

 物理层(硬件设备,网卡)

分用

物理层

数据链路层

网络层

传输层

应用层

传输过程


局域网和广域网

局域网

局域网,即 Local Area Network,简称LAN。

局域网通俗的来说就是将一小片区域(没有明确的界限)的主机给连接起来,然后连接起来的主机之间就可以互相通信了,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建的方式

1.基于网线连接:通过网线将多台设备连接起来。

2.基于集线器的连接:将多台设备都连到集线器上面。

3.基于交换机组建:将多台设备连到交换机上。

4.基于交换机和路由器组建:将多台设备连接到交换机上再将多个交换机连在一个路由器上。

广域网

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。所谓的广域网和局域网之间是没有明确的界限的,只是一个相对概念。

网络通信基础

刚刚简单的介绍了一下广域网和局域网,他们主要是通过某种设备将多台设备连接起来,连接起来的目的就是为了彼此相互交流,下面就简单的给大家介绍一下他们之家是如何实现相互交流的。

IP地址

所谓的IP地址是用于定位我们主机的网络地址。

其中IP地址是一个32位的一个二进制数,但是32位的二进制数不易读,所以我们通常把它分为四个八位的二进制数也就是4个一个字节的数,这样的过也就规定了每个字节的大小是0~255.

通常情况下通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6

特殊的IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

这样的话我们就可以通过IP地址找到我们指定的主机了,但是光找到主机的话还是不够的我们需要找到哪一个进程来解决问题,这就需要我们的端口号了。

端口号

我们的IP地址用于锁定我们的主机的位置,而端口号用于锁定该主机的某一个进程,这样才能精确的知道我们的数据要放在哪里。

端口号的本质是2个字节的无符号整数所以其能够表示的范围就是从0~65535,值得我们注意的是一个端口号只能绑定一个进程,但是一个进程可以绑定多个端口号。

协议

什么是协议

所谓的协议就是一种约定我们的计算机之间的交流是比较复杂的,我们需要很多的约定才能使彼此之间能够很好的交流并且正确的交流。

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。

协议分层

前面我们说了协议很复杂有多种多样的规定和约束才能保证我们通信的正常,所以这个时候需要我们对协议进行分层,各自管理各自的东西这样可以避免将所有的规定都写在一起所造成的复杂,协议的分层有利于我们对协议更好的维护和扩展。

优点

1.每层协议不需要理解其他层协议的细节(更好的做到了封装)。就像打电话的人,不需要理解电话的工作原理,就能完成打电话的操作。制造电话的人,也不需要成为语言大师。

2.把对应层的协议替换成其他协议(更好的耦合)。就像打电话的人,可以使用有线电话,也可以使用无线电话。打电话的人,可以使用汉语,也可以使用英语。

分层模型

OSI七层模型

OSI七层网络模型是将网络从逻辑上分为了七层,他们分别是

应用层

网络服务与最终用户的一个接口。

协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层

数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)

格式有,JPEG、ASCll、EBCDIC、加密格式等 

会话层

建立、管理、终止会话。(在五层模型里面已经合并到了应用层)

对应主机进程,指本地主机与远程主机正在进行的会话

传输层

定义传输数据的协议端口号,以及流控和差错校验。

协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层

进行逻辑地址寻址,实现不同网络之间的路径选择。

协议有:ICMP IGMP IP(IPV4 IPV6)

数据链路层

建立逻辑连接、进行硬件地址寻址、差错校验  等功能。(由底层网络定义协议)

将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层

建立、维护、断开物理连接。(由底层网络定义协议)

这种分层并不是很实用所以我们通常将上面的三层合并到一起也就是TCP/IP五层/四层(不算上物理层)模型。

TCP/IP五层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

下面我们就分别详细的介绍这五层分别的功能是什么。

物理层:

网络通信中的硬件部分,主要是针对硬件的一些约束,就像我们的买u盘的时候一般不需要考虑插口的问题,拿来直接就能插进去使用了,这是因为我们事先对其进行了一些约定,多宽多长等都约定好了。

数据链路层:

数据链路层主要是负责相邻的两个设备之间的通信的,例如我们一个路由器连接了两个主机,主机以和主机2,那么我们的主机和路由器之间就是相邻的,而两个主机之间是不相邻的。

网络层:

网络层是负责点对点之间的通信的,在一个复杂的网络之中我们想要连接两台主机的话就需要网络层来规划出一条合适的路线。

传输层:

负责端到端之间的通信,只关注数据有没有传输到位不关注数据是怎么传输的。

应用层:

和应用程序相关主要负责告诉我们这个数据是干嘛用的,不同的应用程序就会有不同的用途。

网络设备所在的分层

主机:实现了物理层要应用层这五个层面,其中操作系统实现了传输层到物理层。

路由器:实现了从物理层到网络层这三个层面。

交换机:实现了物理层到数据链路层。

封装和分层

封装

描述了不同的分层的协议之间,是如何相互配合的。就是将应用层的内容,封装为传输层的内容。封装的时候就是将上面放上一些辅助的信息。封装的时候不需要考虑脏数据。

应用层

首先我们需要构造一个应用层的协议,就拿我们发微信来举例子,我们现在想要发一个"圣诞快乐",我们假设微信的协议是这样的。

这样就构造好了我们的应用层的协议报文。

传输层(操作系统内核)

然后接下来就到了我们的传输层,在传输层我们需要根据刚才应用层的协议报文来构造一个传输层的协议报文,其中传输层最典型的协议:UDP,TCP。

构造成的数据报,TCP 数据报 = TCP 报头 + 数据载荷(Payload,也就是一个完整的应用层数据。

 以上就是构造好了一个以TCP为例的传输层的协议报文。

网络层(操作系统内核)

拿到了完整的传输层数据报,就会在根据当前使用的网络层协议(例如 IP),再次进行封装,把 TCP 数据报构造成 IP 数据报,还是添加一个协议报头。仍然是字符串拼接的过程。紧接着,当前的 网络层协议,就会把这个 IP 数据报,交给数据链路层。

 IP 数据报 = IP 协议报头 + 载荷(完整的 TCP/UDP 的数据报)

IP 数据报当中也有很多重要的信息:其中最重要的就是 源IP 和 目的IP。相当于发件人的地址,和收件人的地址。

以上就构造好了我们网络层的协议报文,接着就交给我们的数据链路层了。

数据链路层(驱动程序)

在刚才的 IP 数据报基础上,根据当前使用的数据报链路层的协议,给构成一个,数据链路层的数据报。典型的数据链路层的协议,叫做 “以太网” ,就会构造成一个 “以太网数据帧”。

不同于上面,数据链路层会在IP数据包的基础上加上帧头和帧尾,网络层的的IP协议里面主要包含了起点和终点,我们的帧头是起点和下一个节点的地址,其中起点的地址是不变的而下一个节点的地址是变化的。

 物理层(硬件设备,网卡)

物理层的作用就是把刚才的以太网的数据帧(一组01)变成高低电平或者变成高低电磁波给传输出去。

分用

分用就是封装的逆过程,就是将层层的封装给拆开最后拿到我们想要的数据。

物理层

将我们得到的高低电平或者电磁波转换成01,然后这一串 0 1 就是一个完整的以太网数据,然后 物理层 就把数据交给 数据链路层。

数据链路层

在数据链路层会去掉这些帧头和帧尾,拿到IP数据报,再将ip数据报交给网络层。

网络层

在网络层我们会去掉我们的IP协议报头然后将里面的TCP协议报文交给传输层。

传输层

接着传输层又会对当前协议进行解析,去掉TCP协议报头将里面的东西交给应用层。

应用层

就会调用 socket API 从内核中读取到这个应用层的数据报,再按照应用层协议进行解析,然后根据解析结果显示到窗口中。

传输过程

通过交换机 

通过路由器

 我们复杂的传输过程基本都是通过这两种情况而来的,中间可能会经过多个路由器或者交换机。


http://chatgpt.dhexx.cn/article/XDO5A4yE.shtml

相关文章

网络原理 (1)

网络原理 文章目录 1. 前言: 2. 应用层2.1 XML2.2 json2.3 protobuffer 3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 (重点)1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 :三次握手3.2 断开连接 : 四次挥手 4. 滑动窗口5. 流…

网络原理初识(基础)

目录 一,网络的划分 1.局域网(LAN) 概念 局域网的组建(连接方式) 2.广域网(WAN) 概念 二,网络通信基础 1.IP地址 概念 格式 组成 分类 特殊IP 2.端口号(po…

网络基本原理

一、网络与网卡 网络:进程与进程间跨主机(Host)通信 网卡: 网卡发送数据:1.填充数据 2.触发发送 网卡接收数据:1.接收数据 2.通过中断把控制权交给OS 3.OS把数据搬给进程 数据经过不断的封装之后才能发…

安装vue-devtool

新买了台电脑,想要安装vue-devtool,发现安装不上,特此记录下。 一,下载 因为某种大家都知道的原因,外网上不了。 可以使用这里的下载地址: https://chrome.zzzmh.cn/info?tokenljjemllljcmogpfapbkkighb…

嵌入式linux之yocto(六)devtool往返开发

1. 参考 yocto官方文档-devtool 微信读书:嵌入式Linux系统开发:基于Yocot Project 书中对于devtool讲解较少,官方文档对devtool的工作流和使用方法较为详细。 传统开发内核是直接进入内核路径修改源码,这里简述使用devtool工具开发Linux内核…

Chrome Devtool 调试 Javascript

重现错误 单击打开演示。演示在新选项卡中打开。在 Number 1 中输入数字5在 Number 2 中输入数字2点击 Add Number 1 and Number 2 熟悉 Sources 面板 UI 点击Source get-started 是 get-started.html(不包括JS) get-started.js 就是 get-started 的…

devtool使用介绍(2)

devtool使用介绍2 2.4.2 使用devtool Modify修改现有组件的来源 2.4.2 使用devtool Modify修改现有组件的来源 devtool Modify命令为使用已有代码的现有代码作准备,该代码已具有用于构建软件的本地recipe。 该命令足够灵活,可让你从上游源提取代码&…

webpack——devtool配置及sourceMap的选择

官方手册传送门 官方对devtool配置的定义很简单:选择一种 source map 格式来增强调试过程,不同的值会明显影响到构建build和重新构建rebuild的速度。 不过,什么是source map,官方用提供了许多种的source map,其中的区…

webpack:devtool配置中的source map

webpack:devtool配置中的source map 一、功能作用二、配置文件三、source map格式(1)source-map(2)inline-source-map(3)hidden-source-map(4)eval-source-map&#xff0…

sourceMap: devtool 模式以及SourceMapDevToolPlugin的使用

1. 什么是sourceMap sourceMap 是一个信息文件, 维护着代码转换编译前后的映射关系; 2. devtool : 选项控制是否生成,以及如何生成 source map source Map对应的模式 1)inline 2) cheap 3)module 4) eval 5) source-map …

webpack之devtool

关于Devtool 该选项控制是否以及如何生成源映射。官网上给出的可选值有: 其中一些值适合开发,一些用于生产。对于开发,您通常需要快速的Source Maps,以bundle的大小为代价,但是对于生产,您需要独立的Sourc…

chrome devtool使用基础

保存js和css setting > workspace 工作区设置后,自动映射工作区 带绿色图标的文件,不需要请求 blackbox script 黑盒调试,调试不进入第三方代码,只调试项目代码 setting > blackbox 或者鼠标右键设置 network throttling profile 设置网络模式,网速限制,在ne…

Chrome Devtool 使用指南

Chrome Devtool Performance使用指南 运行时性能表现(runtime performance)指的是当你的页面在浏览器运行时的性能表现,而不是在下载页面的时候的表现。这篇指南将会告诉你怎么用Chrome DevToos Performance功能去分析运行时性能表现。在RAI…

devtool使用

记录点没用的东西 1. 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><version>2.3.2.RELEASE</version> </dependency> 2.pom中加入maven插件 <plugin…

webpack devtool详解

前言 devtool也是之前常用的一个配置&#xff0c;我们稍微了解下吧&#xff0c;不研究太深&#xff0c;毕竟现在都不怎配置他。 内容 devtool是配置sourceMap的。 sourceMap大家都知道&#xff0c;我们本地或者测试环境出了错误&#xff0c;可以在source中迅速定位错误&#x…

devtool配置

devtool配置 一、devtool配置1.source map 源码地图2.webpack中的source map3.对于开发环境 一、devtool配置 1.source map 源码地图 本小节的知识与 webpack 无关 前端发展到现阶段&#xff0c;很多时候都不会直接运行源代码&#xff0c;可能需要对源代码进行合并、压缩、转换…

dev-tool安装方法(手动安装版)

记录一下vue调试神器dev-tool的安装过程&#xff0c;由于是在公司内网&#xff0c;也不方便挂梯子&#xff0c;所以手动安装——下载源码在本地编译&#xff0c;再添加扩展程序的方式安装。过程如下&#xff1a; 一、dev-tool源码获取 git地址&#xff1a;https://github.com/…

一文彻底搞懂webpack devtool

为什么需要Source Map 首先根据谷歌开发者文档的介绍&#xff0c;Source Map一般与下列类型的预处理器搭配使用&#xff1a; 转译器&#xff08;Babel&#xff09;编译器&#xff08;TypeScript&#xff09;Minifiers&#xff08;UglifyJS&#xff09; 为什么呢&#xff1f;…

OpenBmc开发8:devtool简介与使用

1 简介 devtool是yocto中的一个工具&#xff0c;此命令行工具作为可扩展SDK&#xff08;eSDK&#xff09;的一部分&#xff0c;是基础组件。可以使用devtool来帮助构建&#xff0c;测试和打包eSDK中的软件。可以使用该工具有选择地将构建的内容集成到OpenEmbedded构建系统构建…

怎么在navicat(Navicat for MySQL)中运行SQL代码

1、首先在navicat中新建一个数据库&#xff08;之前已经建好数据库&#xff0c;忽略本步&#xff09; 2、点击上图中的“查询”命令 3、再点击“新建查询” 4、系统自动跳出如下图命令窗口 5、可以在命令行中敲代码或直接复制已有代码。如果代码是关于建表&#xff0c;执行成…