初识网络原理

2023-11-15

目录

局域网(简称LAN)

 广域网

IP地址 

端口号 

协议 

协议分层 

互联网的分层 

网络设备的分层 

封装和分用


局域网(简称LAN)

简单来说就是把两台或多台机器连接在一起,局部组建的一种私有网络,局域网内的主机之间能方便的进行网络通信,,而局域网和局域网之间没有连接的话是无法通信的.

局域网之间的通信方式右很多种:

1.网线直接相连

这是一种简单的局域网,也比较简单,但是这种组网方式并不太常用,如果主机更多的话就会更加麻烦,是会非常耗费网线和网口的

2.基于集线器组建

这种组网方式比较"坑",就不过多介绍了

3.基于交换器组建

交换机其实家里也不太常见,交换机上面的网口都是相等的口,效果就是把插在上面的设备给组建成一个局域网,这个局域网内部的主机之间就可以相互进行访问,交换机就把若干个设备组建到了一个局域网中

 4.基于路由器组建

 而对于路由器而言,上面是有两种网口的,通过LAN口插的设备就可以组成一个局域网,而通过WAN口就可以插在另一个路由器的LAN口上,然后连接另一个局域网,路由器就可以连接两个不同的局域网

上述讨论的区别,仅仅局限于"传统"的交换机和路由器,实际上,真实的交换机和路由器之间的界限已经越来越模糊了,两个的功能之间基本差别不大了!

 广域网

广域网其实和局域网之间没有明确的界限,一般认为比较大的局域网,就可以称为"广域网 ",全世界最大的广域网,叫做Internet(因特网)

IP地址 

描述了网路上的一个主机的位置,IP地址本质上是一个32位的整数~~但是由于32位的整数不方便人来读和记忆,因此一般常见的操作就是把这个32位的整数,按照每个字节,分成四个部分~中间用.来分割,这种称为"点分十进制".类似于这样的IP地址每一部分都是0~255,这样更方便人来读和记忆

端口号 

描述了一个主机上的某个应用程序,端口号本质上是一个16位的无符号整数(0~65535),(3306就是mysql默认的端口号),服务器程序在启动的时候,就需要绑定上一个端口号,以便客户端程序来访问

协议 

要进行有效的通信,前提就是能够明确通信协议~协议本质上就是约定,发出来的数据是什么样的格式,接收方就需要按照对应的格式来进行解析~

而在网络通信的时候,本质上传输的是光信号和电信号,通过光信号的频率(高频率/低频率),电信号的电平(高电平/低电平)来表示0/1!

协议分层 

网络通信这个过程其实是非常复杂的,里面有很多很多的细节,如果只通过一个协议的话,这个协议会非常的庞大,复杂,因此我们需要把这个庞大的协议进行拆分,拆成多个小的,更简单的协议,每个协议负责一部分工作!!这样的好处是:①每层协议不需要理解其他层协议的细节(更好的做到了封装,不需要理解里面的据图工作原理,就可以完成操作,降低了使用成本)②把对应层的协议替换成其他协议(更好的解耦合,例如两个人打电话的话,就可以不局限于使用有线电话,也可以使用无线电话,也可以不使用英语,汉语)

互联网的分层 

OSI七层网络模型:

OSI为(Open System interconnect)的缩写,自上而下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP网络模型:

 自上而下分别是应用层、传输层、网络层、数据链路层、物理层,在这个模型中把应用层,表示层,会话层合并成了一层应用层,其他层都是基本类似的

如果站在一个全局的角度来看这个模型的话就是五层模型,而站在程序员的角度看的话,最下面的物理层描述的是硬件设备,这个时候就被认为是四层模型了

简单介绍一下这几层结构的功能:

物理层:针对网络通信的硬件设备,类似于网线,网卡,对硬件设备的约定,就是物理层协议所负责的范畴,需要保证所有的主机和网络设备之间都是相互匹配的

数据链路层:负责完成两个相邻(这里的相邻代表的是通过一根网线连接的两台设备,类似于上面的路由器和主机,但是各个主机之间没有通过一根网线相连就不是相邻的)的设备之间的通信

网络层:负责点到点之间的通信,这里就是全局的了,网络中的任意节点,到任意一个节点的通信(更多指不相邻的),然后网络层的协议就负责在这两个点之间规划出一条最优的路线(这个最优用户可以自己定义),因为两个点之间的路线不会只有一条,然后网络层就会帮助规划出一条最优的路线出来(例如高德地图),然后相邻之间的就可以通过数据链路层来通信了

