Linux网络编程 -- 网络基础

本文主要介绍网络的一些基础概念,不涉及具体的操作原理,旨在构建对网络的基础认识。

1、网络的早期发展历程

20世纪50年代

在这一时期,计算机主机非常昂贵,而通信线路和设备相对便宜。为了共享计算机主机资源和进行信息的综合处理,形成了第一代的以单主机为中心的联机终端系统。这种系统的特点是所有终端共享主机资源,但线路利用率低,主机效率也较低。

20世纪60年代

1960年代,网络技术开始快速发展。1969年,美国国防部高级研究计划署(ARPA)的前身ARPAnet投入使用,标志着现代计算机网络的诞生。ARPAnet最初主要用于军事研究目的,其技术上的重大贡献包括TCP/IP协议簇的开发和利用。ARPAnet的试验奠定了Internet存在和发展的基础12。

20世纪70年代至80年代

1983年,ARPAnet分裂为两部分,ARPAnet和纯军事用的MILNET。同时,局域网和广域网的产生和发展对Internet的进一步发展起了重要作用。其中,美国国家科学基金会(NSF)建立的NSFnet在全美国建立了按地区划分的计算机广域网,并将这些地区网络和超级计算机中心互联起来。

20世纪90年代至21世纪初

进入90年代,随着浏览器和万维网的出现,互联网开始真正普及。人们可以通过浏览器浏览网页、获取信息、购物等。此后,互联网的发展经历了商业化阶段和普及化阶段,越来越多的商业公司开始利用互联网提供服务和产品。随着智能手机和平板电脑的普及,互联网进一步向移动化发展。

2、认识一下协议

<1>基本概念

在网络诞生前,计算机主要用于计算数据,科学家使用计算机进行数据传输时,都采用类似软盘的方式进行传输。随着时代的发展,这种低效的传输方式被淘汰,出现了网络。但是早期的网络都是被各大高校和实验室开发出来,这种网络在传输数据的方式都有所不同,为了节约通信成本,各大高校和知名企业联合在一起决定一些协议,也就约定网络传输的一些规则与标准。所以,其实协议就是一种约定。

<2>网络分层结构 -- 网络 和 OS之间的关系

1、软件分层

在我们日常编写软件的过程中,分层其实是非常常见的一种做法,就比我们的操作系统,在操作系统的上层还有系统调用,在系统调用的上层就是应用层。这种分层的方式能够解决许多的问题,这种分层的方式是松耦合的,可以随时替换代码或维护。

 2、网络分层

<1>为什么存在网络以及带来的问题

网络的存在本质上就是为了解决远距离的通信问题,降低通信的成本。现在的计算机可能不同的部件分布在全国各地,这就会带来新的一些问题。比如:1、如何使用数据的问题 2、可靠性的问题3、主机的定位问题4、数据报的局域网转发问题等。

<2>解决方案

为了解决上面的问题,就有人提出了网络协议的方案,比较著名的就是tcp/ip协议。我们该怎么评判这种解决方案的好坏呢?这就要看这些协议是否是可拓展、是否方便维护。而其中分层设计就能很好地满足这种要求,所以这也是网络协议分层的原因。

<3>OSI七模型层

1. 物理层(Physical Layer)

  • 具体作用
    • 在物理媒体上发送和接收比特流(0和1)。
    • 定义电压、接口的物理形状、引脚分配等。
  • 具体功能
    • 信号编码(如曼彻斯特编码、差分曼彻斯特编码)。
    • 信号传输媒介(双绞线、同轴电缆、光纤)。
    • 物理拓扑结构(星型、总线型、环形)。

2. 数据链路层(Data Link Layer)

  • 具体作用
    • 在相邻节点之间提供可靠的数据传输。
    • 处理由物理层提供的原始比特流。
  • 具体功能
    • 帧的封装(添加首部和尾部)。
    • 差错检测(如循环冗余检测CRC)和纠正。
    • 流量控制(如滑动窗口协议)。
    • 访问控制(如CSMA/CD、令牌传递)。

