【Linux网络】网络基础(TCP/IP协议栈、局域网通信原理、封装与解包、有效载荷分用)

news2025/1/25 8:58:07

文章目录

    • 1、认识网络
      • 1.1 重新看待计算机结构
      • 1.2 网络的问题
      • 1.3 初识网络协议
      • 1.4 TCP/IP五层结构
    • 2、网络与操作系统
      • 2.1 网络和OS的关系
      • 2.2 局域网(以太网)通信原理和MAC地址
      • 2.3 主机的跨网络
      • 2.4 有效载荷的分用

1、认识网络

在早年计算机之间是相互独立的,但后面难免会出现需要多台计算机之间进行协作的问题。

有人尝试通过用线路将计算机彼此连接起来,这就形成了最初的网络。

1.1 重新看待计算机结构

在之前介绍冯诺依曼体系时,说过外设的数据IO,只能先通过内存进行缓存,再传给CPU计算或是由CPU计算完成传给内存。

那么硬件和硬件间的数据是怎么进行传输的呢?

单个主机,不同硬件之间,是通过"线"来连接进行数据传输(光电信号)的,但这个“ 线 ”比较短。

整个计算机体系结构就可以看作一个小型的网络。
在这里插入图片描述

而多主机之间通过体系结构的延展,通过网卡用网线连接起来,这种多主机之间连接通信本质也是通过"线"连接起来,只不过“ 线 ”变长了。

而在一些大的公司会有自己的一些集群所构成的大型互联网平台,每个集群里面有很多的服务器,彼此通过网络连接。
存储集群的数据会传输到缓存集群,处在缓存集群的数据再经过计算集群进行计算,返回给缓存集群。
这些集群在整体上看,就是一个宏观的冯诺依曼体系结构。
这样回看,体系结构可以构造网络,网络也可以构成体系结构,其实它们两个是不分的。
在这里插入图片描述

1.2 网络的问题

通过前面也能更好理解一些东西。

在单个机器内," 线 "比较短,因此数据传输方便,也比较快,但是其存在一些信号干扰问题。

在多个机器间,“ 线 ”就比较长了, 因此就会出现以下问题:

  1. 如何寻找到对方?
  2. 距离一长就会有信号衰减,效率问题怎么解决?
  3. 可靠性问题

网络知识的本质就是为了解决这些问题。


随着发展,接入网络的主机越来越多了,就有了以下概念。

局域网:可以理解成多台主机连接,并且没有路由器
在局域网内的主机可以直接通信,而因为线长了,就需要一些办法来确保如数据可靠性、数据衰减等问题,这就出现了交换机和路由器。
路由器简单来说就是为了连接不同的网络。
在这里插入图片描述

广域网:广域网由多个局域网构成,涉及多个路由器与接入公网。(详细的后面再谈)

局域网和广域网是相对的概念,比如小到一间宿舍可以看做一个局域网,大到一个学校,也可以看成一个局域网。


1.3 初识网络协议

网络是由各自通信协议以及硬件设备组成的。

计算机之间的传输媒介是通过光信号和电信号,通过频率和强弱来表示0、1这样的概念的,要想传递彼此的信息,就必须约定好数据的格式。

协议是一种约定,通信双方做好这个约定,就能正常的进行工作。

那么只要通信的两台主机,约定好协议就可以了吗?

首先,计算机的生产厂商是很多的,不同的厂商生产的操作系统很多,就算操作系统一样,硬件上也是有很多不同的。

大家可以遵守这个协议,但是其可能因为软硬件上的不同,导致在对待协议时以同样的方式去解释,但是对面听不懂!(比如大家都是由0,1来进行二进制传输的,但有些人是通过光频率来表示,有些是通过电信号强弱来表示的,彼此不能读懂对方表示的意思。)

所以在硬件和软件上也得有对应的标准!
(商业、资本、法律也促使着标准的形成)


协议分层

什么是分层?

在之前见过很多软件的分层。
比如:
1、一个main函数在调用一个函数,main函数只要关注这个函数的功能,不需要在乎这个函数是如何实现的,并且一但main函数中出问题,不会影响这个函数。
2、虚拟地址空间也是一种分层,也是为了应对各种没有之前的问题而在软件上加一层解决的。

那么分层有什么好处呢?

  1. 软件分层的同时,也把问题进行分类了。
  2. 分层的本质是在软件上进行解耦,不关注彼此具体实现。
  3. 便于工程师进行软件维护。

在网络上,比如两个人视频聊天,在语言层有着汉语协议,并且都认为彼此在直接和对方进行通信的。但实际上,在通信设备层,有着很多的设备通过同一协议在处理,但是语言层的人不关心它们怎么处理。

因此,层状结构下的网络协议,我们认为,同层协议下,都可以认为自己在和对方直接通信,忽略底层细节,并且每层都有自己的协议。


