【多线程】网络原理初识

网络原理初识

    • [1. 网络发展史](#1. 网络发展史)
      • [1.2 独立模式](#1.2 独立模式)
      • [1.3 网络互联](#1.3 网络互联)
      • [1.3 局域网](#1.3 局域网)
      • [1.4 广域网](#1.4 广域网)
    • [2. 网络通信基础](#2. 网络通信基础)
      • [2.1 IP地址](#2.1 IP地址)
      • [2.2 端口号](#2.2 端口号)
      • [2.3 认识协议](#2.3 认识协议)
      • [2.4 五元组](#2.4 五元组)
      • [2.5 协议分层](#2.5 协议分层)
        • [2.5.1 什么是协议分层](#2.5.1 什么是协议分层)
        • [2.5.2 协议分层的好处](#2.5.2 协议分层的好处)
        • [2.5.2 OSI七层模型](#2.5.2 OSI七层模型)
        • [2.5.3 TCP/IP五层模型](#2.5.3 TCP/IP五层模型)
      • [2.6 封装和分用](#2.6 封装和分用)
        • [2.6.1 封装](#2.6.1 封装)
          • [2.6.1.1 应用层拿到数据](#2.6.1.1 应用层拿到数据)
          • [2.6.1.2 传输层拿到上述数据](#2.6.1.2 传输层拿到上述数据)
          • [2.6.1.3 传输层交给网络层](#2.6.1.3 传输层交给网络层)
          • [2.6.1.4 网络层交给数据链路层](#2.6.1.4 网络层交给数据链路层)
          • [2.6.1.5 数据链路层把以太网包交给物理层](#2.6.1.5 数据链路层把以太网包交给物理层)
        • [2.6.2 分用](#2.6.2 分用)
          • [2.6.2.1 物理层接收数据](#2.6.2.1 物理层接收数据)
          • [2.6.2.2 物理层交给数据链路层](#2.6.2.2 物理层交给数据链路层)
          • [2.6.2.3 数据链路层交给网络层](#2.6.2.3 数据链路层交给网络层)
          • [2.6.2.4 网络层交给传输层](#2.6.2.4 网络层交给传输层)
          • [2.6.2.5 应用层解析](#2.6.2.5 应用层解析)
        • [2.6.3 整体](#2.6.3 整体)

1. 网络发展史

1.2 独立模式

独立模式:计算机之间相互独立

这个时候的计算机还不能够联网,当时的家用计算机可以用来打单机游戏或者是视频播放等功能。

1.3 网络互联

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。

网络互连:将多台计算机连接在一起,完成数据共享。

数据共享本质是网络数据传输 ,即计算机之间通过网络来传输数据,也称为网络通信

根据网络互连的规模不同,可以划分为局域网和广域网

1.3 局域网

(1)基于网线直连

将两个电脑通过一根网线进行连接,这就是构成了一个简单的局域网。

但是通过传输线互联连接起来,要保证每一个节点至少与其他节点相连。但其结构复杂,实现起来费用较高,不易管理和维护。因此我们也会使用交换机和路由器进行互联。

(2)基于交换机和路由器进行组建

1.4 广域网

广域网,即 Wide Area Network,简称WAN。

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。因此局域网规模足够大,就成了广域网。

2. 网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。

那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

2.1 IP地址

IP地址:标识了一个主机的具体位置。

IP地址是一个32位的二进制数。

格式

本质上是一个4个字节,32位的整数,往往写成"点分十进制"。

例如192.168.0.136

三个点把整个ip分成了四个部分,每个部分都是一个字节(取值范围0-255)

查询自己的IP

如果想要查看自己电脑的ip地址,可以通过win+r -> cmd -> ipconfig查看ip

特殊IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

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

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识

2.2 端口号

概念

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意事项

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

了解:

一个进程启动后,系统会随机分配一个端口(启动端口)程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。

进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。

问题:

有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串"你好!":如何标识发送的数据是文本类型,及文本的编码格式呢?

基于网络数据传输,需要使用协议来规定双方的数据格式

2.3 认识协议

概念

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议是什么?

协议就是约定,约定发送的数据格式。

使得双方能够互相进行通信。

协议(protocol)最终体现为在网络上传输的数据包的格式

2.4 五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机

  2. 源端口号:标识源主机中该次通信发送数据的进程

  3. 目的IP:标识目的主机

  4. 目的端口号:标识目的主机中该次通信接收数据的进程

  5. 协议号:标识发送进程和接收进程双方约定的数据格式

五元组在网络通信中的作用,类似于发送快递:

2.5 协议分层

对于网络协议来说,往往分成几个层次进行定义。

2.5.1 什么是协议分层

在网络通信中,需要约定的协议,其实是非常复杂的。

而面对复杂的环境,就需要复杂的协议。

但是协议太复杂也不好。

因为一个协议太复杂,就可以拆分成多个协议。协议是可以拆分出很多存在一些小的协议定位或者作用是类似的。

针对这些小的协议进行分类。同时再针对这些不同的类别进行分层。

调用关系

我们约定了层与层之间的调用关系。

要求上层协议调用下层协议,下层协议给上层提供支持,不能跨级调用。

例如

公司有一定的层级关系,这种层级关系是要求两个相邻的层级才能交互,不能够跨层交互。

2.5.2 协议分层的好处

  1. 分层之后就可以做到层与层之间,耦合程度比较低、上层协议不必了解下层的细节,下层也不必了解上层的细节。
  2. 方便对某一层的协议进行替换。能够更好的扩展和维护。

在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):

  • 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
  • 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

这样能更好的扩展和维护,如下图:

2.5.2 OSI七层模型

OSI七层网络模型既复杂又不实用,仅仅存在于教科书当中。

TCP/IP五层网络模型是当下最广泛使用的网络模型

2.5.3 TCP/IP五层模型

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

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

  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  • 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
  • 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层

上面的定义可能有些复杂繁琐,我们可以进行简化

  • 应用层,主要关注传输过来的数据,要怎么使用
  • 传输层,不考虑中间路径,只关注起点和重点。就像,我和淘宝卖家,都不关心中间是怎么传输的,只关心起点和重点,中间怎么传输都可以。
  • 网络层,主要负责两个遥远的节点之间,路径规划。收货地址西安,发货地址是上海,上海到西安中间有很多条路径可以走,在众多路径中找到一个合适的(上海直达西安,上海->南京->西安,上海->苏州->西安)。
  • 数据链路层,主要关注的是两个相邻节点之间的传输。上海->南京(火车),南京->西安(卡车),网络上相邻节点,就是通过网线/光纤/无线直接连接的设备。
  • 物理层,主要定义物理设备的标准。网络通信的基础设施有网线,光纤,网络接口...可以认为是网络上的高速公路。

物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。

应用层,对应程序员写的应用程序,下面四层,则是操作系统内部已经封装好的。

因此写代码,进行网络编程,主要工作还是围绕应用层进行展开。

传输层要被应用层进行调用,所以也要对传输层有一定的理解。

2.6 封装和分用

封装:发送方发送数据,要把数据从上到下,依次交给对应的层次的协议,进行封装。

解析:接收方收到的数据,要把数据从下到上,依次交给对应的层次的协议,进行解析。解析过程就叫做分用。

我们举一个例子进行过程的解析。

2.6.1 封装

首先假设在通信应用程序,进行聊天的环境下。

2.6.1.1 应用层拿到数据

我发送"在吗?"给对方

qq会拿到上述用户数据进行封装,封装成应用层数据包。

  1. 这里的应用层数据包格式,只是假设的,qq实际的应用层数据包,是qq开发者自己规定的。
  2. 这里的数据包,本质上就是字符串的拼接
  3. 为了区分上述字段,可能引入分隔符等进行界定,就像 发送方断桥烟雨;接收方刘cc;时间20230813;消息内容在吗;
2.6.1.2 传输层拿到上述数据

传输层有很多协议,最典型的是TCP和UDP。

此处以UDP为例

UDP针对上述数据包再进行封装。

  1. 此处,UDP协议再给应用层数据报整个作为载荷并且再加个UDP报头,就是为了填写必要的属性

  2. 传输层协议最关键的属性是源端口和目的端口

  3. 数据报本质上是字符串拼接

2.6.1.3 传输层交给网络层

UDP协议进行封装后,将这个数据报交给网络层的协议

网络层最常见的协议就是IP协议

上述UDP数据报到达网络层,需要进一步的封装,添加IP协议报头

源IP和目的IP就是描述了这次传输中,最初的起点和最终的终点

IP和端口

IP是找到主机,端口是确定主机上的哪个程序/进程

我的电脑有一个IP

但是电脑上有很多的程序有着不同的端口号

2.6.1.4 网络层交给数据链路层

数据链路层的协议是以太网协议

以太网协议对网络层的协议进行封装

mac地址,也叫做物理地址

也是描述一个主机在网络上的位置

它的功能和IP很相似,但是当下就把这两个地址分别作用于不同的用途。

IP用来进行网络层的路径规划

mac用来进行描述数据链路层,两个进行传输的相邻节点。

mac是和网卡进行绑定的。每个网卡的mac是为一个

2.6.1.5 数据链路层把以太网包交给物理层

物理层要把上述的0101的二进制数据转换成光信号/电信号/电磁波信号,进行传输。

2.6.2 分用

接收方进行解析数据。

接受过程和封装过程刚好相反。

发送,从上到下,依次封装,新增报头

接收,从下到上,依次分用,去掉报头

忽略中间的转发过程,只考虑对方的电脑收到这个消息的情况。

2.6.2.1 物理层接收数据

物理层会收到高低电平的二进制数据。

会对这里的信号进行解析,还原成0101这样的二进制序列。

2.6.2.2 物理层交给数据链路层

此时把接收到的二进制数据当成一个以太网数据帧(此处是从以太网线收到的数据,就是要交给以太网协议来进行处理)

以太网协议进行解析,把以太网帧头和帧尾去掉,取出中间的载荷,再往上交给网络层。

2.6.2.3 数据链路层交给网络层

此时就由网络层的IP协议进行解析数据报,也就是去掉IP报头。取出载荷,交给传输层协议。

2.6.2.4 网络层交给传输层

传输层由UDP协议进行解析处理,还是去掉报头,取出载荷,把数据交给应用层

2.6.2.5 应用层解析

由应用程序对应用层数据报进行解析,放到程序的界面

2.6.3 整体

发送方是进行层层封装

接收方是进行层层分用

真实的网络环境中,数据的传输中间可能要经历很多节点进行转发。

交换机只需要封装分用到数据链路层(只需要改源mac和目的mac)

路由器需要封装分用到网络层(更改mac地址,以及根据目的IP进行下一阶段的路径规划)

通常也说,交换机是进行"二层转发",路由器进行"三层转发"。

我们这里说的是教科书上的"经典"交换机路由器(教科书和考试上的标准)

实际上,真实的路由器和交换机之间的界限越来越小

路由器可以通过设定特殊模式只进行二层转发

交换机也有高端交换机,支持三层转发

甚至路由器/交换机还可以封装分用到传输层甚至应用层

路由器/交换机封装分用到传输层应用层的一个应用场景就是进行舆情分析。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
feifeigo1235 天前
matlab画图工具
开发语言·matlab