【JavaWeb】网络原理初识

2023-11-20

计算机网络的历史

计算机最初是为了打仗而来的,为了计算弹道导弹的轨迹。
计算机网络也是由于打仗而来的。是因为在冷战背景下,核威慑中如何才能用拥有足够的威慑力呢?后来想到了一个办法,就是二次核打击能力,二次核打击能力就是:是指在己方核武器 基地 遭到敌方打击后,仍能保存足够的 核 力量对敌方实施有效的核反击。那就需要一种通讯网络不怕核打击,在被核打击之后,通过网络通信进行发起二次核打击命令。
在上述背景下互联网就应运而生了。互联网很冗余,两点之间的路径有很多条,核打击不能全部打断网络连接的话,只要有一条路径还通畅,通信就还可以继续。
在上个世纪80年代左右,计算机还处于萌芽阶段,有些学校/研究所,已经尝试把计算机进行相连,可以进行简单的网络通信了。
后来大家发现民用更加有利,就衍生出了很多的互联网公司和产品,构建了咱们今天丰富的互联网世界。

局域网和广域网

计算机之间的网络连接连接后来就发展成为了局域网和广域网。

  • 局域网:把一些设备,通过交换机和路由器连接在一起。局域网要求这些设备不能距离太远。(同一个学校,同一个网吧,同一个公司……)
  • 广域网:范围更大的局域网,把更多的局域网连接到一起,把一个城市的电脑连接起来,再把城市和城市之间的网络也连接起来,越来越多,越来越大,从此就成了广域网了。

网络组件中的重要设备

  • 集线器:把一根网线,岔出来两根(很古老的东西了)
  • 交换机:组件局域网(不能跨局域网)
  • 路由器:本质上就是把两个局域网连接起来.(wifi本质上就是个无线路由器)。

使用交换机(或者路由器)对这些设备进行彼此相连
在这里插入图片描述
使用路由器和交换机进行连接主机

在这里插入图片描述

当然现在带有路由器功能(三层转发)功能的交换机也越来越常见,交换机和路由器之间的界限也越来越模糊。

我么家用的光猫就属于路由器,是由电口(插网线的),也有光口的(插光纤的)
网络通信信号传递:

  1. 电信号(网线)
  2. 光信号(光纤,电磁波)

上述两种都可以进行传递信息

  • 对于电信号,可以使用 低电平表示 1,高电平表示 0
  • 对于光信号,可以使用 高光频表示 1,低光频表示 0

网络通信基础

基本概念

  • IP地址:标识了网络上设备所在的位置。
  • 端口号:标识了一个具体的应用程序
  • 协议: 就是通讯双方进行的一种约定,发送方约好了我发的数据是啥样的。接收方按照这个固定的格式来进行解析。
  • 五元组:源IP 源端口 目的IP 目的端口 协议类型

协议是网络通信最最核心的概念。约定商量好数据是啥样的格式进行传输的。有了这个约定,才能让双方互相理解对方的含义。一个协议,可以很简单,也可以很复杂,像咱们日常说话,使用的”普通话“,“闽越话”, “川渝话”,也是属于协议的。
一次网络通信中最基础的是五元组。就类比于发一个快递有寄件人地址,寄件人姓名,收件人地址,收件人姓名,快递公司

在这里插入图片描述

协议分层

网络通信是一个比较复杂的事情,需求场景复杂了,实现功能也比较复杂。
如果这个协议太复杂了,学习成本,使用成本,理解成本,维护成本都会非常高。因此实际采用的做法,是针对这个复杂的大协议,拆分成若干个相对简单的小协议。
随着把一些小的协议(每个协议负责一部分功能),此时就发现,某些协议之间,起到的功能和作用是类似的……
就针对这些小协议,再进行分类(分层),这就好比代码拆分出很多类,有的类功能相同,就可以放到同一个包中。
当前咱们要学习的网络协议就是在 分层 大背景下进行展开