传输层:负责端到端之间的通信,这里只关注起点和终点,就不会关注过程(不关注数据视奏哪条路线来通信的)只关注结果(只关注数据到没),这里就类似于买快递,你和商家就是只关注结构的,而快递公司才会去关注过程

应用层:这个是和程序员密切相关的,这里就会关注,你传输的这个数据是做什么用的,不同的应用程序就有不同的用处,就拿上面的快递举例子:商家就是站在传输层,考虑这个东西能不能发到我手上,而快递公司就是站在网络层来规划路线,快递员就是就是站在数据链路层将货物拉到快递站点,电动车/卡车/公路都是站在物理层,提供传输的基础,而买快递的我们就站在应用层,是抱有一定的用途才需要的这个快递(数据)

网络设备的分层 

一台主机,其实就对应了物理层到应用层五层都实现了

一台路由器,主要就是物理层到网络层(实现了物理层,数据链路层,网络层)

一台交换机,主要就是物理层到数据链路层(实现了物理层,数据链路层)

封装和分用

(这里的封装和Java面向对象的封装没关系)

这个其实是网络分层中的一组重要概念,主要是不同的分层的协议之间是如何相互配合的

举个例子:

例如使用QQ发送消息:

用户A在键盘上,输入"hh",按下发送键,然后QQ应用程序(应用层),就会根据用户输入的内容,把数据构造成一个应用层的协议报文(协议是约定,而报文是遵守了这个约定的一组数据,QQ中的代码会根据程序员所涉及的应用层协议(其他层的协议都是操作系统/硬件/驱动已经实现好的,而应用层的协议是程序员自己实现的),来构造出一个应用层的数据报文)

 然后到了传输层(操作系统内核),然后根据刚才传过来的数据,基于当前使用的传输层协议,来构造出一个传输层协议报文(传输层最低按次那个的协议:UDP,TCP,以TCP为例)

 而这里的封装也不是仅有一层,接下来就会把这个传输层的数据报,交给网络层再由网络层来处理(也是在操作系统内核),拿到了完整的传输层数据报,就会再根据当前使用的网络协议(例如IP),再次进行封装,把TCP数据报构造成IP数据报,还是会添加一个协议报头

这也是一个封装,紧接着当前的网络层协议,就会把这个IP数据报,交给数据链路层(驱动程序),在刚才的IP数据报基础上,根据当前使用的数据链路层协议(典型的数据链路层协议叫做"以太网"),给构造成一个数据链路层的数据报,就会构造成一个"以太网数据帧" 

然后数据链路层又会把这个数据交给物理层(硬件设备),这里做的工作就是根据刚才的以太网数据帧(一组0 1),把这里的0 1变成高低电平,通过网线传输出去,或者把这里的0 1变成高频/低频的电磁波,通过光纤/无线的方式传播出去~~

这就是一次完整的数据传输过程,这里的整个过程都称为封装,从上往下,数据从上层协议,交给下层协议,由下层的协议进行封装(构造成该层协议的报文),直到物理层才完成传输!

到了刚才这一步,数据就已经离开了当前主机,前往了下一个设备,下一个设备可能是其它设备,这里的用户A和B大概率不是网线直连的,中间就有很多个路由器和交换机来负责数据的转发,这里我们来看一下数据到达B之后的表现:

先到物理层(硬件设备,网卡),主机B的网卡感知到了一组高低电平,然后就会把这些电平翻译成0 1的一串数据,然后这一串0 1就是一串完成的以太网数据帧,然后物理层就会把这个数据交给数据链路层(驱动程序),然后数据链路层就会对这个数据进行解析,去掉帧头帧尾,取出里面的IP数据报,然后交给网络层协议(操作系统),网络层协议(IP协议)又会把这个数据进行解析,去掉IP数据报头,取出里面的TCP数据报,然后再交给传输层(操作系统内核),传输层协议(TCP协议)又会把这个数据进行解析,去掉TCP报头,取出TCP报,交给应用层(应用程序 QQ),应用层就是调用刚才的socket API从内核中读取到这个应用层数据报,再按照应用层协议进行解析,根据解析结构显示到窗口,这样就完成了一个数据具体的解析过程,这里从下往上的解析就是分用

分用就是封装的逆过程,封装就是从上往下数据依次被加上了协议报头(包快递),分用就是从下往上,数据依次被去掉了协议报头(拆快递)

上述讨论的只是起点和终点的情况,A和B中间还有很多的路由器和交换机,简单介绍一下

