『 Linux 』网络基础(二)

news2024/11/15 17:37:00

文章目录

    • 数据在不同层之间的名称
    • 数据的跨网络传输
    • 端口号
    • TCP协议与UDP协议
    • 网络字节序
    • 套接字编程的种类


数据在不同层之间的名称

请添加图片描述

TCP/IP模型为例,数据在不同层之间有不同名称;

  • 应用层(Applicant Layer)

    数据名称一般为 消息(Message),请求/响应(Request/Response);

    在这一层中数据通常被称为消息,包括HTTP请求,SMTP邮件等应用协议的数据;

  • 传输层(Transport Layer)

    数据称为 段(Segment)

    在这一层中数据被分割为段,如果使用的是TCP协议,数据会附加传输控制信息形成TCP段;

    对于UDP段,则称为数据报(Datagram);

  • 网络层(Network Layer)

    数据名称为 包(Packet)

    在这一层中数据被封装成包,这个包包含了源和目的的IP地址等信息;

  • 数据链路层(Data Link Layer)

    数据名称为 帧(Frame)

    在这一层,数据被封装成帧,这个帧包含物理地址(MAC地址)等信息,用于在局域网中传输;

  • 物理层(Physical Layer)

    数据名称为 比特(Bits)

    在物理层,数据被转换为光电信号或无线信号,以比特的形式在物理介质上传输;

不同层次的数据单位各自承担特定的网络功能,确保数据能够从一台设备有效传输到另一台设备;


数据的跨网络传输

请添加图片描述

  • IP地址

    IP地址是在网络层用于识别网络上各个设备的数字标识符;

    是互联网协议的一部分,用于在网络上路由数据包到正确的目的地,IP地址可以分为两类:

    • IPv4

      使用32位二进制数表示,通常以点分十进制(192.168.1.1)的形式显示;

      IPv4地址空间有限,最大可提供约43亿个唯一地址;

    • IPv6

      为了应对IPv4地址耗尽的问题,IPv6采用了128位地址长度,以十六进制表示,分为八组;

      提供了几乎无限的地址空间;

    IP地址具体可以分为网络地址和主机地址两部分,其中网络地址标识主机所在网络,主机地址标识该网络中的具体设备;

  • MAC地址

    MAC地址也被称为物理地址或硬件地址,是嵌入到网络设备(如网卡)中的唯一标识符,MAC地址通常由设备制造商在生产时分配,并嵌入到设备的固件中;

    MAC地址使用48位或64位地址长度,通常以十六进制形式表示,分为六组;

    MAC地址主要作用是在数据链路层控制网络设备之间的数据通信,当数据包在同一个物理网络段内传输时,它首先利用MAC地址确定目标设备从而完成数据的传递;

数据在跨网络进行传输时本质上是一个封装与解包的过程;

一个需要进行网络通信的主机向另一台主机发送消息需要经历以下步骤:

  • 应用层数据生成

    应用程序需要生成需要发送的数据,这个数据被封装在应用层协议中,例如HTTP,SMTP等;

  • 传输层封装

    数据从应用层传递到传输层,数据在这里会被封装在传输层协议中,常见的有TCBUDP;

    传输层回味数据包分配源端口号和目标端口号,以表示应用层的具体服务(如HTTP默认使用80端口);

  • 网络层路由选择

    传输层数据被进一步封装在网络层协议中,即IP协议;

    网络层添加源IP和目标IP;

    随后主机将会查询路由表,根据目标IP地址决定数据包的下一跳,即将数据包发给哪个路由器或网关;

    其中在传输过程中IP地址是不变的,MAC地址是不同变化的,MAC地址通常为当前设备的MAC地址与目标(下一跳)的MAC地址用于逐层跳跃;

  • 链路层封装

    当前设备将具有一定的算法为数据拟定一个路线进行逐次跳跃,如果主机不知道下一跳的设备(如路由器)的MAC地址,将会通过ARP协议查询对应的IP地址,而后对该IP地址进行询问,该询问将通过一个广播的形式,只有对应IP地址的设备会进行返回,返回其对应的MAC地址;

    • ARP协议查询过程

      请求: 主机会在本地的网络内广播一个ARP请求帧,这个请求包含了目标设备的IP地址,请求的大致内容为"谁是IP为x.x.x.x的设备? 请告诉我你的MAC地址";

      广播性质: ARP请求通过单播发送,意味着当前网络中的所有设备都会收到这个请求;

      ARP响应: 由于通过单播发送,只有拥有该IP地址的设备回应这个请求并为其提供MAC地址;

      ARP缓存: 一但主机得到目标设备的MAC地址,会将该信息存储在ARP缓存中,以便在需要再次发送数据时不必重复发送ARP请求;

    • 链路层数据帧构建

      在获得下一跳的MAC地址后,主机可在链路层中构建数据帧,这个数据帧包含了源MAC地址(发送主机的MAC地址),目标MAC地址(下一跳设备的MAC地址),数据有效载荷(从网络层传递下来的IP数据包);

    链路层完成封装后,数据帧将被转换为物理信号,通过网络介质发送到下一跳设备;