协议分层类似于打电话时,定义不同的层次的协议:
在这里插入图片描述
在打电话时候,人只需要会打电话和说话就够了,不需要进行了解电话机协议和手机协议。在改变某一层协议的时候只需要改变该层协议对其他层协议没有影响。

协议其实有很多好处:

  1. 降低了学习和维护成本
  2. 灵活针对这里某一协议进行替换。
  3. 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

OSI七层模型

在这里插入图片描述

TCP/IP五层(或四层)模型

TCP/IP 是 OSI 简化的实现方式。
在这里插入图片描述

  • 物理层:约定了网络通信中基础的硬件是张什么样子的。比如像通信使用的网线,网口等设备。因此,咱们使用网线网口都是相同发规格的。
  • 数据链路层:主要负责相邻的 两个结点 之间,具体是怎么进行传输的。
  • 网络层:负责任意两个结点之间的传输。主要负责规划路径,走那条路比较划算。
  • 传输层:只关心 起点 和 终点 ,这个过程,就是传输层做的工作,端到端 之间的传输。
  • 应用层:应用程序,描述了传输的数据,用户要怎么样来使用。

举个例子:
比如我要在淘宝上买件衣服,这个衣服要干什么,功能怎么样,用来自己穿,或者送人,又或者放在房间当饰品。这些都是应用层的职责。
买衣服要有收件人地址和收件人姓名,商家根据地址负责发快递,不关心传输的过程,只关心起点和终点。这些是传输层的职责。
买了衣服快递公司就要想从那条路径发,比如从 深圳 -> 石家庄,有很多路径选择:深圳 -> 武汉 -> 石家庄 ;深圳 -> 上海 -> 石家庄 …… 这个路线的选择就是网络层的职责。
比如选择了深圳 -> 上海 -> 石家庄,从深圳 -> 上海是飞机还是卡车?这个就是数据链路层的职责。
飞机飞行的航线,和卡车走的公路,就是物理层的职责了

越接近应用层就越接近用户,越接近物理层就越接近硬件设备

这五层协议各司其职,为什么还把这个叫做四层??

这个主要是因为物理层是属于纯硬件的,和程序员关系不大,所以有的资料就把TCP/IP模型中的物理层去掉了。

关于网络层和数据链路层的区别解析

在这里插入图片描述
节点:上述设备的统称 ,任何一个连入网络的交换机,路由器,电脑都可以称为”结点“。
相邻结点就是一根线连在一起的结点
网络层:考虑的是从电脑1 到电脑2 的路径规划
数据链路层:当数据到达目标电脑时,是通过网线传输,还是通过光纤传输,还是通过WiFi 无线传输……通过哪个网口出

  • 数据链路层和物理层是通过硬件和驱动程序来实现的。
  • 传输层和网络层是通过操作系统内核来进行操作的。(驱动程序和硬件设备是关联的。每个硬件厂商都会提供对应的驱动软件,操作系统内核通过驱动程序来控制硬件。)
  • 应用层是应用程序实现的(程序员自己写的代码相关的)。

所以咱们直接打交道的其实是应用层。下面四层,都是现成的。只需要知道怎么工作就行了。不需要你实现一个(但是经常涉及到,实现一个应用层协议……)。后面会继续重点解析的就是 应用层传输层

封装和分用

下面来解析一下网络传输的基本流程(站在分层的背景下来理解)
以qq为例,A给B发送一个 doge

发送方

  1. 应用层

用户在输入框中输入 doge ,qq这个应用程序,就把这个字符串,构造成了一个应用层数据报。
应用层数据报,具体的数据格式,咱们是不清楚的。每个应用程序都不一定一样,只有开发qq的这群程序员才知道。
一个假定的应用层协议的格式:
发送方qq;发送时间;接收方qq;消息内容
在这里插入图片描述
所谓的”应用层数据报“本质上就是一个遵守了约定格式的字符串。
程序要调用操作系统的API,把这个应用层数据,交给传输层

  1. 传输层

