【JavaWeb】网络原理初识

网络原理初识

  • 计算机网络的历史
    • 局域网和广域网
    • 网络组件中的重要设备
  • 网络通信基础
    • 基本概念
    • 协议分层
    • OSI七层模型
    • TCP/IP五层(或四层)模型
    • 封装和分用
      • 发送方
      • 接收方
    • 三层转发和二层转发

计算机网络的历史

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

局域网和广域网

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

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

网络组件中的重要设备

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

使用交换机(或者路由器)对这些设备进行彼此相连
【JavaWeb】网络原理初识_第1张图片
使用路由器和交换机进行连接主机

【JavaWeb】网络原理初识_第2张图片

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

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

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

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

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

网络通信基础

基本概念

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

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

【JavaWeb】网络原理初识_第3张图片

协议分层

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

协议分层类似于打电话时,定义不同的层次的协议:
【JavaWeb】网络原理初识_第4张图片
在打电话时候,人只需要会打电话和说话就够了,不需要进行了解电话机协议和手机协议。在改变某一层协议的时候只需要改变该层协议对其他层协议没有影响。

协议其实有很多好处:

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

OSI七层模型

【JavaWeb】网络原理初识_第5张图片

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

TCP/IP 是 OSI 简化的实现方式。
【JavaWeb】网络原理初识_第6张图片

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

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

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

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

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

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

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

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

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

封装和分用

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

发送方

  1. 应用层

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

  1. 传输层

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

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

  1. 网络层

最知名是协议就是 IP协议,IP协议要基于上述数据,打包成一个 IP数据报。
【JavaWeb】网络原理初识_第10张图片
IP报头也是相当于一个字符串,包含了一组信息(最核心的信息,源IP 和 目的IP)。
网络层数据报准备好,还需要进一步交给数据链路层

  1. 数据链路层

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

【JavaWeb】网络原理初识_第11张图片

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

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

  1. 物理层

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

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

接收方

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

  1. 物理层

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

  1. 数据链路层

把这个数据交给 数据链路层 解析。
【JavaWeb】网络原理初识_第12张图片
数据链路层,需要去点帧头 帧尾,取出中间的载荷,交给上层的网络层。以太网数据帧的帧头里也会有记录,这个载荷是不是一个 IP数据报。

  1. 网络层

IP协议针对这里进行解析,解析出 IP 报头,取出 IP 协议的载荷,把这里得到的 传输层数据报 ,交给上层传输层
【JavaWeb】网络原理初识_第13张图片
IP 报头里面会记录,载荷是 UDP 还是 TCP。

  1. 传输层

UDP 再进行解析,解析报头,取出载荷,再把这个载荷交给对方的应用程序。
【JavaWeb】网络原理初识_第14张图片
UDP 报头里有一个重要的字段”目的端口“,目的端口是一个具体的应用程序,关联在一起的。因此就可以根据这个端口来把数据交给应用程序了。

  1. 应用层

就是qq应用程序。qq就会针对应用层协议也进行解析。显示到界面上。
【JavaWeb】网络原理初识_第15张图片
上述,从下到上 层层解析,这个过程称为 ”分用“
对比快递就是:封装 – 包快递 。 分用 – 拆快递。

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

不能跨层交互 是 一个 让内容不混乱 的重要约束 。一个公司里面也有层级结构
【JavaWeb】网络原理初识_第16张图片

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

三层转发和二层转发

【JavaWeb】网络原理初识_第17张图片

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

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

你可能感兴趣的:(JavaWeb,网络,网络协议)