网络原理初识

目录

一、网络互连

1、局域网

2、广域网

二、网络通信基础

1、IP地址

2、端口号

三、理解网络中的重要概念

1、认识协议(最核心的概念---协议)

2、协议分层

3、OSI七层模型

4、TCP / IP 五层网络模型

5、数据报

6、封装和分用 

(1)封装

(2)分用


  前言:

        计算机源起时,就注定会对我们后续的生活带来巨大的改变。现如今,计算机的迅速普及,已被应用各种各样的领域,对我们的社会和生活带来了不可估量的影响。其应用范围上到办公室、工厂、实验室等,下到个人家庭,而且随着时代迅速发展,我们的计算机和计算机间已具备联网功能,可以实现远程通讯。

一、网络互连

独立模式 -> 网络互连模式

        随着时代的发展,刚开始的计算机是以独立模式(单机模式)被广泛使用的,后来越来越需要计算机之间的互相通讯,共享数据和操控,人们已经不再局限于该模式了。于是将多个计算机连接起来,形成一个计算机网络。通过多台计算机协同可以实现信息共享和信息传输。

网络互连将多台计算机连接在一起,来完成数据共享。(数据共享的本质是 网络数据传输,即计算机之间通过网络进行的数据传输,即网络通信)。

计算机网络根据其规模可分为 WAN(广域网 --- Wide Area Network),LAN(局域网 --- Local Area Network)。

1、局域网

局域网,即 Local Area Network,简称 LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。

局域网内的主机和主机之间可以进行网络通信进行数据传输,局域网又可称为 “ 内网 ”。但 局域网和局域网在没有连接的情况下,是无法进行网路通信的。

局域网组建网络的方式有很多种:

1) 基于网线直连:

网络原理初识_第1张图片

2)基于交换机组建

交换机 --- 用来把多个主机组建到同一个局域网内

交换机只有一类端口:LAN

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

借助交换机,可以让多个机器与交换机相连后,从而可以与其他机器进行通信。

任意两个主机可以借助交换机来进行数据交换,这些主机之间就构成了局域网,有了交换机的存在,布线的成本就大大降低了,每个主机只需一个网口即可。

为了连接更多的主机,也可以让交换机连交换机,从而让这些主机都在一个局域网内。

3)基于交换机和路由器直连

路由器 --- 可以把多个局域网连在一起

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

 路由器相比于交换机,有两类端口 WAN口 和 LAN口。其插在路由器 LAN上的设备,表示在同一局域网内,而 WAN口连接外网(连接运营商提供的光猫/宽带网线等设备的)。

 

4)基于集线器直连

  集线器的功能非常有限,现在组网的时候已经很少能看到集线器了。

  相比于交换机,任意主机之间的相连是互不干扰的。

  而A和B两个主机之间如果通过集线器进行通信的时候,A或B没法和C或其他的主机进行通信,集线器中主机之间的通信通道是独占通道。

2、广域网

广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网

在交换机和路由器反复的连接下,可以把多个设备都连接到一起,使它们之间能够直接进行通信.当机器足够多时,就可以称为“广域网”。

广域网和局域网之间没有明确的界限,不是说机器数量多到什么时候构成“广域网”,也不是说少到什么程度构成局域网。一般认为连接到一起的设备比较少构成一个“局域网”,设备比较多构成“广域网”。

如果有多个海外分公司,它们以专线方式连接起来,其构成了规模比较大的网络,即形成了 “广域网”。

如果是属于全球化的公共型广域网,则称为 互联网(又称公网、外网),其属于广域网的子集。有时在不严格的情况下说的广域网,其实指的是互联网。

有些情况下有可以把“广域网”认为是一个比较大的“局域网”。

全世界最大的广域网 是 Inernet(因特网)。


二、网络通信基础

前面说到的网络互连,就是为了实现多台设备之间的网络通信和数据共享,也就是网络数据的传输,更具体一点是,网络主机中不同进程之间,基于网络传输数据。

但,在组建网络的时候,想要数据从哪个主机传输到目标主机,没有一个具体的标识是无法进行传输的,因此就需要使用到 IP地址来标识。

1、IP地址

1)什么是 IP地址?

所谓的 IP地址,就是连接到网络中所有主机中识别出进行通信的目标地址。因此通信中的所有主机设备都有自己的一个 IP地址。

其主要用来定位主机的网络地址。

可以将IP地址,想象成我们平常在网上购物一样,需要有收件人的地址,商品才可以由快递员送到我们的地址。

2)IP地址的格式

IP地址是一个32位(4个字节)的整数(可表示的IP地址有42亿9千万),通常被分割成 4个8位2进制数。例如:01100100.00000110.00101000.00000001

