【网络世界】网络基础概念

目录

🌈 前言🌈 

📁 什么是网络

📁 协议

 📂 概念

 📂 OSI参考模型

 📂 TCP/IP模型

 📂 TCP/IP 和 系统分层的关系

📁 网络传输的基本流程

 📂 MAC地址

 📂 IP地址

 📂 封装,解封装,分用

 📂 IP地址 VS MAC地址

📁 socket编程

 📂 端口号

 📂 网络字节序 

📂 socket 常见API

📂 socket 结构

📁 总结


🌈 前言🌈 

         本期【网络世界】介绍的是计算机网络基本概念,其中如目录所示的所有内容,包含了概念定义,网络通信的基本流程,此外还有介绍网络编程socket的API。

        此外,像一些比较重要的内容,例如TCP/IP协议集,IP地址,MAC地址,端口号,封装解封装分用的过程,是本期的主要内容。

        本文参考书籍:《深入理解计算机系统》,《计算机网络自顶向下方法》

📁 什么是网络

        网络指的是由若干计算机和其他设备通过通信链路连接起来,以便彼此之间可以进行数据交换资源共享的系统。计算机网络通常通过通信协议来规定数据传输的方式和规则,确保数据能够有效地从发送者传输到接收者。

        其中,网络的根据距离划分为:局域网(LAN)、城域网(MAN)、广域网(WAN)

        根据连接方式:点对点网络、客户端-服务器网络

        根据拓扑结构:星型,总线型,环形,树型,网型等网络。

📁 协议

        计算机是人的一种工具,通过多台计算机协同工作来完成某种任务,形成了网络。人与人之间交流是通过某种语言来实现的。例如英语,有语法,语义,时序。计算机与计算机之间实现网络通信也是如此,遵循某种规则,这个规则就是协议。

 📂 概念

        协议是指在通信、交流或行动中,各方为了达成共同目标而约定的规则、程序或约定。在不同的领域和语境下,协议的定义和使用有所不同,但其核心概念是为了确保参与者之间能够有效地交流、协作或达成一致而制定的规范性文件或约定。

        在计算机科学和网络通信领域,协议通常指的是通信协议,用于规定数据传输的方式、格式和规则。

        例如,我们规定高电平代表1,低电平代表0,这就是一种协议的体现。协议需要被指定,并且被许多人遵守。

        在实际通信过程中,会遇到各种不同类型的问题,这就需要来制定协议来解决问题,根据问题的不同,天然的就将协议划分成很多层。

        此外,协议分层也可以带来很多好处,例如设计上更好的进行模块化,解耦合,使得软件维护成本更低。

 📂 OSI参考模型

        OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放 式系统互联参考模型,是一个逻辑上的定义和规范;把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备,比如路由 器,交换机;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚, 理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可 靠的通讯;

        

        OSI参看模型非常完美,但是因为种种原因,并不能得到完美实现,进而没能推广开来。应用最为广泛的就是接下来介绍的TCP/IP模型

 📂 TCP/IP模型

        TCP/IP是一组协议簇,还包括了许多协议,只不过取了应用最重要的两个协议为名,TCP为传输层协议,IP为网络层协议。

        网络是一个抽象的概念,所以我们很少直接考虑物理硬件,所以一般来说TCP/IP视为四层:网络接口层,网络层(网际层),传输层,应用层。

        下图是具体机器,对应的层次。

 📂 TCP/IP 和 系统分层的关系

        这里我们可以对协议有个朴素的理解:在计算机内部,所谓协议,就是通信双方都认识的结构化的数据类型。

        例如,主机A有个数据(a=10,b=20,c=30),发给主机B,主机B能识别吗?可以,双方都遵循相同的协议,就拥有相同的结构体类型struct protocol。也就是说同样的代码实现协议,用同样的自定义数据类型,天然就拥有共识,能够识别对方发来的数据,这就是协议。

        总结一下,我们应用的是TCP/IP模型,所以之后我们都默认协议指的就是TCP/IP协议集。TCP/IP协议本质就是一种解决方案。TCP/IP协议能分层,前提就是问题本身能够分层。协议在计算机内通过代码实现,本质就是一个结构体类型。