到了传输层就进入了操作系统内核,在传输层中,就要把上述应用层数据报,构造成传输层的数据报。传输层使用到的协议,最知名的就是 UDP 和 TCP。假设在此处用到的是UDP,就需要构造出UDP 数据报(在 应用层数据报 基础上,加个 UDP 报头)
在这里插入图片描述
为什么要加报头呢?类似于发快递要把物品套上包装(还不止一层)。一方面是防止物品脏了。另一方面也可以在包装上面贴标签,标签上可以写一些信息。这是快递传输中必要的内容。

报头是另一个特定格式的字符串(具体细节后面说–涉及到源端口和目的端口),此处就像所谓的字符串拼接一样,这个报头和后面的数据拼到一起。所谓的“报头”就是一个“标签”,通过标签表示出当前这个消息是怎样进行传输的。
传输层就把这这个 UDP 数据报 交给网络层

  1. 网络层

最知名是协议就是 IP协议,IP协议要基于上述数据,打包成一个 IP数据报。
在这里插入图片描述
IP报头也是相当于一个字符串,包含了一组信息(最核心的信息,源IP 和 目的IP)。
网络层数据报准备好,还需要进一步交给数据链路层

  1. 数据链路层

最知名的协议叫做 ”以太网“ 。基于上述数据报打包成一个”以太网数据帧报“

在这里插入图片描述

表示一个网络传输的数据的单位:
包(packet)
报(datagram)
帧(frame)
段(segment)
……
在此不做过多介绍

接下来这个数据继续向下传输,交给物理层。

  1. 物理层

把上述二进制的数据(一串 0101) 转化成 电信号 / 光信号,此时就真正的把数据给发送出去了。

上述过程,从应用层,到物理层,层层加码,这个过程称为”封装“(这个风封装不是面向对象的封装)

接收方

接收方的工作只考虑接收设备,省略中间经过各个结点的中间装啊过程。

  1. 物理层

网卡接收到的是 光信号 和 电信号。在物理层,把这个光电信号转化回二进制 数据,这个数据其实就是一个以太网数据帧。

  1. 数据链路层

把这个数据交给 数据链路层 解析。
在这里插入图片描述
数据链路层,需要去点帧头 帧尾,取出中间的载荷,交给上层的网络层。以太网数据帧的帧头里也会有记录,这个载荷是不是一个 IP数据报。

  1. 网络层

IP协议针对这里进行解析,解析出 IP 报头,取出 IP 协议的载荷,把这里得到的 传输层数据报 ,交给上层传输层
在这里插入图片描述
IP 报头里面会记录,载荷是 UDP 还是 TCP。

  1. 传输层

UDP 再进行解析,解析报头,取出载荷,再把这个载荷交给对方的应用程序。
在这里插入图片描述
UDP 报头里有一个重要的字段”目的端口“,目的端口是一个具体的应用程序,关联在一起的。因此就可以根据这个端口来把数据交给应用程序了。

  1. 应用层

就是qq应用程序。qq就会针对应用层协议也进行解析。显示到界面上。
在这里插入图片描述
上述,从下到上 层层解析,这个过程称为 ”分用“
对比快递就是:封装 – 包快递 。 分用 – 拆快递。

整个网路协议中,协议分成了很多层。上层协议要调用下层协议(下层协议把数据交给下层,继续封装)。下层协议要给上层协议提供支持(下层协议解析好数据,交给上层)。这里的几层协议之间是有明确的层级关系的。只有相邻的两层之间才能进行交互。(不能进行跨层交互)。上述的这些约束让通信过程变得简单,清晰起来了。

不能跨层交互 是 一个 让内容不混乱 的重要约束 。一个公司里面也有层级结构
在这里插入图片描述

如果基层员工可以直接能够向老板汇报工作,老板就忙不过来了。

三层转发和二层转发