3. 网络层(Network Layer)

  • 具体作用
    • 负责数据包从源主机到目的主机的传输。
    • 路由选择,确定最佳路径。
  • 具体功能
    • 路由算法(如距离向量算法、链路状态算法)。
    • 数据包转发。
    • IP地址分配和寻址。
    • 拥塞控制。

4. 传输层(Transport Layer)

  • 具体作用
    • 确保数据的端到端可靠传输。
    • 为应用层提供端口号服务。
  • 具体功能
    • 端到端连接的建立与终止(如TCP的三次握手)。
    • 数据分段与重组。
    • 流量控制(如TCP的滑动窗口)。
    • 错误恢复(如TCP的超时重传)。

5. 会话层(Session Layer)

  • 具体作用
    • 管理会话的建立、维护和终止。
    • 同步不同应用程序之间的对话。
  • 具体功能
    • 会话管理(如会话检查点、恢复)。
    • 同步(如数据同步、会话同步)。

6. 表示层(Presentation Layer)

  • 具体作用
    • 确保数据在网络中传输前后的表示格式是一致的。
    • 处理数据的加密和解密。
  • 具体功能
    • 数据加密和解密。
    • 数据压缩和解压缩。
    • 数据格式转换(如不同字符集之间的转换)。

7. 应用层(Application Layer)

  • 具体作用
    • 为用户提供网络服务。
    • 实现网络应用程序。
  • 具体功能
    • 文件传输(如FTP)。
    • 电子邮件(如SMTP)。
    • 网页浏览(如HTTP)。
    • 域名解析(如DNS)。

为了解决上述的一些问题,就有人提出OSI七层模型。虽然这里网络协议被分成了7层,但实际上我们在实际应用时,上三层被合成了一层应用层。(如下图)

与操作系统的关系

在物理层,与网络相关的硬件结构就是网卡,网卡的驱动程序就是数据链路层。需要特别注意的是,传输层和网络层是操作系统内部源代码的一部分,说明操作系统自己也会实现网络的相关功能。同时在应用层系统也会提供相关的网络接口,供上层开发网络程序。为了方便网络接口的使用,有人对系统提供的网络方面的系统调用进行封装,形成网络库。

无论是window,linux还是其他的操作系统,只要想要入网,就必须遵守这些网络协议。这也就是各个操作系统之间能够通信的原因。

<4>语言层面,理解协议

上文对协议进行了简单描述,为了更直接对这些协议进行理解,下面用张图来对协议进行简单理解。

在实际的传输过程中,我们是以报文的方式来对数据进行传输,其中这些数据肯定是要以结构化数据进行传输(操作系统基本就是使用C语言进行编写的,这里结构化数据一般就是结构体),如何让两边都认识对方发送的结构化数据呢?那就是协议的功劳了,协议会规定相同的结构体格式,这时通信双方就都能够认识对方数据了。

3、网络传输

<1>局域网传输过程

假设在一个局域网下,有多台主机,其中主机A和主机D之间需要通信。那么这两个主机之间能否之间通信吗?能。主机A会在局域网中发送数据,其中所有的主机都会接受到该信息,但是由于该信息是发送给主机D的,所以其他主机都不会处理这消息。而Mac地址就是在同一局域网下每台主机的唯一标识,就和我们的名字一样,主机A发送的消息中就包含了目标主机的Mac地址,这也是以太网通信的原理。

在局域网中主机A发送消息时,如果有其他主机一起发消息,主机A就会对消息进行检测碰撞与避免碰撞,其他主机同理。如果同时发送消息的主机多了,局域网中的消息就会发生碰撞。所以当我们想要干扰局域网通信时,只要向局域网中不断发送垃圾数据。为了避免这种数据碰撞的局面,当需要发送数据的主机检测到碰撞时,一般会先等待碰撞域(局域网)中的数据减少以后再发。所以在一个局域网中,主机当然是越少越好(这就和我们上课时,一个班的人越少越好,每个人说的话也更能听清)