交换机

路由器

 中间更多路由器和交换机

 无论网络多么复杂,这里整体的传输过程都是类似的,只是在不停的重复封装和分用的过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初识网络原理 的相关文章

  • WebSphere 中跨 JVM 的会话复制

    我们建立了一个基础设施 其中网络服务器是集群的 而应用程序服务器不是 Web 服务器根据循环策略将请求路由到应用程序服务器 在这种情况下 一个应用程序服务器中可用的会话数据在另一应用程序服务器中不可用 无论如何 是否可以使来自第一个应用程序
  • Spring安全+LocaleResolver

    我需要在身份验证成功后更改区域设置 区域设置解析器
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 像 Google Play 商店一样在垂直 RecyclerView 中动态不同图像水平 RecyclerView

    我一直在关注这个教程 http android pratap blogspot co za 2015 12 horizo ntal recyclerview in vertical html http android pratap blog
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • Grails 项目 - Servlet 调用 - ClassNotFoundException:javax.servlet.AsyncContext

    我在用 IntelliJ IDEA 终极版 12 4 grails 2 2 0 BuildConfig groovy 文件中的 grails servlet version 2 5 并实现了简单的 servlet post 请求 使用 RE
  • 如何将日期字符串解析为Date? [复制]

    这个问题在这里已经有答案了 如何将下面的日期字符串解析为Date object String target Thu Sep 28 20 29 30 JST 2000 DateFormat df new SimpleDateFormat E
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • Java 声音可视化器

    我正在尝试制作一个java声音可视化工具 但我完全不知道如何在实时处理音频后立即从提取的音频中获取字节 我可以将程序与 wav 文件同步 但这不是我想要做的 我想用程序生成声音 然后播放它 而不将其保存在任何地方 谢谢您的帮助 本文可以帮助
  • Log4j 2.0 中发现 ClassNotFoundException

    我已经设置了 log4j12 api beta2 jar 的构建路径 但它给出了 以下错误请帮我解决这个问题我的代码如下 java 文件 package com sst log4j class Product private int pro
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • 带等待/通知的同步块与不带等待/通知的同步块之间的区别?

    如果我只是使用synchronized 不是wait notify方法 它仍然是线程安全的吗 有什么不同 Using synchronized使方法 块一次只能由一个线程访问 所以 是的 它是线程安全的 这两个概念是结合在一起的 而不是相互
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • Java有没有类似微软CHESS的工具?

    是否有类似于 Microsoft 的现有 Java 工具CHESS http research microsoft com chess 或者 CHESS 源代码是否开放 以便我可以尝试将其转换为 Java 谷歌的织线工 http code

