[Linux#48][网络] 令牌环网 | IPv4 | socket 套接字 | TCP | UDP | 网络字节序列

news2024/12/23 15:33:58

目录

1.网络

1.0 令牌环网(了解)

1.1 IP 地址

1.3 网络通信的基本脉络

IPv4地址解释

2.Socket 编程预备

2.1 端口号

2.2 传输层协议

2.3 网络字节序列

库函数定义

函数说明


1.网络

1.0 令牌环网(了解)

相同令牌时,才能放,相当于局域网中的锁

令牌环网和以太网都属于数字链路层,但是底层协议是不一样的

因为网络是层状结构的,所以替换底层协议,不影响传输


1.1 IP 地址

我怎么知道是要跨网络交给主机的呢?

IP 地址可以保证主机在全网的唯一性,例如:我们云服务器的连接 IP 就是唯一的

两个小故事:

  1. 从辽宁到云南,沿路旅游的路线如何设计
  • 从哪来,到哪去--一直是不变的--IP 地址--指导我们进行路径规划
  • 上一站从哪里来,下一站到哪里去--会一直变化,变化的依据是“我要去哪里”--Mac 地址

相当于 IP 是大目标,Mac 是小目标

IP 地址是什么?

IPv4,四字节,32 比特位,整数

192.168.1.1 类似风格

IP 地址为什么要交给路由器?

路由器会重新解包,和封装 数据链层协议,实现了不同区域网之间的通信,解决了底层协议的差异化

同一子网,没有路由器的话,就会底层协议需要一样

  • IP 及上层是一样的,IP 协议屏蔽了底层网络的差异,靠的就是工作在 IP 层的路由器
  • IP 实现了全球主机的软件虚拟层,一切皆是 IP 报文!
  • 也体现了网络层状结构的优越性

Mac 地址 vs IP 地址

IP 地址,尤其是目的 IP,一般都是不会改变的,协助我们进行路径选择

max 地址,出局域网之后,源和目的都要被丢弃,每经过一个设备都要变化,让路由器重新封装


1.3 网络通信的基本脉络

示意图

路由器,可以根据 IP 地址判断目的地在哪个局域网内,IP 地址的设计非常的巧妙,它在网络层,会根据目的地,进行路径选择时选择了下一个跳转的路由器。

ifconfig   --查看当前云服务器的MAC地址,IP地址

IP地址

IP协议有两个版本, IPv4和IPv6

IPv4地址解释

IPv4地址是一个4字节(即32位)的整数,它可以被看作是一个无符号整数(unsigned int)。这意味着它可以表示从0到 (2^{32} - 1) 之间的任何整数值,即从0到4,294,967,295(约42亿)。

四字节和32位的关系

  • 4字节:在计算机中,一个字节(Byte)等于8位(bits),所以4字节就是 (4 \times 8 = 32) 位。
  • 32位:指的是IPv4地址的总长度,由32个二进制位组成。

点分十进制表示法

  • 点分十进制是一种常用的表示IPv4地址的方法,它将32位的二进制数分成四个8位的部分,每部分转换成十进制数,并用点(.)分隔开。例如,IPv4地址 192.168.0.1 就是点分十进制格式。

每个数字的取值范围

  • 在点分十进制表示法中,每个数字代表一个字节(8位),因此它们的取值范围是从0到255。这是因为8位二进制数的最大值为 (2^8 - 1 = 255)。
  • 最小值:0,对应于8位全0,即 00000000
  • 最大值:255,对应于8位全1,即 11111111

示例

  • 192.168.0.1 为例:
  • 第一部分 192 对应于二进制 11000000
  • 第二部分 168 对应于二进制 10101000
  • 第三部分 0 对应于二进制 00000000
  • 第四部分 1 对应于二进制 00000001
  • 合并起来就是 11000000 10101000 00000000 00000001,去掉空格后就是32位的二进制数 11000000101010000000000000000001

总结

  • IPv4地址是一个32位的无符号整数,通常以点分十进制的形式表示,每个部分都是一个8位的二进制数,取值范围是0到255。这种表示方法使得IPv4地址更加易于阅读和记忆。
  • IPv6,IP地址是一个16个字符,128位比特位的整数。防止 IPv4 不够用

要想普及一项技术,需要孵化出一个更大的运用场景,例如物联网使用 IPv6 的话...现在国家规定,公司要兼容 IPv6

MAC地址

  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的

MAC地址通常在局域网中使用,IP地址在广域网和局域网都使用,不过我们不谈IP在局域网的使用。


在进行网络通信的时候,是不是我们的两台机器在进行通信呢?

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

先把这个软件启动起来-->进程

日常网络通信的本质:就是进程间通信!!(从应用层上看,不用看网络栈的底层传输)

要进程间通信,就要先把进程标识出来

2.Socket 编程预备

2.1 端口号

定义

  • 端口号是传输层协议的一部分。

特点

  • 端口号是一个 2 字节(16 位)的整数。
  • 用于标识一个进程,告诉操作系统当前的数据应交给哪个进程处理。
  • IP 地址加上端口号可以唯一标识网络上某台主机的某个进程。
  • 一个端口号只能被一个进程占用。

端口号 port: 无论对于 client 和 server,都能唯一的标识该主机上的一个网络应用层的进程

在公网上:

  • IP 地址能标识唯一的一台主机,端口号,能表示主机上唯一的一个进程
  • IP:port == 标识全网唯一的一个进程

这种 IP+port 的模式,就叫做 socket (插口,插座),实现了客户端和服务器的唯二进程进行通信

例如:10086 是一个 IP,工号 12345 的员工就是 port 端口号

端口号 vs pid

pid 已经能标识一台主机上的进程唯一性了,为什么还要搞一个端口号??

  1. 不是所有的进程都要网络通信,但是所有进程都要有 pid
  2. 为什么不直接用 Pid 做端口?将系统和网络部分解耦合,给网络部分设计了单独的规则,防止系统修改进程 pid 造成混乱

就像一个人有身份证号还有工号,不能用工号代替身份证号,是不同场景下的,如果这样那你从公司离职了呢~

下三层通信示意图

我们的客户端,如何知道服务器的端口号是多少?

每一个服务的端口号必须是众所周知的,精心设计,被客户端知晓的

  • 一个进程可以绑定多个端口号吗?可以
  • 一个端口号可以绑定多个进程吗?不可以

2.2 传输层协议

这张图是一个计算机网络协议栈的示意图,展示了数据在网络中传输时经过的不同层次以及每个层次的数据格式。根据图中的标注,我们可以对以下三个概念进行解释:

  1. 数据段(Data Segment):
    数据段是在传输层(Transport Layer)处理的数据单元,通常用于描述TCP或UDP等传输协议封装的信息。在图中,“你好”这个字符串是应用层数据,在传输层会被封装成一个数据段,并添加上相应的头部信息,如序列号、确认号、源端口/目的端口等。
  2. 数据报(Datagram):
    数据报是在网络层(Network Layer)处理的数据单元,通常用于描述IP协议封装的信息。在图中,数据段经过网络层后会变成一个数据报,它包含了原始数据段以及其他必要的头部信息,例如源IP地址、目的IP地址、TTL(Time To Live)、协议类型等。
  3. 数据帧(Data Frame):
    数据帧是在链路层(Link Layer)处理的数据单元,通常用于描述以太网驱动程序封装的信息。在图中,数据报经过链路层后会变成一个数据帧,它包含了原始数据报以及其他必要的头部信息,例如MAC地址(源MAC地址、目的MAC地址)、FCS(Frame Check Sequence)等。

总结来说,数据段是传输层的概念,数据报是网络层的概念,而数据帧则是链路层的概念。这些不同层次的数据单元在计算机网络中起着不同的作用,它们通过层层封装和解封装来实现数据的有效传输。

TCP协议:

  • TCP协议叫做传输控制协议(Transmission Control Protocol),TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议
  • TCP协议是面向连接的,如果两台主机之间想要进行数据传输,那么必须要先建立连接,当连接建立成功后才能进行数据传输。其次,TCP协议是保证可靠的协议(也意味着要做更多的事情),数据在传输过程中如果出现了丢包、乱序等情况,TCP协议都有对应的解决方法

UDP协议:

  • UDP协议叫做用户数据报协议(User Datagram Protocol),UDP协议是一种无需建立连接的、不可靠的、面向数据报的传输层通信协议
  • 使用UDP协议进行通信时无需建立连接,如果两台主机之间想要进行数据传输,那么直接将数据发送给对端主机就行了,但这也就意味着UDP协议是不可靠的,数据在传输过程中如果出现了丢包、乱序等情况,UDP协议本身是不知道的。
  • 就像发邮件一样,邮件发出去了并不管

⭕ 传输层同时存在 tcp 和 udp 是为什么呢?

TCP协议和UDP协议不存在哪个更好的说法?

  • 可靠和不可靠都是中性词,就像化学中的惰性一样
  • TCP可靠 意味着 在设计和维护上更复杂,不可靠就会相对做的事少一些更简单
  • 所以这两个协议在各自特定的场景下,发光发热

TCP:银行,支付...(在网络联通的情况下,丢包可找回)

UDP:信息派发,例如直播...

2.3 网络字节序列

大小端:没有好坏之分,就是一种不同的选择(来源于格列夫游记里面对吃鸡蛋先吃大小端的辩论)

定义:小端:低权值位放在低地址处(小小小)。大端反之

文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?

网络数据传输中的大小端问题

由于我们不能保证通信双方存储数据的方式是一样的,因此网络中传输的数据必须考虑大小端问题。

TCP/IP 协议规定如下

  • 网络数据流采用大端字节序,即低地址存放高字节。

无论主机是大端机还是小端机,都必须按照 TCP/IP 协议规定的网络字节序来发送和接收数据:

  • 发送端
    • 如果发送端是小端机,需要先将数据转换成大端字节序,然后再发送到网络中。
    • 如果发送端是大端机,则可以直接发送数据。
  • 接收端
    • 如果接收端是小端机,需要先将接收到的数据转换成小端字节序,然后再进行数据识别。
    • 如果接收端是大端机,则可以直接进行数据识别。
  • sum: 大端直接发,小端缓冲区转化为大端后发送

注意事项

  • 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出。
  • 接收主机把从网络上接收到的字节依次保存在接收缓冲区中,同样按内存地址从低到高的顺序保存。
  • 因此,网络数据流的地址应规定为:先发出的数据是低地址,后发出的数据是高地址。

网络字节序与主机字节序之间的转换

为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运行,系统提供了四个函数,可以通过调用以下库函数实现网络字节序和主机字节序之间的转换。

这些函数名很好记:

  • h 表示主机(host)
  • n 表示网络(network)
  • l 表示 32 位长整数
  • s 表示 16 位短整数

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

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

库函数定义

#include <arpa/inet.h>

// 主机字节序转换为网络字节序
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);