同时我们也可以在任一时刻只让一台主机发送消息,此时我们也可以将局域网看成一种临界资源。这也是令牌环网的大致工作原理,而令牌环网中有一张令牌,这相当于我们保护临界资源的锁。

<2>协议层面的传输

当我们在协议层面传输报头,是自顶向下传输的,其中在应用层输入消息,想要发送给另一台主机,我们就必须让消息从应用层开始,向下传输到链路层,再经过底层的网卡发送消息。其中需要发送消息的主机在每经过一层协议时,都会在发送的消息前加上一个对应的协议报头。其中,需要发送的消息中除了协议报头,其余部分,我们就称为有效载荷。从应用层不断向下加报头的过程,我们就称为封装。而在接受方,主机收到消息后,依次向上去掉协议的报头,这个我们称为解包。

这里消息就是报文,报文 = 协议报头 + 有效载荷。 应用层的报文一般叫请求或应答,传输层的包头一般叫数据段,网络层的报文一般叫数据报,链路层的报文我们一般称为数据帧。

怎么理解协议报头呢?举个生活中的例子,现在我买了一双鞋,但是我收到快递时,收到的却是一个鞋盒,鞋盒上记录了卖家和买家的基本信息。这个信息并不是给买家和卖家看的,而是给快递公司看的,所以这里鞋盒就相当于报头。在计算机中,这些报头其实就是标明消息要传输给哪一个主机,以及特定协议层中的哪一个协议(其实每一层协议栈都包含了很多的协议)。当接收方接受到报文时,会将链路层的报头与报文进行分离,链路层会解析报头的数据,决定传给网络层的哪个协议,不断重复,直至应用层取到需要的数据(这个过程我们称为分用)。

小结:任何的协议,都要有让报头与有效载荷的分离的能力,并且要有分用的能力。

 <3>跨局域网数据传输

当我们需要跨局域网进行传送数据时,此时我们就需要使用到路由器这个设备了。路由器一般是要横跨两个网络的。用户A将数据自顶向下传递到数据链路层后,数据链路层会将报文发送路由器,路由器会对报文解包后,再分用封装发送给目标主机所在的局域网当中。

具体过程:

 在介绍具体发送过程前,我们首先需要了解一些前置知识。当我们的IP报文被传递到链路层时,链路层会在报文前加上链路层报头。其中报文中就包含了两套地址,一套是最终的目的地和源头,也就是目的IP地址和源IP地址,另一套地址是当前所处机器的Mac地址和需要经过的下一台主机的Mac地址。需要注意的目的IP和源IP是一定不会变的,这就和我们平常定的目标一样,而Mac地址就像我们为了完成目标,途中指定的阶段性计划。一旦目标变了,日常的计划也就变了。

IP地址一般标识形式是点分十进制, 具体格式就是 XXX.XXX.XXX.XXX 。大小为32字节,公网使用的IPv4,国内大部分使用的也是IPv4,IPv6是另外一种IP协议报文。

当用户A的底层数据将链路层报文发送以后,路由器会收到用户A发来的报文,然后会对报文进行解包,解包后重新对其进行封装,不过需要注意的是,此次封装是在另一种局域网当中。封装以后经由网卡发送以后,用户B接受到报文后对报文进行层层解包后就可以拿到数据。在我们日常生活中,一条数据从用户A发送用户B可能会经过很多的路由器,期间会经历很多的局域网,其中各种局域网的传输方式可能不同,但是IP地址却一直没有变化,这种采用IP地址标明用户的方式屏蔽了底层局域网的差异,是一种很好的网络虚拟化技术。IP层协议往上的协议都一样,IP层协议往下的局域网差异被路由器解决,所以我们在网络上只讨论IP协议。