以该图为例,若是接受的设备是路由或网关而不是目标主机意味着当前设备为路径点设备,及原主机发送到目标主机的途径点;

在该途径点中(路由)将接受数据帧并检查帧头中的目标MAC地址;

若是目标MAC地址与当前设备不相同则直接忽略,若是相同则解包提取IP数据包,并根据IP数据包中的源IP和目标IP进行查找其路由表以确定下一跳的IP地址,并根据该地址封装其对应的MAC地址;

相同的若是不知道下一跳的MAC地址是多少,将同样的会以单播的形式发送一个ARP请求;

ARP请求已经被响应,即对方已经返回了对应的MAC地址后将会构建新的数据帧,根据目标网络介质(如以太网,令牌环网)等协议,将IP数据包重新封装到新的链路层栈帧中;

其中帧头信息包括新的源MAC地址(路由器的出接口MAC地址)和新的目标MAC地址(下一跳的设备的MAC地址);

  • 物理层传输

    最后路由器将重新封装好的数据帧发送到对应的出接口,通过物理介质传到下一跳的设备;

如图所示,数据的跨网络传输本质上就是一个不断在封装与解包的过程;

在Linux中通常可使用ipconfig查看当前计算机与网络有关的信息;


端口号

请添加图片描述

用户使用应用软件完成发送数据和接收数据本质上是两个进程在进行通信,而网络只是用于通信的介质,这意味着两台进程进行通信本质上就是进程间通信;

本质上就是操作系统通过提供系统调用接口使用网络协议栈通过网络来完成不同主机上不同进程间的通信;

端口号是计算机网络中用语标识特定进程或网络服务的一个概念,在网络通信中起到区分不同应用程序的作用;;

通常情况下端口号是一个16位的数字,范围从065535,用于标识主机上的待定应用程序或服务;

在网络通信中IP地址用于标识网络上的唯一主机,而端口号则用于标识主机上的具体进程或服务,一个公网IP与当前IP主机上的端口号可以标识为一个全网中唯一的进程;

  • 传输层协议

    端口号通常与传输层协议TCPUDP配合使用,TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的传输协议;

    它们为应用程序提供了数据传输的基础;

用户使用应用层软件完成数据的发送和接收,而网络协议栈中的下三层主要解决的是数据安全可靠的送到远端主机;

端口号通常分为以下几种:

  • 知名端口号

    这些端口号由IANA分配,并被广泛用于知名服务与协议;

    • HTTP(Web服务) : 80
    • HTTPS(加密了的Web服务) : 443
    • FTP(文件传输协议) : 21
    • SSH(安全外壳) : 22
    • DNS(域名系统) : 53
    • SMTP(简单邮件传输协议) : 25
  • 注册端口 (1024-49151)

    这些端口号通常分配给特定的应用程序或是公司,用于某些专有协议或服务;

    • MySQL数据库 : 3306
    • Microsoft SQL Server : 1433
    • PPTP(点对点隧道协议) : 1723
  • 动态/私有端口(49152-65535)

    这些端口通常不会分配给固定的服务,而是在需要时动态分配;

    客户端通常在这个范围内选择端口号来与服务器进行通信;

    通常情况下系统不会为进程分配网络端口号,而是对于客户端应用程序而言,当它打开一个网络连接时其对应的操作系统将为其分配一个动态的网络端口号作为源端口号来进行通信;

    通常对于服务端而言其端口号必须是被客户端所知的,故通常情况下服务端的端口号是固定不动的;

    通常服务端通常需要保证服务不中断以满足多个客户端发出的请求并进行响应;

端口号无论对于clientserver都能唯一的标识;

  • 端口号和进程ID之间的关系

    端口号和进程PID之间本质上没有关系;

    进程PID用于标识当前进程在当前系统中的唯一性;

    端口号用于当前系统中需要使用网络服务的进程的唯一性;

    因为不是所有的进程都需要网络通信,但是所有的进程都要有PID;

    同时因为端口号为网络功能,PID为系统功能,两者之间必须进行解耦合,以提高其可维护性;