// 网络字节序转换为主机字节序
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

函数说明

  • htonl:将 32 位的长整数从主机字节序转换为网络字节序。
  • htons:将 16 位的短整数从主机字节序转换为网络字节序。
  • ntohl:将 32 位的长整数从网络字节序转换为主机字节序。
  • ntohs:将 16 位的短整数从网络字节序转换为主机字节序。

下篇文章将对 socker 接口开始讲解啦~

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

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

相关文章

Nest.js 实战 (十三):实现 SSE 服务端主动向客户端推送消息

前言 假如系统又一个这样的业务场景&#xff1a;已登录的用户发起流程或者发布消息之后&#xff0c;需要弹窗通知其他已登录的用户&#xff0c;我们应该如何实现&#xff1f; 在设计实时通信场景时&#xff0c;我们面临的主要挑战是如何有效地通知所有已登录的用户有关新流程…

关于 PreparedStatement

Mysql 层面的语法也支持 prepare 这个确实第一次见 PREPARE prepares a statement for execution (see Section 13.5.1, “PREPARE Statement”).EXECUTE executes a prepared statement (see Section 13.5.2, “EXECUTE Statement”).DEALLOCATE PREPARE releases a prepared…

半天玩转大模型技术之RAG

引 言 当前大模型在金融行业最广泛的应用之一就是知识问答&#xff0c;而支撑该应用的技术正是当下火热的检索增强生成&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;简称 RAG。因企业具体的业务往往需要注入特定的知识&#xff0c;比如ChatBI中企业…