以上就是所有内容,本文不具体介绍计算机网络的相关知识,只是帮助大家构建相关的概念,方便后续理解,以上就是所有的内容,文中如有不对之处,还望各位大佬指正,谢谢!!!

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

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

相关文章

关于CSS 案例_新闻内容展示

新闻要求 标题:居中加粗发布日期: 右对齐分割线: 提示, 可以使用 hr 标签正文/段落: 左侧缩进插图: 居中显示 展示效果 审核过不了&#xff0c;内容没填大家将就着看吧。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

JavaScript 根据时间先后排序数组

在 JavaScript 中&#xff0c;你可以使用数组的 sort() 方法来根据时间先后对数组进行排序。假设你的数组中的每个元素都是一个对象&#xff0c;并且这些对象都有一个表示时间的属性&#xff08;例如&#xff0c;一个 ISO 格式的字符串、时间戳或 Date 对象&#xff09;&#x…

python-pptx 中 placeholder 和 shape 有什么区别?

在 python-pptx 库中&#xff0c;placeholder 和 shape 是两个核心概念。虽然它们看起来相似&#xff0c;但在功能和作用上存在显著的区别。为了更好地理解这两个概念&#xff0c;我们可以通过它们的定义、使用场景以及实际代码示例来剖析其差异。 Python-pptx 的官网链接&…

LeetCode 228 Summary Ranges 解题思路和python代码

题目&#xff1a; You are given a sorted unique integer array nums. A range [a,b] is the set of all integers from a to b (inclusive). Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums …

【GO实战课】第四讲:电子商务网站(4)商品展示和购物车实现

1. 简介 本讲将探讨电子商务网站的商品展示和购物车功能,以及使用GO语言实现。我们将介绍如何设计一个可扩展、可靠和高性能的商品展示和购物车系统,并演示如何使用GO语言编写相关代码。 本课程的目标是帮助学生理解电子商务网站的商品展示和购物车功能,并提供一个实际的项…

【Java】六大设计原则和23种设计模式

目录 一、JAVA六大设计原则 二、JAVA23种设计模式 1. 创建型模式 2. 结构型模式 3. 行为型模式 三、设计原则与设计模式 1. 设计原则 2. 设计模式 四、单例模式 1. 饿汉式 2. 懒汉式 四、代理模式 1. 什么是代理模式 2. 为什么要用代理模式 3. 有哪几种代理模式 …

服务器几核几G几M是什么意思?如何选择?

服务器几核几G几M是什么意思&#xff1f;我们建站、搭建网络平台都要用到云服务器&#xff0c;不管在腾讯云、阿里云还是别的云服务平台选购&#xff0c;都会接触到服务器配置。云服务器就是把物理服务器&#xff08;俗称“母鸡”&#xff09;&#xff0c;用虚拟机技术虚拟出多…

Android SystemUI组件(09)唤醒亮屏 锁屏处理流程

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 唤醒亮屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来…

数据可视化基础:让数据说话

一、引言 在信息洪流中&#xff0c;数据可视化如同灯塔&#xff0c;照亮了数据的海洋&#xff0c;让我们能够洞察数据背后的意 义。 下面是对数据可视化的详细介绍&#xff0c;包括定义、作用、类型、原则、工具方法以及应用场景&#xff0c; 并附上具体的代码示例。 二、数…

BUSHOUND的抓包使用详解

BUSHOUND是个过滤软件&#xff0c;确切来说是在windows操作系统它的驱动层USB传输的数据。所以这个数据上可能是与USB的总线上的数据是有一点差异的。 先要选择设备的抓包。所以就是在device这个界面底下&#xff0c;我们首先要选择我们要抓的设备。 尝试下键盘设备 电脑键盘…

mmdetection实战,训练自己的数据集