随机推荐

  • Allegro添加相对传输延迟的等长规则设置

    怎么去添加相对传输延迟的等长规则 首先讲述的是通过直接添加法去添加 直接添加法只适用于点对点的传输模式 中间没有任何串阻 串容的情况 具体操作如下所示 01 打开规则管理器 打开规则管理器 执行菜单命令Setup Constraints 在
  • 抖之恒科技python常用库之工具库schema

    在Python编程语言中 有众多的开源库可以帮助程序员更加高效地完成各种任务 其中 Schema就是一款非常实用的工具库之一 本文将为您介绍Schema库的基本概念 使用方法以及它在Python编程中重要性 一 什么是Schema Sche
  • Koin入门使用

    一 简单流程 1 创建Koin容器 startKoin 创建一个Koin容器并注册到GlobalContext中 modules module 配置Koin模块并注入到Koin容器 2 创建Koin模块 class People val k
  • HDU1007(最近点对问题)

    题意不难理解 就是找到最近的两个点 计算其距离 除以2就是所求的圆的半径 思路很简单 运用分治的思想 先划分区间 分别找到左右区间中的最近点对 再合并区间 找到区间间的最近点对 注意如果用qsort 进行排序可能会超时 include
  • Qi v1.2.4 -- WPC官方文档资源下载

    WPC无线充电联盟QI协议1 2 4 zip qi 嵌入式文档类资源 CSDN下载QI协议part1 part2 part3 part4完整版 没有积分可使用链接 链接 httpqi更多下载资源 学习资料请访问CSDN下载频道 https
  • 剑指offer-42翻转单词顺序-左旋转字符串

    先来一道简单题 将字符串左旋 输入abcdefg 输出cdefgab package Leetcode Author YCKJ3803 Date 2021 3 1 16 41 Description public class Zuoxuan
  • Java概述(了解java开发及背景)

    目录 一 java语言背景介绍 Java 语言的三个版本 JavaSE JavaME JavaEE 二 Java跨平台原理 三 JRE和JDK Java 程序开发的三个步骤 编写代码 编译代码 运行代码 JDK JRE 和 JVM 的关系
  • 初学JAVA的变量作用域

    变量的范围是程序中该变量可以被引用的部分 方法内定义的变量被称为局部变量 局部变量的作用范围从声明开始 直到包含它的块结束 局部变量必须声明才可以使用 方法的参数范围涵盖整个方法 参数实际上是一个局部变量 for循环的初始化部分声明的变量
  • 简单springboot及springboot cloud环境搭建

    springboot使用特定的方式 简化了spring的各种xml配置文件 并通过maven或者gradle 完成所需依赖 使用springboot maven插件 可直接输出可运行的jar包 省去了tomcat等容器的部署 使得基于htt
  • 基于Sqli-Labs靶场的SQL注入-29~31关

    目录 Less 29 基于GET 双服务器 单引号 字符型注入 双服务器解析 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less 30 基于GET 双服务器 双引号 字符型注入 Less 31 基于GET 双服务器 双引号加括号 字符型
  • Java Web: JDBC、数据库连接池、Maven

    1 JDBC JDBC 全称Java DataBase Connection Java 数据库连接 在前面我们已经学习过Java和DataBase 数据库 了 JDBC就是使用Java语言操作关系型数据的一套API 本质上就是一个接口 用于
  • java实现 手写体识别_java手写体英文数字识别系统 识别预处理如何实现 采用什么语言比较好...

    展开全部 转载 1 引言 手写体数字识别是文字识别中的一个研究课题 是多年来的研究热点 也是模62616964757a686964616fe4b893e5b19e31333337373638式识别领域中最成功的应用之一 由于识别类型较少 在
  • 微信小程序:横向滚动卡片列表模板

    文章目录 1 前言 2 代码详解 3 样例展示 4 结语 1 前言 在开发微信小程序时 横向可滚动卡片列表是一个必不可缺的页面组件 其不仅美观还可以节省屏幕空间 具体截图如下 2 代码详解 主要用的是scroll x 具体代码如下 wxml
  • 开启win10下Ubuntu子系统的SSH服务 并设置为开机启动

    Win10中安装Ubuntu子系统后默认是没有开启SSH服务的 需要手动配置开启 1 先通过 bash 进入子系统修改配置 vi etc ssh sshd config 备注 输入i 表示键入 按键 ESC 外加 冒号 WQ 退出保存 如果
  • 笔记,后期整理

    VM 虚拟各种系统的工具 安装目录 不要放在C盘 需要下载的镜像Windows NT win7 xp server08R2 server12类Nnix centos 6 7 8 ubuntu 14 16 18 kali安装 win7 1g
  • Android TabLayout控件

    前言 TabLayout是5 0版本出现的控件 显示水平方向的tab页 需要添加Design依赖库 并且使用Theme AppCompat主题 1 TabLayout类 布局文件
  • 程序语言翻译器的设计与实现----算术表达式转换四元式(编译原理)

    此篇博客是将前面的内容进行整合并进一步提升 真正实现一个简单表达式语法的编译器 如果有不了解的地方请查看下面链接 词法分析 LR 1 分析 一 LR 1 分析 二 这里说的程序语言编译器是指将算术表达式部分进行翻译 暂时不包括优化以及目标语
  • Failed to execute /linuxrc. Attempting defaults... 解决方案

    今天想移植个根文件系统 使用的板子是友善之臂的S3C2440 这个很多书上都有介绍 难度倒也不是很大 按照手册一步步的来 移植完之后 烧写到flash里面 发现不能运行 怎么回事 检查了一遍 发现和教材上一样 难道教材有问题 在网上找了移植
  • MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]

    MarshalAs 指示如何在托管代码和非托管代码之间封送数据 简单点说 托管代码是一Microsoft的中间语言 它主要的作用是在 NET Farmework的CLR执行代码前去编译源代码 也就是说托管代码充当着翻译的作用 源代码在运行时
  • 初识网络原理

    目录 局域网 简称LAN 广域网 IP地址 端口号 协议 协议分层 互联网的分层 网络设备的分层 封装和分用 局域网 简称LAN 简单来说就是把两台或多台机器连接在一起 局部组建的一种私有网络 局域网内的主机之间能方便的进行网络通信 而局域