1.4 TCP/IP五层结构

不过在介绍它之前,先了解一下OSI(Open System Interconnection,开放系统互连)七层网络模型
在这里插入图片描述

OSI七层网络模型很清楚也很规范,但是其因为复杂并且难以实现在底层实现(5,6,7层设计想法需要软件层上的支持),因此最后被简化成了TCP/IP五层结构。

其中
表示层的工作就是网络标准数据格式的转换。
会话层为了通信管理,负责建立和断开连接。负责管理传输层以下的分层。

这是一个参考模型,是一个逻辑上的定义和规范,也意味着不是严格要遵守的。


TCP/IP五层结构
在这里插入图片描述

  • 物理层:负责光/电信号的传递方式。比如现在以太网(局域网的一种标准)通用的网线(双绞线)、光纤,现在wifi使用的电磁波都属于物理层概念。物理层的能力决定了最大的传输速率、传输距离、抗干扰性等。(其中有一个集线器是为了应对数据衰减、信号放大的)
  • 数据链路层:负责设备之间的数据帧传输、完成帧同步、差错控制、流量管理、链路管理。(数据都是二进制数据,但不同层有不同的名称)
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来表示一台主机。路由器就工作在这一层。(数据报)
  • 传输层:负责两台主机之间的数据传输。(如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机)(段)
  • 应用层:负责应用程序间的沟通。(后续网络编程就是针对应用层)

一般而言:
对于一台主机,它的操作系统内核实现了从传输层到网络层的内容。
对于一台路由器,它实现了从网络层到物理层。
对于集线器,它只实现了物理层。

2、网络与操作系统

2.1 网络和OS的关系

应用层被用户使用,就一定需要访问网卡,访问硬件就一定需要贯穿操作系统,因此在操作系统内部就有一个模块,称为TCP/IP协议栈。

在这里插入图片描述

网络协议栈隶属于操作系统,同时它也是一种标准,它的这个标准必须被每一个操作系统进行遵守,所以如果windows系统与linux系统,它们必须也要通过自己的方式,将网络协议栈实现起来。

假设有两个不同系统主机上的用户之间通信。

在这里插入图片描述
并且有以下结论

  1. 体系结构规定,数据包在主机内进行流动时,一定是要自顶向下,自底向上的。(以前所有的IO也是这样)
  2. 同层协议都认为自己在和对方直接通信,并且不关注上下层。(因此,每一层都要拥有自己的协议)
  3. 为了维护协议,协议被对方识别处理,一定要在被传输的数据上新增其它数据。(比如快递传输,不仅有你购买的物品,还有一个快递单保存着各种帮助传输的属性信息。)


这些能帮助理解以下两个概念

当一个主机上用户在用户层向另一个主机上的同层用户发送一个你好时,当前应用层认为自己只和另一边的应用层交谈,因此它们有着自己的同层协议,并且往下每层都认为自己和对面同层的进行交谈,因此都有着自己的同层协议。
为了让对方在拿到数据时确定这个数据是同等协议下的,因此数据在往下传时,需要带有每层的协议。(硬件层不考虑)
这个向下的过程,就称为封装。

对方每层在拿到数据包时,除了属于自己的数据,还有对应协议。在识别协议后再传给上层。
这个向上的过程,就称为解包。

每一层多出来的协议数据称之为报头

数据链路层通常会同时使用报头和报尾进行封装。

在这里插入图片描述


2.2 局域网(以太网)通信原理和MAC地址

以太网是局域网的一种通信标准。
以下是就是一个TCP/IP协议栈。

在这里插入图片描述

在局域网中,如果两个主机之间通信是能被其它主机看到的。
那么
1、每一个主机都要有唯一的标识:该主机上MAC地址。(网卡地址,用来标定主机在局域网的唯一性。)
2、局域网是一个碰撞域,多个主机在任何时候都可以发消息,就会造成无法准确的听到对应信息,发生信息碰撞(正如教室中任何人都可以说话,但是多个人都说话无法准确听到对应信息),因此主机会识别碰撞(碰撞检测),避免碰撞(让其它主机先进行发送消息),直到自己发消息。

在一个局域网中,多个主机串行的发送信号,这里的以太网在系统方面看就是一种临界资源。

如果规定一种特定数据格式,拿到这种特定数据格式的主机才能发送消息,这就相当于一把锁,对应的通信标准就称之为令牌环网。

认识MAC地址

MAC地址用来识别数据链路层中相连的结点(主机、路由器)。
MAC地址也叫物理硬件地址,用于识别相邻的两个物理硬件设备。其在出厂就会设定,不能修改,并且一台计算机可以绑定多个网卡,进而可以有多个MAC地址。