1 库安装 pip install timm1.0.7 thop efficientnet_pytorch0.7.1 einops grad-cam1.4.8 dill0.3.6 albumentations1.4.11 pytorch_wavelets1.3.0 tidecv PyWavelets -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -U openmim -i https://pypi.tuna.tsinghua.edu.cn…

在Kali Linux中使用VNC和iptables配置xrdp以实现远程连接

在Kali Linux中&#xff0c;使用VNC和iptables配置xrdp以实现远程连接涉及几个步骤。不过&#xff0c;值得注意的是&#xff0c;VNC和xrdp是两种不同的远程桌面协议&#xff0c;它们通常不会在同一配置中同时使用&#xff08;除非有特殊的网络架构需求&#xff09;。然而&#…

【Linux】用虚拟机配置Ubuntu 24.04.1 LTS环境

目录 1.虚拟机安装Ubuntu系统 2.Ubuntu系统的网络配置 3.特别声明 首先我们先要下载VMware软件&#xff0c;大家自己去下啊&#xff01; 1.虚拟机安装Ubuntu系统 我们进去之后点击创建新的虚拟机&#xff0c;然后选择自定义 接着点下一步 再点下一步 进入这个界面之后&…

基于Docker部署最新版本SkyWalking【10.1.0版本】

文章目录 前言前置条件一、创建Docker 网络二、部署 SkyWalking OAP 服务器三 部署 SkyWalking UI四 查看日志4.1. 查看 SkyWalking OAP 日志4.2. 查看 SkyWalking UI 日志 五 停止并删除容器结论 前言 由于本地的 JDK 版本与 SkyWalking 对应的 JDK 版本不一致&#xff0c;为…

C语言:预编译过程的剖析

目录 一.预定义符号和#define定义常量 二.#define定义宏 三.宏和函数的对比 四、#和##运算符 五、条件编译 在之前&#xff0c;我们已经介绍了.c文件在运行的过程图解&#xff0c;大的方面要经过两个方面。 一、翻译环境 1.预处理&#xff08;预编译&#xff09; 2.编译 3…

ChatGPT进行文本分类

1.建立客户端 from openai import OpenAI client = OpenAI(base_url="https://api.chatanywhere.tech/v1" )2.建立相关函数 def get_openai_response(client, system_prompt, user_prompt, model="gpt-3.5-turbo"):response

【网络安全】Cookie与ID未强绑定导致账户接管

未经许可,不得转载。 文章目录 前言正文前言 DigiLocker 是一项在线服务,旨在为公民提供一个安全的数字平台,用于存储和访问重要的文档,如 Aadhaar 卡、PAN 卡和成绩单等。DigiLocker 通过多因素身份验证(MFA)来保护用户账户安全,通常包括 6 位数的安全 PIN 和一次性密…

51c视觉~CV~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/11668984 一、 CV确定对象的方向 介绍如何使用OpenCV确定对象的方向(即旋转角度&#xff0c;以度为单位)。 先决条件 安装Python3.7或者更高版本。可以参考下文链接&#xff1a; https://automaticaddison.com/how-to-s…

Redis: 集群高可用之节点与插槽管理

概述 Redis Cluster 集群模式&#xff0c;它使用的是分片来存储数据的&#xff0c;数据都存在多个节点上。而且使用了哈希槽这样的机制&#xff0c;它内部维护了 16384 个插槽那就是说每一个节点其实都具体的分布了一些槽&#xff0c;如果我们添加一个节点的话&#xff0c;槽总…

Redis --- 第二讲 --- 特性和安装

一、背景知识 Redis特性&#xff1a; Redis是一个在内存中存储数据的中间件&#xff0c;用于作为数据库&#xff0c;作为缓存&#xff0c;在分布式系统中能够大展拳脚。Redis的一些特性造就了现在的Redis。 在内存中存储数据&#xff0c;通过一系列的数据结构。MySQL主要是通…