通常情况下可能存在一个对应的数据结构(如哈希)来管理当前主机接收到的网络请求,这个网络请求通常与进程和端口号有关;

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


TCP协议与UDP协议

请添加图片描述

TCP(传输控制协议)与UDP(用户数据报协议)是两个常用的传输层协议,用于网络通信,其在功能,性能和使用场景上有显著差异;

  • TCP协议

    • 传输层协议

      TCP是一种传输层协议,位于OSI模型的第四层;

      在传输层,TCP负责提供面向连接,可靠的通信服务,以确保数据在网络上传输的完整性和顺序性;

    • 面向连接

      TCP是面向连接的协议,在传输数据之前,TCP要求通信双方(双端,即客户端和服务端)必须先建立联系;

      这一过程通过"三次握手"完成,以确保双方都准备好发送数据和接受数据;

      数据传输完成后TCP会使用"第四次挥手"来优雅地关闭连接;

    • 可靠传输

      TCP提供可靠的数据传输机制,通过序列号,确认应答,重传机制和超时重传等技术以确保所有数据包都能按顺序无误的到达接收方;

      如果数据包在传输过程中丢失或损坏,TCP会自动重新发送这些数据包;

    • 面向字节流

      TCP是面向字节流的协议;

      将数据看作是一个连续的字节流,数据可以任意大小传输并无边界;

      TCP会将应用层的数据流分割成合适大小的段,并且确保这些段按顺序无误地到达接收方;

  • UDP协议

    • 传输层协议

      UDP同样的是一种传输层协议,位于OSI模型的第四层;

      不同于TCP,UDP提供的是一种简单,无连接的传输服务,适用于对速度要求较高且可靠性要求不高的应用场景;

    • 无连接

      UDP是一种无连接的协议,在发送数据前UDP并不需要建立联系;

      数据包可以直接从发送方传输到接收方,使得UDP的传输速率更高;

    • 不可靠传输

      UDP不保证数据包的可靠性,因此数据包可能在传输过程中丢失,重复或乱序;

      UDP不会采取任何措施纠正这些问题,为了其传输速率,UDP协议在发出一个数据包后就不会对该数据包进行维护;

    • 面向数据报

      UDP是面向数据包的协议,将数据划分成一个个独立的数据包,每个数据报在网络上传输时是一个独立的实体且具有边界,通常为单个数据报提供较小的负载;

此处无论是是否有连接,是否可靠都不为一个褒义词或是贬义词;

其本质是在描述该协议的属性特点;

其中是否可靠而言此处的可靠是需要不小的代价的,TCP协议需要将数据不出任何差错的情况下始终维护该协议直到该数据成功到达对端,若是在任何位置数据包出现丢失或是损坏时都要进行重发;

同时TCP处理数据包丢失的前提是两段之间建立联系;

UDP由于将数据包发出后无需再对该数据包进行管理故其具有高效的传输速度;


网络字节序

请添加图片描述

计算机中数据和传输为大端与小端两种方式;

  • 大端字节序

    大端字节序中数据的高位字节存储再内存的低地址处,低位字节存储在内存的高地址处,这意味着数据从左到右存储;

    假设一个四字节的十六进制数0x12345678,其在内存中的存储顺序为如下:

    • 0x00 : 存储12
    • 0x01 : 存储34
    • 0x02 : 存储56
    • 0x03 : 存储78
  • 小端字节序

    小端字节序中数据的低位字节存储在内存的低地址处,数据的高位字节存储在内存的高地址处,即数据从右往左进行存储;

    以四字节的十六进制数0x12345678,其在内存中的存储顺序如下:

    • 0x00 : 存储78
    • 0x01 : 存储56
    • 0x02 : 存储34
    • 0x03 : 存储12

网络字节序指的是在网络通信中使用的标准字节序的顺序;

TCP/IP协议规定,多字节数据在传输数据时必须采用大端字节序,这意味着数据的高位字节先传输,低位字节后传输;

统一的字节序使不同计算机系统之间能够正确解释数据,无论本地的字节序是大端还是小端;

本质上采用大端字节序作为网络字节序主要是为了标准化,确保在不同系统之间数据能够被正确的解码,若是未指定字节序标准,当大端字节序接受到小端字节序发送的数据时将会解码错误;

对于用户而言主要需要手动进行转换的数据类似于IP或端口等数据;


套接字编程的种类