Google出了一个黑科技,可以把书变成真人多角色对话的音频,效果真的很牛!

大家有没有想过,像读书、查资料这种事情,如果可以用听的,效率会不会更高?我想大部分人都曾有过这种念头。尤其是在这信息爆炸的时代,手头上有大量的书籍、论文等资源,但我们根本没时间一页一页地去翻。对吧?这时,Google Illuminate 的出现,简直像是为我们解了燃眉之急…

力扣: 赎金信

文章目录 需求分析及编码结尾 需求 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次…

kubernetes中的微服务Service(ClusterIP、NodePort、LoadBalancer)

目录 一 、什么是微服务 二 、微服务的类型 三、 ipvs模式 3.1 ipvs模式配置方式 四、微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2…

【大模型专栏—入门篇】CUDA入门与AutoDL“炼丹”

大模型专栏介绍 &#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文为大模型专栏子篇&#xff0c;大模型专栏将持续更新&#xff0c;主要讲解大模型从入门到实战打怪升级。如有兴趣&#xff0c;欢迎您的阅读。 &#x1f4…

PointNet++改进策略 :模块改进 | SWA| PVT,融入Transformer的点云与体素的模块同时提升模型精度和效率

目录 介绍PVT原理PVT的核心思想和结构PVT模块结构体素分支点分支 代码实现 论文题目&#xff1a;PVT: Point-Voxel Transformer for Point Cloud Learning发布期刊&#xff1a;International Journal of Intelligent Systems通讯地址&#xff1a;杭州电子科技大学&伦敦大学…