长度为48位,6个字节,一般用16进制加上冒号的形式来表示。
(比如:09)

在Linux中可以通过 ifconfig来查看
其中比如ether 08:00:22:01:04:fb:18 这样的

2.3 主机的跨网络

数据包从一台主机跨网络传输到另一台主机是需要通过路由器的。

其中路由器可以作为左侧局域网的一部分,同时也可以作为右侧局域网的一部分。这样路由器就能横跨两个网站,才有可能实现主机间的跨网络通信。
在这里插入图片描述

IP地址和MAC地址?
IP地址从理解上。(假设你想从北京到云南,这是一个起始和目标地址,而在其中去的过程会经过其它的省份,在这个过程中也有一个上一站从哪来,下一站去哪的问题。)
这个从起始到目标的地址就是一种源IP地址和目标IP地址,而在过程中上一站从哪来,下一站去哪就是一种源MAC地址和目标MAC地址。
(目标MAC地址就需要根据目标IP地址,进行确认下一步的走向)

当跨网络进行传输时,需要找到数据包下一条的MAC地址,因此可以先到达本网段的路由器,再找到下一个MAC地址,再到达另一个主机。(MAC地址可以标识主机唯一性)

因此
MAC地址,用来在局域网中,标识主机的唯一性。
IP地址,用来在广域网(公网),标识主机的唯一性。

IP地址的出现,屏蔽了底层网络的差异。
在这里插入图片描述

一个用户在用户层将数据跨网络发送给另一个用户时,不能直接发送。发送主机必须通过跨了两个网络的路由器,将数据发送给另一个主机。而发送主机在IP层,必须决定数据应该怎么走,在确定好接收主机的IP后,由于不在同一网络,就需要将数据先发送到局域网。对方收到的时候,一定是从物理层开始的,路由器也是这样,通过自己的以太网驱动程序,将数据包收到解包并向上交付,路由IP也识别到目标IP在同一局域网内,但也不是直接交付,而是需要再向下封装,再向上解包得到。(源IP地址和目标IP地址一直没变,而MAC地址在底层一直在变)

最重要的是,在IP层及其往上的发生接收主机看到的数据都是一样的
因此,网络也被称为IP网络,IP网络屏蔽了底层的差异。

这也体现了添加一层软件层的好处。
而网络中数据传输的本质,就是不断的封装不断的解包,最终转给同层用户。

2.4 有效载荷的分用

数据向上解包时,由于每层有着多种协议,因此如何确定呢?

在这里插入图片描述

因此,数据包添加报头的时候,也要考虑解包时将有效载荷传给上一层的哪一个协议。而决定交付给上层哪一个协议的过程称为有效载荷的分用

结论:
一般而言,任何报头的公共属性里,一定要存在一些字段,支持我们进行封装和解包,并且也需要存在一些字段表示要把有效载荷交付给上层的哪个协议,以支持分用。


小结:本章对于网络整体有一个初步的了解,从结构到协议再到与OS之间的关系,并对TCP/IP协议栈有了了解。这些都是为了后面的网络编程做准备。

本章完~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于自身存在的严重问题总结_4/19

今早二次面试喜马拉雅,面试官给我的评价是: 1.经验不足; 2.实用方面生疏、理解不到位; 原因很正常,我项目自己亲手实操的太少了,一直在背,但是背 不是去读源码 去理解; 项目也大…

基于springboot的班级综合测评管理系统源码数据库论文

目录 1 绪论 1.1课题研究的背景 1.2 课题研究的内容 1.3 系统开发的意义 1.4初步设计方法与实施方案 1.5 本文研究内容 2相关技术介绍 2.1 Java技术 2.2B/S架构 2.3 MySQL介绍 2.4 Springboot框架 3系统需求分析 3.1 可行性分析 3.1.1 经济可行性分…

AI大模型在各行业肆虐,打工人该如何保住自己的饭碗?

开篇我先下个结论,那就是:人类在科技领域的高效率竞争,正在把我们生活的这个商业世界一步步地数字化。而数字化,不单单是AI智能的发展成果,更会成为它所热衷的生长温床,为后续人工智能的一路狂飙奠定了绝佳…

2、picodet转onnx裁剪及python onnxruntime推理

文章目录 1 对picodet xs1.1 动态图转静态图1.2 静态图转onnx1.3 paddle 含后处理 all 版本的推理1.4 onnx 含后处理 all 进行推理1.5 onnx 不含后处量 base模型推理1.5.1 获取onnx模型任一节点的输出1.5.2 base模型的推理 1.6、对picodet-xs模型进行优化1.6.1 picodet-xs base…

项目文档规范及总体布局