而因为32位的整数比较难以查看或记忆,因此发明了一种表示方式:点分十进制 ,通过三个点 将32 位的整数分成 4个部分,每个部分8位(1个字节)取值范围为:0 ~ 255 的十进制,即为:100.6.40.1。

网络原理初识_第4张图片


2、端口号

除了通过 IP地址来识别找到数据传输的目标主机外,还需要有一个可以识别主机中发送、接收数据的进程。

①端口号用于定位 主机中的进程,也就是我们可以通过端口号来找到对应主机里的应用程序。

类似我们寄/收快递时,除了填写寄件人/收件人地址(IP地址)外,还需填写对应的收件人或寄件人(端口号)

②端口号的格式:

        端口号是一个 2个字节(16位)的无符号整数(范围是 0 ~ 65535)。

③注意事项:        

  • 进程需要通过绑定一个端口号,来发送和接收网络上传输的数据。服务器启动的时候,用户(客户端)对服务器进行访问的时候,才能准确的找到对应的程序进行访问。
  • 两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。可以想象成一个人可以很多张电话卡,但一张电话卡没法多个人使用。
  • 一个进程启动后,系统会自动的分配一个端口号(启动端口)。一般来说1024以下的端口号都是系统保留的(为知名端口号,这些端口号是预留给服务器程序绑定使用的应用层协议)。 因此,我们在自己手动分配端口号的时候,尽量使用1024 ~ 65535范围的端口号。【当然,1024 ~65535范围内的端口号,也可能有服务器绑定的知名端口号 】
  • 常见端口号:例如 MySQL的端口号为 3306

三、理解网络中的重要概念

1、认识协议(最核心的概念---协议)

”协议“这个概念非常重要,毫不夸张的说,其贯穿了整个网络通信的体系,也可以说主机之间之所以有可以通过网络进行通讯,是全靠了  “ 协议 ”。

” 协议 “可以理解成 ” 约定 “,通过约定表达一定的含义,类似 ”暗号“。协议就是通信双方通讯时进行的一个约定。

        比如:面基网友的时候,网友A和网友B彼此之间协商以什么提前的约定来作为标识,网友A穿大R图案的黑色T恤,网友B穿蓝色牛仔裤,那么他们就可以根据彼此的约定来寻找对方。这一种约定,也可也称为 协议。

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则

如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议通常由三要素组成:

1. 语法:即数据与控制信息的结构或格式;

类似打电话时,双方要使用同样的语言:普通话

2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;

语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!

3. 时序,即事件实现顺序的详细说明。

时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。


网络上传输的数据,本质上是 光信号(光纤/无线网络/电磁波...)【光就是电磁波,无线网络是基于电磁波来通信的。】 / 电信号,通过电信号和光信号就可以传输二进制数据了。而要想传递不同的信息,就需要约定好双方的数据格式。

光信号、电信号是怎么传输二进制数据的?        

        光信号涉及到光的频率,通过频率进行编码,高频当成1,低频当成0,传输的时候通过传输不同频率的光信号,表示1010类似的二进制数据。

而电信号通过电平来传输,例如高电平1,低电平0,通过高低电平信号也可以传输二进制数据

        不同的0和1之间的排列组合表达什么意思,就需要通过“协议”来约定。

2、协议分层

  ①为什么需要协议分层?

        网络通信是一个非常复杂的过程,其中有许多要处理的问题和细节。如果只使用一个“协议”来解决所有的问题,那么该协议任务量会很大,协议也会变得很复杂。因此可以通过把一个 “ 协议 ” 进行拆分成多个协议来解决该问题。拆分后的协议分别处理一部分问题,从而提高效率

        拆分的时候,有些拆出来的“协议”解决的问题差不多,定位是类似的,只是解决问题的手段不太一样,因此程序猿就把这些“协议”分成很多类,该过程也称为为 “ 协议分层 ” ,每一层有很多个协议,这些“协议”干的活差不多。

我们当前看到的网络结构,是协议分层后的产物。

②什么是协议分层?

协议分层类似于打电话,以下述的打电话为例:

(1)语言层看成上层协议,通信设备层看成下层协议。语言层的人通过汉语进行交流,无需关注理解电话的工作原理或具体实现,这就导致使用电话的成本很低。相反,开发电话机的人无需关注语言层交流的语言是什么,即使开发电话机的人是外国人也无需懂得说汉语,只需懂通信原理即可。这就让这两个协议分层之间构成了一个很好的封装