请添加图片描述

  • 域间套接字

    域间套接字是一种用于同一主机上的进程间通信的方法;

    不涉及网络传输,只是在本地文件夹系统路径命名空间内工作;

    域间套接字使用文件系统路径作为地址,无IP地址和端口的概念;

    其对应的结构体为struct sockaddr_un;

    struct sockaddr_un {
        sa_family_t sun_family;       // 地址族,通常为 AF_UNIX 或 AF_LOCAL
        char        sun_path[108];    // 文件路径,最大长度通常为 108 字节
    };
    
  • 原始套接字

    原始套接字允许开发者直接处理网络层,如IP层或链路层的数据包;

    开发者可以手动构建和解析数据包的报头,甚至自定义协议;

    这种编程方式需要较高的权限,因为其允许直接访问网络设备的底层接口,可能会影响系统的网络行为;

    其对应的相关结构体为struct sockaddr_instruct sockaddr_ll;

    其中struct sockaddr_in在原始套接字编程种,该结构体仍用于处理IP地址和端口号,但由于开发者直接操作网络层,通常还需要自行构造IP头部和其他协议头部;

    struct sockaddr_ll是一个用于链路层的地质结构体,通常在直接处理网络接口时使用:

    struct sockaddr_ll {
        unsigned short sll_family;   // 地址族,通常为 AF_PACKET
        unsigned short sll_protocol; // 协议类型,如 ETH_P_IP
        int            sll_ifindex;  // 接口索引
        unsigned short sll_hatype;   // 硬件地址类型
        unsigned char  sll_pkttype;  // 包类型
        unsigned char  sll_halen;    // 硬件地址长度
        unsigned char  sll_addr[8];  // 硬件地址
    };
    
  • 网络套接字编程

    网络套接字用语在不同主机之间的相互通信,通常采用TCP/IP协议进行网络通信;

    网络套接字是最常用的套接字类型,适用于大多数客户端-服务器架构的应用程序;

    网络套接字可以通过UDPTCP协议进行传输,分别提供无连接服务和可靠有序的连接服务;

    其相关结构体为:

    struct sockaddr_in {
        short int          sin_family;  // 地址族(AF_INET)
        unsigned short int sin_port;    // 端口号
        struct in_addr     sin_addr;    // IP地址
        unsigned char      sin_zero[8]; // 保留字段
    };
    

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

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

相关文章

图像处理中的一些知识点详解

