LINUX—网络编程——基础知识

2024-09-05 22:28

本文主要是介绍LINUX—网络编程——基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、OSI 开放模型

        OSI 模型相关的协议已经很少使用,但其本身却非常通用,它是一个理想化的模型,尚未有完整的实现。 该模型共有七层结构,由低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。每层 的主要功能如下:
                物理层:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。也就是说,物理层的主要任务是去解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器、架空明线等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
                数据链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路,规定在单个链路上如何传输数据。它的具体工作就是接收来自物理层的位形式数据流,并封装成帧转至上一层;同样也会将来自上层的数据拆位形式的数据流转至物理层。
                网络层:通过路由选择算法,为报文(网络层的数据单位,由上一层打包而来)通过通信子网选择适当的路径。
                传输层:监控数据传输服务的质量,保证报文传输的正确性,为上下层建立稳固可靠的传输服务。
                会话层:建立并管理应用程序之间的通信。
                表示层:负责数据格式转换,将上层应用程序处理的信息转换为适合下层网络传输的格式,或将下层网络数据到达的格式转换为上层应用程序能处理的信息。
                应用层:该层是计算机用户以及各种应用程序和网络之间的接口,功能是直接向用户提供服务。
        那么网络体系为何要分层呢?目的是为了便于维护,如果在开发的中途有某个部分需要修改,那么就无需全部替换,只需要将需要改动的层进行修改,每层只需做好自己的任务即可,相互不干扰。
                         巧记:物、链、网、传、会、表、应。                 

2、TCP/IP 协议

        计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法,比如如何探测到通信目标,由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。不同的硬件,操作系统之间的通信,所有这一切 都需要一种规则,而我们就将这种规则称为协议。
        TCP/IP 是互联网相关各类协议族的总称,一共分为四层:物理层与网络接口层、网络层、传输层、应用层,也有一种说法是分为五层,即将第一层再次拆分。TCP/IP 协议囊括了不同层级的各种协议,这就是协议族的概念。
物理层与网络接口层:
【物理地址】也叫做 MAC ,使用 48 位数据作为全球网络的唯一身份表示,主要协议为 ARP/RARP
ARP 】通过 IP 地址找到物理地址。
RARP 】通过物理地址找到 IP 地址。
网络层:
IP 】分为 IPv4 IPv6 ,更详细的 IP 地址相关知识在下文使用单独章节讲述。
ICMP Internet 控制管理协议 - Ping
IGMP Internet 分组管理协议 - 广播与组播等
传输层:
TCP 】提供面向连接的、可靠的数据传输服务,数据无丢失、无重复、无失序、无乱序的到达,多用于需要高可靠通信的场景,例如文件传输;
UDP 】提供无连接且不可靠的传输服务,以为不需要连接所以效率更高,多用于给出响应较困难的网络通信场景,例如流媒体传输;
应用层:
HTTP/HTTPS 】加密 / 无加密的超文本传输协议
SSH 】安全外壳协议,用于远程登录
RTP/RTSP 】音频传输协议,用于安防监控

3、套接字

        Socket,被称为网络套接字,是一个特殊的文件描述符,也可以认为是网络编程中的一种资源,一种通信机制。Socket屏蔽了各个协议的通信细节,提供了针对 TCP/IP 协议编程的一套接口,通过这个接口就可以统一便捷的使用协议功能,这使得程序员无需过多关注协议本身而将重点放在应用需求上。
        在编写程序时,socket 可以看成在两个程序进行通讯连接中的一个端点,这个单词的本意是“插座”,开发者只需将通信使用的协议族、设备 IP 地址、进程使用的端口号这三个数据与 socket 绑定起来,应用层就可以和传输层通过套接字接口,区分来自不同应用进程的数据包或网络连接的通信,实现数据传输的并发服务。

4、IP 地址

        本质上,IP 地址是允许网络设备之间发送信息的标识符:它们包含位置信息,并使设备可进行通信。互联网需要一种区分不同计算机、路由器和网站的方法。IP 地址提供了一种实现此目标的方式,并且是互联网工作原理中的关键组成部分。如果一台设备想要在互联网或局域网中进行通信,那么它必须要拥有一个 IP 地址。
        IP 地址通常的形式为由字符 '.' 分隔的十进制数字,这种形式在程序中称为“点分十进制字符串”形式,也是计算机用户最常见的 IP 地址形式,其本质是一个无符号 32 位整型值,每 8 bits 数据用一个十进制数字表示,用点进行分隔,就转换成了我们常见的点分十进制字符串形式,这类 IP 地址被称为 IPv4 地址。

5、端口号

        端口号的概念很好理解,试想设备 A 和设备 B 之间相互传输数据,如果仅知道对方的 IP 地址,那么只能将数据包送到目标设备中,但无法明确的将数据转交给某个进程去处理,端口号即是用来区分主机收到的数据包应当转交给哪个进程去处理。
        在程序中, 端口号这个数值使用 unsigned short 进行存储 ,最大值为 65535 。其中 0-1023 号一般分配给系统固定的任务进行使用,例如 ssh 协议进程使用 22 号、 ftp 协议进程使用 21 号、 tftp 协议进程使用 69 号等。开发者在进行程序开发时,如果需要使用固定端口,尽量使用较大值的端口号或提前查看系统正在占用的端口号,避免与系统任务
产生冲突。

6、字节序

        字节序,就是用来规定大于 1 个字节类型的数据在内存中存放时使用的格式,分为大端字节序和小端字节序,通常也是跨平台编程和网络编程中需要考虑的问题。在进制中,左侧位的数据叫做高位数据,右侧位的数据叫做低位数据;
        在内存中,值相对较小的地址编号对应的内存叫做低位地址内存,反之称为高位地址内存,大端小端的概念如下:
                大端字节序: 高位数据存放在低位地址内存,低位数据存放在高位地址内存;
                小端字节序: 高位数据存放在高位地址内存,低位数据存放在低位地址内存。
        为何在网络编程中需要讨论字节序的概念呢?试想,如果设备 A 和设备 B 通信,但两个设备本身使用不同的字节序存储多字节类型数据,那么设备 A 传输的原始数据的格式放在设备 B 中表达就不是原意了,因此在网络传输中规定,所有多字节类型数据经过网络传输前统一转换为网络字节序(即大端字节序),等数据传输完毕到达设备之后,再转换为主机字节序(大端或小端,由设备的 CPU 架构决定)。
注:如有侵权,联系速删。

这篇关于LINUX—网络编程——基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140238

相关文章

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux中的缓冲区和文件系统详解

《Linux中的缓冲区和文件系统详解》:本文主要介绍Linux中的缓冲区和文件系统方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、FILE结构1、fd2、缓冲区二、文件系统1、固态硬盘2、逻辑地址LBA(一)数据块 Data blocks(二)inode表

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重