在这里插入图片描述

  • 交换机在这里只是封装分用到数据链路层就可以完成后续转发(也叫做,二层转发)
  • 路由器在这里只封装分用到网络层,就能够完成后续的转发。

此处指的是”传统意义“ 的是一个路由器和交换机,也就是教科书里写的路由器和交换机。但是实际上,真实情况是不一样的。有些路由器/交换机是可以封装分用到应用层的。这些路由器/交换机网络设备都是运营商提供的。运营商有的时候要需要做些别的事情,就需要进行应用层级别的封装分用。
一个典型的例子:舆情分析。网民通过互联网传播一些言论,这个时候其实数据是啥时候发送到哪里的,通过运营商这样的设备都是可以检测到的。

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

【JavaWeb】网络原理初识 的相关文章

  • Centos下使用Clion,nginx的CMakeLists.txt,分3步配置。

    nginx的配置 configure with http ssl module with http v2 module Clion下的CMakeLists txt 1 将Nginx的代码全部加入CMakeLists txt cmake mi
  • 在silverlight中定制自己的MessageBox(消息框)

    在silverlight中 如果想使用 消息框 可使用下面的方法 即 HtmlPage Window Alert 消息框内容 如果想要显示更加复杂的内容或定义消息框样式的话 基本上没有什么好的方法 最近在网上看到了一篇文章 该文章的作者也谈
  • Oracle增删改以及事务

    select from dept 部门表 select from emp 员工表 create table newEmp as select from emp where 1 2 插入数据 1 to date 值 格式 函数 insert
  • C/C++内存泄漏与检测

    该死系统存在内存泄漏问题 项目中由于各方面因素 总是有人抱怨存在内存泄漏 系统长时间运行之后 可用内存越来越少 甚至导致了某些服务失败 内存泄漏是最难发现的常见错误之一 因为除非用完内存或调用malloc失败 否则都不会导致任何问题 实际上
  • 如何求自己数据的均值

    博主的技术交流群 722058911 问题背景 在分类网络中 往往需要突出前景 弱化背景 往往有一个操作是减去均值 解决办法 供参考 我是这么解决的 求自己数据集的均值和方差 def compute mean std your datase