📁 网络传输的基本流程

        我们来看看基本的网络是如何运行的,我们日常生活中路由器,交换机是如何工作的。

 📂 MAC地址

        我们先来看看局域网通信,双方如果在同一局域网内,可以直接通信。就类似与同学们在教室内,相互聊天交流。但是,我们必须知道对方是谁,所以必须有一个保证唯一性的标识符,在局域网内,称为MAC地址。

        如今,应用最为广泛的局域网标准是以太网标准。

        在以太网中,任何时刻只允许一台主机发送数据,如果有多台同时发送,会产生数据干扰,称为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免。在局域网通信中,主机对收到的保温确认是否发给自己,是通过目标的MAC地址判定。

 📂 IP地址

        在局域网内是通过MAC地址来确认,如果是跨局域网通信呢,就要使用IP地址,IP地址和MAC地址都是为了表示主机唯一性的标识符。IP地址是网络层的概念,MAC地址是数据链路层的概念。

        IP 协议有两个版本, IPv4 和 IPv6. 我们整个的课程, 凡是提到 IP 协议, 没有特殊说明的, 默认都是指 IPv4

        跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或 多个路由器。

 📂 封装,解封装,分用

        其中每层都有协议,所以当进行传输数据的流程时,要进行封装和解封装。        

下面,我们明确一下概念

        报头,就是对应协议层的结构体字段,一般称为报头;

        除了报头,剩下的叫做有效载荷。

        报文 = 报头 + 有效载荷

        两台计算机通过TCP/IP协议进行通讯的过程:

        在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进 行向上交付,下面是一张示意图。

        以上就是,封装和解封装的过程。在解封装的过程中,每一个有许多协议,计算机如何知道将数据交给哪个协议处理呢?这就根据首部信息,进行分用。

 📂 IP地址 VS MAC地址

        结合封装,理解路由器通过IP地址进行路由转发的过程,从而理解网络传输的基本流程。

        上层不断封装,交付给网络层,网络层就会在封装 源IP(主机A) 和 目的IP(主机B),会进行路由选择,判断与目的IP是否在同一个局域网内,如果不在就是跨网段通信,将数据传给路由器(路由器配有多块网卡,连入多个网段)。

        此时封装到数据链路,封装 源MAC(主机A) 和 目的MAC(路由器),再通过物理设备(网线...)将数据传给路由器,路由器会进行路由选择,将数据发送给 目的IP,在路由器内部也是会进行解封装和封装的过程,此时源IP(主机A) 和 目的IP(主机B)不变,源MAC(路由器) 和 目的MAC(主机B)发生变化。

        由此,我们可以了解网络传输的基本流程,就是不断封装,解封装的过程。

        目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依 据,mac 地址是局域网转发的重要依据。

        IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异。

        因此,不管底层网络结构是以太网,还是令牌环网都可以进行通信,上层不关心底层。

📁 socket编程

        Socket编程是一种用于网络通信的编程接口,它提供了一种在不同计算机之间进行数据传输的方式。在大多数操作系统中,Socket编程可以通过各种编程语言实现。

 📂 端口号

        我们为什么要有网络,因为要进行协同工作,在计算机内,进程是CPU调度的基本单位,简单理解为通过进程来完成工作。

        所以,将数据传给目的主机不是目的,传给目的主机中相应的进程才是。所以,就有了端口号的概念,这是一个传输层的标识符,标识一个进程。

        因此,在计算机网络中,通过 IP地址 + 端口号 的方式,就可以确定网络中那个唯一的进程。

        端口号(port)是传输层协议的内容。

        端口号是一个 2 字节 16 位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来 处理;一个端口号只能被一个进程占用。

        另外, 一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;

        传输层协议(TCP 和 UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 "数据是谁发的, 要发给谁";

        综上,IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的 一个网络进程。 IP+Port 就能表示互联网中唯一的一个进程。

        所以,通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp, srcPort,dstIp,dstPort}这样的 4 元组就能标识互联网中唯二的两个进程 。 所以,网络通信的本质,也是进程间通信。我们把 ip+port 叫做套接字 socket。

 📂 网络字节序 

        内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的 多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之 分. 那么如何定义网络数据流的地址呢?

        网络规定字节序是大端字节序,发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从 低到高的顺序保存;

        如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

        为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运 行,可以调用以下库函数做网络字节序和主机字节序的转换。

        这些函数名很好记,h 表示 host,n 表示 network,l 表示 32 位长整数,s 表示 16 位 短整数。

        例如 htonl 表示将 32 位的长整数从主机字节序转换为网络字节序,例如将 IP 地 址转换后准备发送。

        如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;

        如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。