目录 Sobel算子的详细由来以及scharr算子laplace算子的由来 Sobel算子的详细由来以及scharr算子 具体解释可以参考:这篇知乎的前两个回答,尤其第二个回答。 补充:这里的梯度计算使用的是前向差分和后向差分相结合的中心差分思想(…

看看月薪3W的电商运营,怎么做数据分析!

作为电商运营的你,得学会分析数据才是真正学会运营。其实不是数据分析太难,而是你没有找对方法! 首先,从分析框架方面来看,可以分为【店铺整体、爆款单品、竞品店铺、推广数据、行业大盘】5个维度。从这些维度考虑&am…

【Linux系列】sshpass使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…

【CTF | WEB】001、攻防世界WEB题目之backup

文章目录 backup题目描述:解题思路&#xff1a;解题过程&#xff1a; backup 题目描述: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 进入题目后显示&#xff1a; 解题思路&#xff1a; 在进行网站安全检查时&#xf…

北大和鹏城实验室联合推出的图像视频统一多模态大模型Chat-UniVi(CVPR 2024)

Chat-UniVi: Unified Visual Representation Empowers Large Language Models with Image and Video Understanding 论文信息 paper&#xff1a;CVPR 2024 code&#xff1a;https://github.com/PKU-YuanGroup/Chat-UniVi 训练130亿大模型仅3天&#xff0c;北大提出Chat-UniVi…

实战|uniapp模仿微信实现发送位置消息,解决滚动页面地图层级冲突

前言 在即时通讯应用中&#xff0c;虽然发送位置信息不是核心功能&#xff0c;但在特定场景下&#xff0c;这个功能仍然非常有用。 本文将介绍如何在 uniapp 中实现位置信息的发送和展示&#xff0c;特别是在遇到地图层级问题时的解决方案。 以下内容均基于 uniapp 打包 App …

puppeteersharp爬取网页数据

官网 https://github.com/hardkoded/puppeteer-sharp 安装 创建控制台项目&#xff0c;安装PuppeteerSharp 18.1.0 编写代码 安装chrome async static Task Main(string[] args) {//如果Chromium不存在则先下载var browserFetcher new BrowserFetcher();//获取安装的浏览…

redis面试(十三)公平锁排队代码剖析

我们来看一下第二种redis分布式锁 第一种锁是可重入锁&#xff0c;非公平可重入锁&#xff0c;所谓的非公平可重入锁是什么意思呢&#xff1f;胡乱的争抢&#xff0c;根本没有任何公平性和顺序性可言 第二种锁&#xff0c;可重入锁&#xff0c;公平锁 通过公平锁&#xff0c…

haproxy七层代理总结

一、HAProxy概念 1.1 什么是HAProxy&#xff1f; HAProxy是一款开源、高性能的负载均衡器和代理服务器&#xff0c;专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器&#xff0c;从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制&a…

一篇文章带你学会向量数据库Milvus

一篇文章带你学会向量数据库Milvus 索引管理 Milvus 提供多种索引类型来对字段值进行排序&#xff0c;以实现高效的相似性搜索。它还提供三种度量类型&#xff1a;余弦相似度 (COSINE)、欧几里得距离 (L2) 和内积 &#xff08;IP&#xff09;来测量向量嵌入之间的距离。 建议…

零基础学会机器学习,到底要多久?

这两天啊&#xff0c;有不少朋友和我说&#xff0c;想学机器学习&#xff0c;但是之前没有基础&#xff0c;不知道能不能学得会。 首先说结论&#xff0c;只要坚持&#xff0c;就能学会&#xff0c;但是一定不能三天打鱼两天晒网&#xff0c;要持之以恒&#xff0c;至少每隔两…

小白零基础学数学建模系列-Day4-线性规划基础与案例分析

文章目录 1. 线性规划基础1.1 基本概念1.2 求解方法 2 线性规划经典问题2.1 生产计划问题2. 2 运输问题 案例1&#xff1a;生产计划问题背景模型建立模型求解 案例2&#xff1a;运输问题背景模型建立模型求解 案例3&#xff1a;货机货物装载问题问题背景假设条件问题要求模型建…

【微信小程序】WXSS 模板样式

1. 什么是 WXSS WXSS (WeiXin Style Sheets)是一套样式语言,用于美化 WXML 的组件样式,类似于网页开发中的 CSS。 2. WXSS 和 CSS 的关系 3.rpx (1). 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位。 (2). rpx 的实现原理 …

哈希表 -四数相加II

454. 四数相加II 方法一&#xff1a;分组哈希表 /*** param {number[]} nums1* param {number[]} nums2* param {number[]} nums3* param {number[]} nums4* return {number}*/ var fourSumCount function(nums1, nums2, nums3, nums4) {const twoSumMap new Map();let coun…

【机器学习之深度学习】深度学习和机器学习的关系以及深度学习的应用场景

引言 深度学习和机器学习是人工智能领域的两个重要分支&#xff0c;它们之间既有联系也有区别 文章目录 引言一、深度学习和机器学习的关系1.1 联系1.2 区别1.2.1 模型复杂度1.2.2 数据需求1.2.3 特征提取1.2.4 训练速度和计算资源 二、深度学习有哪些应用场景2.1 计算机视觉2.…

Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)

前言 我本来老老实实的写着我的Shader&#xff0c;群里的小伙伴强烈建议我开始讲ASE&#xff0c;我只能说&#xff0c;我是一个听话的Up。 一、什么是ASE 全称AmplifyShaderEditor&#xff0c;是一个unity插件&#xff0c;存在于unity商城中&#xff0c;售价看他们心情。&am…

deepin V23 前瞻丨深度适配RISC-V架构,打造全面兼容与高性能的开源桌面操作系统

查看原文 中国工程院院士倪光南曾表示&#xff0c;RISC-V架构因其开放性和灵活性&#xff0c;已成为中国CPU领域最受欢迎的选择之一&#xff0c;并有望成为推动新一代信息技术发展的关键驱动力。目前&#xff0c;deepin&#xff08;深度&#xff09;社区已与RISC-V生态系统建立…

ECMAScript6语法:类

在 ES6 中新增了类的概率&#xff0c;多个具有相同属性和方法的对象就可以抽象为类。类和对象的关系如下&#xff1a; &#xff08;1&#xff09;类抽象了对象的公共部分&#xff0c;它泛指某一大类&#xff08;class&#xff09;。 &#xff08;2&#xff09;对象特指通过类…

haproxy 7000字配图超详细教程 从小白到入门

简介&#xff1a;HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速,HAProxy具备媲美商用负载均衡器的性能和稳…