随机推荐

  • c语言中atoi函数用法以及功能

    atoi函数是无意中看别人代码发现的我才疏学浅所以整理了一些关于atoi的知识点 atoi的头文件 include
  • 程序员解决问题的60个策略(转)

    英文原文 60 Problem Solving Strategies 程序员的生活就是解决一个又一个问题 永无止境 这篇文章介绍了一系列解决问题的策略 根本的指导方针 1 首先写代码的时候最好不要有缺陷 最好的修复方法就是让 bug 胎死腹
  • 【Tomcat】:One or more listeners failed to start.报错解决方案

    报错信息 One or more listeners failed to start Full details will be found in the appropriate container log file 具体就是web xml此
  • Java实现斗地主游戏中洗牌,发牌,牌顺序逻辑

    需求 在启动游戏房间时 应提前准备好54张牌完成洗牌 发牌 牌顺序逻辑 分析 1 当系统启动的同时需要准备好数据的时候 就可以用静态代码块了 2 洗牌就是打乱牌的顺序 3 定义三个玩家 依次发出51张牌 4 给玩家的牌进行排序 代码实现 C
  • LeetCode题目笔记——24. 两两交换链表中的节点

    文章目录 题目描述 题目链接 题目难度 中等 方法一 迭代 代码 C 代码 python 方法二 递归 代码 C 总结 题目描述 或许这也是个经典的面试题 记录一手 给你一个链表 两两交换其中相邻的节点 并返回交换后链表的头节点 你必须在不
  • FM33A048B调试特性

    调试特性 处理器支持以下调试特性 程序的暂停 恢复及单步执行 访 问内核寄存器和特殊寄存器 硬件断点 4 个 软件断点 不限数量的 BKPT 指令 数据监视点 1 个 动态非侵入式存储器访问 无需停止处理器 SWD 接口 Cortex M0
  • code-server c/c++/python语言环境配置

    0 前言 这篇主要配置python 非常简单非常粗暴 直接终端命令行操作 一 配置python 先看看容器里面有没有自带pythonx whereis python 如上图 说明有了 所以我这边不安装了 但是输入 python V 没有输出
  • Spring集成MyBatis

    将mybatis与spring进行整合 主要解决的问题就是讲SqlSessionFactory对象交由spring来管理 所以 该整合 只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在s
  • 基本定时器

    include stm32f4xx h LED灯初始化 void LED Init void GPIO InitTypeDef GPIO InitStructure RCC AHB1PeriphClockCmd RCC AHB1Periph
  • 基于朴素贝叶斯的图像分类

    朴素贝叶斯是一种极其简单的分类算法 通过概率统计到的方式进行判别 通过特征的联合概率分布P w1 w2 w3 wn C 进行建模 进而得到P C w1 w2 w3 wn 进而转换成一种监督分类的算法 贝叶斯公式 目标是根据特征得到属于某一类
  • c++ connect函数连接失败 解决方法

    bool Connect 初始化网络 WSADATA wsadata WSAStartup MAKEWORD 2 2 wsadata if 0 WSAStartup MAKEWORD 2 2 wsadata return false if
  • IntelliJ IDEA 插件(Java 插件)简介(一)

    IntelliJ IDEA 被认为是当前Java开发效率最快的 IDE 工具 它整合了开发过程中众多的实用功能 具有丰富的插件支持 能够极大地提高开发效率 一 Alibaba Java Coding Guidelines Alibaba J
  • 快速学习Python基础知识(3)

    一 输入输出 1 1 input输入函数的使用 input函数 是获取键盘输出 保存成一个字符串 注意 input 函数的返回值是一个字符串类型 即便你输入的是数字 返回的也会以一个字符串的形式返回给我们 inputStr input 提示
  • 电路的频率响应

    文章目录 Frequency response Impedence Transfer function The Decibel scale First order circuits Series RL and RC circuits Ser
  • 3. C++ 数据类型

    目录 1 七种基本的 C 数据类型 2 C 中的变量定义 3 C 中的变量声明 4 C 变量作用域 局部变量 全局变量 1 七种基本的 C 数据类型 各种变量类型在内存中存储值时需要占用的内存 以及该类型的变量所能存储的最大值和最小值 注意
  • @ControllerAdvice 和 @ExceptionHandler注解处理全局异常

    ControllerAdvice 和 ExceptionHandler注解处理全局异常 处理全局统一异常 处理service层抛出异常的方法 异常体系 处理全局统一异常 在构建RestFul接口的今天 我们一般会限定好返回数据的格式 有利于
  • Nmap使用方法

    文章目录 1 Nmap简介 2 Nmap使用方法 3 扫描技术 4 端口指定和扫描顺序 5 举例 5 1 简单扫描 nmap ip 5 2 全面扫描 nmap A ip 5 3 探测指定端口的开放状态 5 4 探测N个最有可能开放的端口 5
  • 升级SQLite数据库

    一 步骤 1 在之前的基础上添加一张Category表 在onCreate 方法中执行建CREATE CATEGORY表语句 2 然后在onUpgrade 中执行两条drop语句 发现数据库表存在 就将已经存在的表格删除 再在onCreat
  • CISSP一次通过指南(文末附福利)

    2017年12月19日 在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试 拖拉了一年 终于成绩还算令人满意 为攒人品将自己一年多的复习心得和大家分享 希望能够帮到需要考证的朋友 本文作者 i春秋签约作家 tinyfisher 欢迎与
  • 【JavaWeb】网络原理初识

    网络原理初识 计算机网络的历史 局域网和广域网 网络组件中的重要设备 网络通信基础 基本概念 协议分层 OSI七层模型 TCP IP五层 或四层 模型 封装和分用 发送方 接收方 三层转发和二层转发 计算机网络的历史 计算机最初是为了打仗而