(2)把通信设备层的电话协议替换成无线电协议,对于使用人来说是没有感知的,他们之间使用什么语言进行交流,就还使用什么语言进行交流,下层协议的替换对上层协议没有影响,这就称之为透明的。 即使是语言层的汉语协议改成英语协议交流,对于下层协议来说,也是没有影响的,对于电话机来说也只是将声音进行传输,交流使用什么语言它并不关心。

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

③协议分层的作用

  1. 下层协议给上层协议进行服务,上层调用下层协议。(提供了一种 “ 封装 ” 的服务) 此处的封装与Java中面向对象的封装本质相同。-------实现上层协议的不必考虑下层协议里的细节,只需直接调用的方法即可
  2. 解耦合,可以把同一层的协议替换成其他协议,对于其他层次的协议来说,基本是察觉不出,无感知的,透明的(理解:底层协议变了,对于上层协议没有影响,上层协议依旧一样 。上层协议变了,对于底层协议来说也没有影响)。

像上述的打电话为例,其中的分层很好的体现了其 封装解耦合 的优点。


3、OSI七层模型

OSI :即 开放系统互连(Open System Interconnection)。

该模型 是一个逻辑上的定义和规范,主要是用来帮助不同类型的主机实现数据的传输。其优点是将服务、接口、协议三个概念明确地区分开来,通过七个层次化的结构模型使不同的网络之间实现可靠的通讯。

网络原理初识_第6张图片

OSI七层模型由上到下,越往下越偏向硬件方面,越往上越偏向软件方面。实际组建网路的时候,只是以 OSI七层模型设计的部分分层,也即是 TCP/IP 五层模型来实现。


4、TCP / IP 五层网络模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

网络原理初识_第7张图片

其中传输层、网络层、数据链路层和物理层是一样的

应用层、表示层和会话层统称为应用层(针对用户态)

OSI参考模型中的有各自的叫法,但其实都是同一个东西,例如:OSI参考模型中的网络层和TCP/IP分层模型中的互联网层就是一样的。

4.1 TCP / IP 五层模型的结构:

  • 物理层:属于网络通信的基础设施。
  • 数据链路层:解决两个相邻节点之间是如何传输的
  • 网络层:负责两个点之间的路径规划
  • 传输层:考虑两个点之间的通讯,不考虑两个点之间的路径规划
  • 应用层:属于数据传输过去后具体怎么使用。

以在网上买东西为例:

网络原理初识_第8张图片

萨日朗在淘宝买了一个西瓜,下单后,卖家就把货通过快递发给萨日朗。

卖家在发货的时候,只考虑发件人(起点)和收件人(终点)。

(1)运快递的公路 想象成网络通信的基础设施 ----- 物理层

(2)卖家发货只考虑发件人(起点)和收件人(终点),不考虑路上的快递是如何运输的----- 传输层(不考虑路径规划)

(3)把货交到物流公司,物流公司需要规划从哪条路线派送快递比较好------- 网络层

(4)货在两个仓库(集散点)之间的传输 ------ 数据链路层

(5)货拿到萨日朗手上要怎么使用,是萨日朗自己的事情 ------- 应用层

4.2  网络设备对应的分层:

  • 物理层和数据链路层对应的是 驱动硬件
  • 传输层和网络层,由操作系统内核实现的。
  • 应用层、表示层和会话层应用程序实现(用户态)

而统称的应用层是由程序员来实现的。 换句话说,只有应用层是程序员自己写代码处理的,以下的四层都是由操作系统和硬件设备来处理好的。

网络编程的主要工作就是写应用层的代码,来处理应用层的协议数据。

4.3 理解网络层和数据链路层

1、路径规划

以上面的送货过程,从一个地方到另外一个地方有很多条路线。考虑走哪条路线,是网络层处理的(宏观)

2、传输方式

确定好路线,从一个地方到另外地方是要坐高铁,坐飞机还是坐大巴。具体要怎么走是数据链路层要考虑的事情。两个相邻节点之间要怎么走是数据链路层要考虑的事情(微观)

4.4 交换机 和 路由器

交换机其工作在 数据链路层

路由器其工作在 网络层

交换机和路由器工作在哪一个协议分层,是面试中也会考的。

当下 交换机 和 路由器的功能越来越强大,彼此之间有许多功能也相互重叠,也就是彼此之间存在相同的功能。

比如: 三层交换机(带有路由器的功能) 、 路由器的桥接模式(相当于交换机)。

交换机和路由器之间的定位越来越模糊,而且这些设备也有一些传输层,甚至应用层的功能。


5、数据报

数据报是通过网络传输的数据的基本单元;

其包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。数据报是完备的、独立的数据实体,该实体携带要从源计算机传递到目的计算机的信息,该信息不依赖以前在源计算机和目的计算机以及传输网络间交换。


6、封装和分用 