📂 socket 常见API

C
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

📂 socket 结构

        套接字可以时间网络通信,也可以实现本主机内通信,如果是网络通信采用struct sockaddr_in,本主机内进程通信采用struct sockaddr_un,但是为了通用性,API一律采用struct sockaddr 来接收,使用时进行强转。

        虽然 socket api 的接口是 sockaddr, 但是我们真正在基于 IPv4 编程时, 使用的数据结 构是 sockaddr_in; 这个结构里主要有三部分信息: 地址类型, 端口号, IP 地址.

        in_addr 用来表示一个 IPv4 的 IP 地址. 其实就是一个 32 位的整数;

📁 总结

        以上,就是本期内容,讲解了网路的基本概念;了解了TCP/IP模型,理解问什么要有协议,协议作用;网络通信的基本流程,什么是MAC地址,IP地址,封装,解封装,分用的定义;此外,介绍了网络编程socket常见的API,以及底层结构体定义。

        如果感觉本期内容对你有帮助,欢迎点赞,收藏,关注Thanks♪(・ω・)ノ

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件上传接口

文章目录 开发前端接口 开发前端接口 首先这个前端的文件上传组件使用了,前端组件 首先这个接口不是一般的接口,这个接口可以提取出来,之后那里使用了,就直接放到哪里 所以这是一个万能文件上传接口 写完之后选择 头像组件 在图库中添加组件 写前端组件之后,写了前端的组件…

WPF实现一个带旋转动画的菜单栏

WPF实现一个带旋转动画的菜单栏 一、创建WPF项目及文件1、创建项目2、创建文件夹及文件3、添加引用 二、代码实现2.ControlAttachProperty类 一、创建WPF项目及文件 1、创建项目 打开VS2022,创建一个WPF项目,如下所示 2、创建文件夹及文件 创建资源文件夹&…

Go: IM系统技术架构梳理

概述 整个IM系统的一般架构如下 我们这张图展示了整个IM系统的一般架构可见分为四层那最上面这一层是前端,包括哪些东西呢? 它包括两部分,第一部分是跟用户直接交互的比如说各种IOS APP, 各种安卓 APP还有各种 web APP 在浏览器里面打开的以…

区块链学习05-web3中solidity和move语言

Solidity 和 Move 语言的比较:Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处,但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言,这意味着它们可以表达计算…

Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术

现实世界的视频捕获虽然因其真实性而宝贵,但常常受限于长尾分布的问题,即常见场景过度呈现,而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题",在模拟复杂环境光线、几何形状或达到高度逼真效果方面存在局限。传…

CentOS配置时钟服务

一、ntp协议 1.1 基础 NTP(Network Time Protocol,网络时间协议)是用于同步计算机网络中各个设备时间的协议。 下面了解一下 ntp 的配置选项 1.) iburst 功能: 通过发送一组八个数据包来加速初始同步。 用法: server 0.pool.ntp.org i…

Python实现简单的ui界面设计(小白入门)

引言: 当我们书写一个python程序时,我们在控制台输入信息时,往往多有不便,并且为了更加美观且直观的方式输入控制命令,我们常常设计一个ui界面,这样就能方便执行相关功能。如计算器、日历等界面。 正文&a…

Docker安装RabbitMQ(带web管理端)