善于善行——贵金属回收

在当今社会&#xff0c;贵金属回收已成为一项日益重要的产业。随 着科技的不断进步和人们对资源可持续利用的认识逐渐提高&#xff0c;贵金属回收的现状也备受关注。 目前&#xff0c;贵金属回收市场呈现出蓬勃发展的态势。一方面&#xff0c;贵金属如金、银、铂、钯等在众多领…

【C语言】结构体超详细全讲解 (代码+万字文字+画图讲解)

目录 1.什么是结构体类型 2.结构体变量的创建 3.结构体变量的初始化 4.结构体的特殊声明 5.typedef重定义结构体变量&#xff08;两种方式&#xff09; 6.结构体自引用 7.创建结构体指针变量 8.结构体内容的访问 8.1直接访问&#xff1a; 8.2 结构体指针访问 9.结构体内…

IPD推行成功的核心要素(二十二)IPD流程持续优化性地推出具备商业成功潜力的产品与解决方案

产品开发是非常复杂的。随着创新环境的快速发展&#xff0c;大部分研发型企业普遍会面临着这些核心问题&#xff1a;如何快速响应市场的变化&#xff1f;如何推出更有竞争力的产品&#xff1f;如何在竞争中脱颖而出&#xff1f;因此&#xff0c;往往随着企业的规模化发展&#…

深度优先搜索(DFS)在图的运行过程

深度优先搜索(DFS)在图的运行过程 深度优先搜索算法(DFS)C语言实现运行DFS并记录结果节点发现时间和完成时间:图a是一个有向图,为了清晰起见,我们首先假设图a的具体结构如下(节点和边的集合): 图a: 节点集合: {A, B, C, D, E, F} 边集合: {(A, B), (A, C), (B, D),…

带你了解Android Jetpack库中的依赖注入框架:Hilt

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Hilt概述 Hilt是Google推出的一种用于Android的依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;框架&#xff0c;构建于…

Java 学习中使用文件、网络连接等资源时,未正确关闭资源,导致资源泄漏应该怎么办?

在Java编程中&#xff0c;处理文件、网络连接、数据库连接等资源时&#xff0c;如果没有正确关闭资源&#xff0c;就会发生资源泄漏。资源泄漏会导致系统性能下降、内存占用增加&#xff0c;甚至可能导致程序崩溃&#xff0c;特别是在高负载的系统中。 一、什么是资源泄漏&…

【C+继承】

继承 1.继承的概念及定义2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继承的总结和反思 1.继承的概念及定义 ->继承的概念 继承的本质&#xff1a;就是继承的父类的成员 ->继承的…

《哈利波特:魔法觉醒》仅16个月欧美停服,引来“阴谋论”

易采游戏网9月11日消息&#xff1a;2022年&#xff0c;当网易宣布将与华纳兄弟合作推出《哈利波特&#xff1a;魔法觉醒》时&#xff0c;全球玩家一片欢腾。不仅在中国市场掀起了一股狂潮&#xff0c;也迅速进入了欧美市场&#xff0c;吸引了无数哈迷和卡牌游戏爱好者。令人始料…

vue+el-table 可输入表格使用上下键进行input框切换

使用上下键进行完工数量这一列的切换 <el-table :data"form.detailList" selection-change"handleChildSelection" ref"bChangeOrderChild" max-height"500"><!-- <el-table-column type"selection" width&quo…

视频融合共享平台LntonAIServer视频分析平台噪声监测优势

LntonAIServer的视频质量诊断功能中的噪声检测是一项关键技术&#xff0c;旨在帮助用户及时发现并解决视频流中的噪声问题&#xff0c;确保视频监控系统的稳定性和可靠性。 在视频监控系统中&#xff0c;噪声问题常常影响到视频画面的清晰度和可用性。噪声可能由多种因素引起&a…

基于SpringBoot+Vue的考研学习分享互助平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考研学习…

仕考网:省考面试流程介绍,提前了解

省考面试流程介绍&#xff0c;一文带大家了解! 一、面试登记及抽签 考生通常需要提前10至30分钟到达指定地点进行登记。 考试工作人员核对考生身份证和面试通知书等相关证件后&#xff0c;进行抽签确定分组和进场顺序。 二、候考阶段 考生完成抽签后进入候考区等待考试。在…