不同协议层对数据包有不同的称谓:

  • 传输层中称为 : 段(segment)
  • 网络层中称为: 数据报(datagram)
  • 数据链路层称为: 帧(frame)

封装 和 分用 描述了网络上是如何传输数据的。

封装:协议分层后每一层的数据 通过协议栈发到下一层协议层,每一层协议都要加 上一个数据首部(header),其首部包含一些重要信息(首部长度、载荷payload 长度、源地址、目的地址之类的)。

此处的的 封装 的和 面向对象中继承多态的封装 效果上是类似,但是所指的含义不同 ,不要与其混淆,注意进行区分。


(1) 封装

封装的过程

以使用QQ发送消息为例:

用户A 向 用户B发送一条信息,用户A通过键盘输入想要发送的信息(你好)。

 1. 应用层(QQ程序)

根据用户A输入的内容数据,整理成应用层数据报(相当于类似“字符串拼接”的方式,构成更完整的,信息更多的数据,再传输) ,假设该应用层数据报结构为:

网络原理初识_第9张图片

接下来应用层协议就调用操作系统中的socket API,将这个应用层数据报交给传输层(进入到操作系统内核) 

2. 传输层

传输层会根据当前使用的传输层协议,给应用层数据报进行进一步的组装。

例如:此处以的UDP协议(传输层的协议)为例,将刚刚的应用层数据报装到UDP数据报内。(传输层中常见的协议有 UDP 和 TCP)

网络原理初识_第10张图片

 之后就将这个UDP数据报交给网络层。

3.网络层

网络层主要使用的是IP协议,其对UDP数据报再进行进一步的组装。

对其数据报 加上报头(本质上是 “ 字符串拼接 ”

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

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

4. 数据链路层

数据链路层,使用的是以太网协议,对其数据报再进行进一步的组装。构成了一个以太网数据帧,之后再把这个数据交给物理层。

网络原理初识_第12张图片

5. 物理层

数据到达物理层,其拿到数据之后,把这里的这些以太网数据帧的 二进制序列转换为 光信号 / 电信号。

上面的数据报本质上就是二进制序列,由0和1构成的整体格式,把这些0和1转换为光信号或电信号,变成一些高低电平或高低频率的电磁波,再通过光纤或无线的方式对光电信号进行传输。

上述的过程就是发送的时候,把当前的数据从我们的主机发送出去的过程。从上到下一次添加报头的过程,就称为 “封装”。

此处的封装操作,每一层都会进行。这一过程类似派送一个快递时,会将物品套上很多层包装(塑料袋 ->泡沫盒子 -> 纸壳 ->黑色快递袋),再进行派送。

实际上发出去的是上面那一串很长数据报的二进制序列。

以上的过程结束,代表要发送的数据已经离开主机A,发往另外的设备,当然用户A和用户B的主机很小概率是网络直连的,数据的传输过程中,还需经过多个路由器和交换机之间的转发,才最终到达用户B的主机,这中间的内容此章节暂不介绍。


(2)分用

省略中间的传输过程,当主机B收到主机A发送的上述数据时,其就是封装的 “ 逆过程 ”,称为 ” 分用 “。每一层协议把对应的报头给解析出来,并且去掉报头。

其接收过程:

1、物理层(硬件设备),主机B把收到的光电信号转换为二进制数据,得到以太网数据帧,再将其交给数据链路层。

2、数据链路层(驱动),数据链路层会对该传输过来的数据进行解析,去掉帧头和帧尾,把载荷部分取出来并交给网络层

网络原理初识_第13张图片

3、网络层,IP协议解析出IP报头,之后去掉报头,将载荷部分取出来交给传输层。

网络原理初识_第14张图片

4、传输层(操作系统内核),把UDP协议解析出UDP报头,然后去掉报头,把载荷部分取出来交给应用层。

网络原理初识_第15张图片

5、应用层,调用操作系统内核的socket api读取数据报 并按照应用层协议进行解析(qq这个程序解析这个信息),然后再把解析后的信息显示到用户B主机的窗口。

以上就完成了数据的解析过程。说到底“分用”就是“封装”的逆过程。

上述过程也体现出了网络通信过程中,各个层次的协议是如何配合工作的。

封装和分用不仅仅会出现在主机上,也出现在传输过程中,包括交换机和路由器上。(此处对交换机和路由器上的封装和分用不做介绍)

网络原理初识_第16张图片

其中 路由器是封装、分用到 网络层;

交换机是封装、分用到 数据链路层。


 本节的内容到这里就结束了,该文章也为我自己的学习笔记,如果其中有哪些部分有误,还希望大佬们能指点一二,共同进步!

你可能感兴趣的:(JavaEE,网络)