1.拉取带web管理的镜像 可以拉取rabbitmq对应版本的web管理端,比如:rabbitmq:3.9.11-management,也可以直接拉取带web管理端的最新版本 rabbitmq:management. docker pull rabbitmq:3.9.11-management 注意:如果docker pull ra…

Linux目录网络设置远程工具的使用

文章目录 Linux目录虚拟机⽹络配置查看⽹络信息修改⽹络配置信息 虚拟机管理操作远程⼯具的使⽤ Linux目录 Linux的⽬录结构 Linux中的常⻅⽬录 Linux常⻅的⽬录结构,不同版本的Linux⽬录结构可能略有不同 Centos7的⽂件⽬录结构 Linux根⽬录下的常⻅⽬录及作⽤ …

C语言之qsort函数

一、qsort 1.库函数qsort qsort是库函数&#xff0c;直接可以用来排序数据&#xff0c;底层使用的是快速排序。 qsort函数可以排序任意类型的数据。 2.头文件 #include<stdlib.h> 3.参数讲解 void*类型的指针是无具体类型的指针&#xff0c;这种类型的指针的不能直接解…

COLING 2024 | AlphaFin:基于LLM的股票预测大模型,显著提高预测能力

COLING 2024 | AlphaFin&#xff1a;基于LLM的股票预测大模型&#xff0c;显著提高预测能力 发布于 2024-06-13 18:31:49 目前&#xff0c;机器学习和深度学习算法&#xff08;ML&DL&#xff09;已被广泛应用于股票趋势预测&#xff0c;并取得了显著进展。然而&#xff0c…

小霸王游戏卡是用什么编程的?

小霸王游戏卡曾经很流行。以超级马里奥为例&#xff0c;超级马里奥免费在线网址&#xff1a;https://supermarioplay.com/cn 游戏画面如下图&#xff1a; 这款游戏的编程语言是什么了&#xff1f; 汇编6502

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】 本地事务事务的基本性质事务的隔离级别&#xff08;下面四个越往下&#xff0c;隔离级 别越高&#xff0c;并发能力越差&#xff09;事务的传播行为&#xff08;是否…

Linux系统调优与日志管理全面指南

文章目录 一、文件存储基础1.1 文件与硬盘存储单位1.2 文件数据与元信息1.3 inode机制查看文件名对应的inode号码有两种方式: 1.4 inode与硬盘空间1.5 特有现象 二、inode节点耗尽故障处理2.1 模拟inode节点耗尽故障 三、恢复误删除的文件3.1 恢复误删除的ext3文件EXT类型文件恢…

Zynq7000系列FPGA中的DDRI和DDRC

在AXI接口设计中&#xff0c;主端口&#xff08;Master Port&#xff09;和从端口&#xff08;Slave Port&#xff09;的交互是通过仲裁器&#xff08;Arbiter&#xff09;来管理的&#xff0c;以确保多个主设备能够有序地访问共享资源&#xff08;如DDR内存&#xff09;。这个…

C++20中的constinit说明符

constinit说明符断言(assert)变量具有静态初始化&#xff0c;即零初始化和常量初始化(zero initialization and constant initialization)&#xff0c;否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

书生大模型实战营--L0关卡-Linux

一、SSH登录并完成nvidia-smi查看显卡以及安装pip install gradio4.29.0 二、完成vscode连接远程服务器 三、运行http://127.0.0.1:7860/

HTML表格表单及框架标签

一.表格标签 1.<table></table> 创建表格 2.<caption></caption> 表格的标题 3.<tr></tr>Table Row&#xff08;表格行&#xff09; 4.<td></td>Table Data&#xff08;表格数据&#xff09;其中有属性rowspan"2&quo…

单点触摸屏和多点触摸屏介绍以及原理简略

单点和多点触摸屏技术是现代触摸设备的基础&#xff0c;下述简单解释这两种技术及其差异。 单点触摸屏 单点触摸屏只能在某一时刻检测一个触摸点的位置。这种触摸屏适用于简单的触摸交互&#xff0c;如点击和拖动。 工作原理 单点触摸屏主要通过以下几种技术实现&#xff1…