软件文档可以分为开发文档和产品文档两大类,交付用户还有用户文档。 1|1开发文档 软件开发计划需求规格说明书软件概要设计说明数据库设计说明软件详细设计说明可执行程序生成说明软件测试计划软件测试说明软件测试报告安装部署手册源代码交付说明上线部署方案上线…

spark读写时序数据库 TDengine 错误总结

最近在用spark读取、写入TDengine 数据库遇到了这样一个问题: JDBCDriver找不到动态链接库(no taos in java.library.path) 我本地都好好的,但是一上服务器写入就会报这个错误,看了很久没有排查出问题,后…

图像分割领域的GPT-4.0,分割一切的AI算法:Segment Anything

一、图像分割领域的GPT-4.0 大家好,我是千与千寻,今天给大家介绍的AI算法可以称得上是图像分割领域的GPT-4.0,号称可以分割一切的AI图像分割算法——Segment Anything。 提到GPT-4.0模型,相信不必我多说,大家都不会陌生…

C++笔记——第十三篇 种一颗 AVL树,长大变成 红黑树,开出了 map和set

目录 一、引入 1. 关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 map3.2.1 map的介绍 3.2.2 map的使用 3.3 multiset 3.3.1 multiset的介绍 3.4 multimap 3.4.1 multimap的介绍 四、底层结构 4.1 AVL 树 4.1.1 AVL树的概念…

实验进行套路【1】

实验是用来证明猜想正确与否的关键方法,做好实验对提升论文发表效率至关重要。本篇博客结合自身经历总结做实验的方法论,希望能对读者有用。本篇不会从技术实现角度来介绍做实验的方法,而会从指导思想角度入手。如果你是一个科研工作者的话&a…

AIPRM for ChatGPT插件让ChatGPT如虎添翼

ChatGPT大热,家人们都申请到了账号,可是总是在一问一答的基础上来完成基本的应用,而不能很好的使用「咒语」(Prompt),收获的答案不是通过很多次的反复问获取答案,就是获取的不是想要的答案。所以…

最重要的 JVM 参数总结

1.概述 在本篇文章中,你将掌握最常用的 JVM 参数配置。 2.堆内存相关 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实…

Auto-GPT来啦,手把手教你安装更稳定的stable的Auto-GPT,实现两个AutoGPT合作执行任务,AutoGPT代理同时执行任务

进入Auto-GPT项目 https://github.com/Significant-Gravitas/Auto-GPT 应该在git bash还是git cmd命令窗口敲以上命令 应该在git bash窗口中敲git命令。 Git Bash是Windows上的一个搭载了Git的终端仿真器,提供了类似Unix的命令行环境,使得在Windows上…

深入浅出剖析JAVA多线程原理

1. 线程基础知识 1.1 线程与进程 1.1.1 进程 ●程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理…

nacos登录 提示权限认证失败 没有命名空间的访问权限

前言 环境:centos7.9 nacos-2.2.2 问题描述 最近在部署nacos-2.2.2版本的时候,这是目前2023年4月份最新版本,发现按照start.out日志给出的登录地址,http://192.168.158.128:8848/nacos/index.html登录,发现总是提示…

一图看懂系列——文件处理模块(总目录)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂系列——文件处理模块(总目录) 摘要目录注: 摘要 本文介绍了文件处理的模块的目录。 以前每个模块单独撰文,现在把它们归集起…

node版本管理nvm的使用

在很多情况下对node版本需要安装多版本的控制,如何快速的切换node版本,请在配置完node的环境变量的基础上,阅读这篇文章。这里需要介绍nvm这个工具: 一、下载 官方下载地址:https://github.com/coreybutler/nvm-wind…

使用Python创建分形图案

分形是无限复杂的模式,在不同的尺度上具有自相似性。例如,一棵树的树干会分裂成更小的树枝。这些树枝又分裂成更小的树枝,以此类推。 通过编程的方式生成分形,可以将简单的形状变成复杂的重复图案。 本文将探讨如何利用一些简单…

ThinkSystem DM 系列混合闪存 —— 快速、灵活、可靠、安全

ThinkSystem DM 系列混合闪存 —— 快速、灵活、可靠、安全 统一存储优化混合云部署具备一流数据管理的横向扩展混合存储 挑战 实现跨闪存、磁盘和云数据驱动型业务 存储已从 IT 事后思考的问题发展成公司基础架构至关重要的组件。企业感觉迫切需要跟上爆炸式增长的数据。标…

抖音滑块以及轨迹分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 我们在web端打开用户主页的时候,时不时的会出现滑…

tf-idf+lda分析多篇文章摘要

import pandas as pd import numpy as np import matplotlib.pyplot as plt #import seaborn as sns plt.rcParams[font.sans-serif] [KaiTi] #指定默认字体 SimHei黑体 plt.rcParams[axes.unicode_minus] False #解决保存图像是负号 import jieba import os # stop_list …