Linux 网络基础(1)基础知识、IP地址、端口、协议、网络字节序

news2024/12/22 23:56:32

基础知识

网络发展背景:

网络的划分:局域网(覆盖范围在1000m以内)、城域网(覆盖范围在20km以内)、广域网(更大范围)

组网方式:以太网、令牌环网....

日常名词:互联网,因特网----说的是一个网络,就是国际化的广域网

网卡:实现数字信号与电信号之间的转换

中继器:信号放大,端口只有两个

集线器:端口更多的中继器(广播)

交换机:端口更多,并且支持广播,组播,单播

路由器:对数据路径进行选择

网络就是由大量的路由器互相连接,组成的一个复杂的星型网络

小明在大阪,小红在洛杉矶,小明给小红发送一条信息,怎么确保发给的是小红呢?不是给别人

1.IP地址

IP地址:网络中每一台主机的唯一标识

并且网络传输的数据中,必然都会包含两个要素:源端IP地址,目的端IP地址,这两个信息标识的起点与终点,知道了数据从哪儿来到哪儿去。

网络中的路由器,就会辨别这个目标主机IP地址属于哪个网络,然后规划路径将数据发送到对应网络。

目标地址:明确目标网络,进行网络中的路径规划

源端地址:让对方知道数据来源,便于进行回复的时候知道回复哪里

IP地址本质: uint32_t类型的数据---无符号32位的整形数字

IPV4------uint32_t类型,最大数字2^32-1,大概为42亿9千万,也就是说IP地址在实际使用中不够用。

IPV6------uint8_t ip[16]-----128位的数据。相当于2^32 * 2^32 * 2^32 * 2^32,永远用不完的数据。

但是IPV6并不向前兼容ipv4,也就是如果直接使用ipv6标准的通信,以前基于ipv4的设备,程序用不了,因此推广很慢,当前主要的网络通信还是基于IPV4的通信。

DHCP技术----动态地址分配技术(谁上网分配给谁)

NAT技术:网络地址转换技术--应用于私网的组建(私网中大量主机可以使用同一个公网地址进行上网)

通过IP地址可以实现网络中指定的两台主机之间的通信;

小明给小红发的是QQ消息,为什么这个QQ消息就一定是Q这个程序处理的,而不是主机上的xshell处理,因此网络中传输的数据,比必须在一条主机上标识应该由那个进程来处理。

2.端口

端口:在一台主机上用于唯一标识一个网络通信进程的

本质: uint16_t-- 无符号16位的整数

因此网络传输的数据,不但有源端IP,对端IP,还需要:源端端口,对端端口

这两个信息描述了,两台主机上的那两个进程之间的通信(理解:网络通信其实也是一种进程间通信)

一个端口只能属于一个网络的通信进程,但是一个网络通信进程可以使用多个端口;

一个网络通信进程来了之后,会告诉系统和网卡收到的数据中,那个数据应该交给自己来处理(告诉系统自己用了那些端口)

为什么为了标识一个网络通信进程,要单独列出来一个端口概念,而不使用进行PID

原因:进程ID在程序重启后就会改变

实际网络通信中,必然有一端主机的地址和端口是固定的,让所有人都知道的。

这一端通常叫做服务端(为用户提供服务的一端)

网络应用提供商,都会搭建自己的服务器端,向外发布客户端程序中都封装了自己的服务器地址信息在里面

3.协议

明确了自己的IP地址,端口和对端的IP地址和端口,这时候就可以实现两个主机上指定进程之间的通信小明给小红发送了一条: 我想你了

对应的二进制 010111110001111xxxx转换为电信号的高低电平进行传输

但是如果小明和小红的主机上的网卡是不同厂商生产的,他们对于高低电平的波长解释不同,就会导致 010101111,实际对方收到的是101011111.

可能就被翻译成为:吃了吗

小红回复了: 还没呢

小明收到了: 收到的数据被解释成为--滚蛋

这时候的小明和小红,并没有形成实质上的通信

协议:网络协议就是网络通信中的数据格式约定,不同的主机必须遵循相同的网络通信协栈(一组协议)才可以实现实质通信

小明和小红进行通话: 上层必须都使用中文,下层必须都使用手机 (2G/3G/4G/5G--网络频段)

这里的中文,以及手机频段都是一种协议; 因此网络通信使用的不是单个协议,而是一组协议

国际标准化组织这时候就订立各种协议标准,大家想要通信都必须使用相同的这条标准协议进行。并且对协议进行了分层:

协议分层: 按照网络通信环境,不同层次所提供的服务,使用的协议,提供的接口对整个通信环境进行了分层

OSI七层网络互联模型: 应用层,表示层,会话层,传输层,网络层,链路层,物理层但是因为OSI七层模型划分的过于细致,导致实现起来过于复杂

因此其他组织在这个基础上提出了TCP/IP五层模型:

应用层:负责应用程序之间的数据沟通的格式约定(QQ与QQ的沟通协议,SSH); 典型协议: HTTP,SSH,SMTP,FTP,...

传输层:负责进程之间的数据传输的格式约定; 典型协议: TCP/UDP (内部就描述了源端端口,对端端口)

网络层:负责地址管理与路由选择; 典型协议: IP协议 (内部描述了源端IP,对端IP); 典型设备: 路由器

链路层:负责相邻设备之间的数据传输; 典型协议: ETH协议--以太网协议(内部描述了相邻设别的MAC地址), 典型设备: 交换机

物理层: 负责物理光电信号的传输; 典型协议: 以太网协议 (与组网技术有关)

其中,应用层可以自己修改,红框内的层不能修改,只能选择操作系统提供给你的协议。

从数据到物理层发送,层层的过程叫封装

从物理层到解析数据,层层过程叫分用

MAC地址

4.网络字节序

字节序: cpu对内存中数据以字节为单位进行存取的顺序

分类:内存地址有高低地址之分, 数据二进制有高低位之分,,数据在内存进行存储,从低地址开始存储,到底先存高位还是低位

int a = 0x01020304

大端字节序: 低地址存高位 01 02 03 04

小端字节序: 低地址存低位 04 03 02 01

字节序所针对的数据类型: 存储单元大于1字节的数据类型--shot,int,long,flat,double(单字节存储的数据是不存在字节序问题的,比如char

主机字节序不同对于网络通信的影响:

如果网络通信的两台主机,主机字节序相同,则可以不用考虑字节序问题但是如果不同,就有可能会造成数据二义;

数据的传输一定是发送了什么数据,对方就接收什么数据

大端主机: inta = 0x01020304; 01020304 -> 01020304 小端主机解释: 004030201

解决方案: 网络传输的数据,使用统一的字节序标准 --- 网络字节序(采用的是大端字节序)

不需要关心对方主机的字节序了,因为对方发送到网络中的数据都是网络字节序的,你只需要根据自己的主机字节序进行转换即可

因此注意:如果编写网络程序要考虑跨平台问题,存储单元大于1字节的数据类型对应的数据,就要使用网络字节序进行通信

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

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

相关文章

ChatGPT「最强竞争对手」Claude有了史诗级更新~~~百页数据一分钟读完还能做出总结

号称ChatGPT「最强竞争对手」的Claude,迎来史诗级更新—— 模型记忆力原地起飞,现在1分钟看完一本数万字的小说,已经是一件很理所当然的事情了。 消息一出,评论区直接炸了,网友们蜂拥而至,「wocao连连」&am…

报表解决方案Telerik Reporting - 轻松完成嵌入式报表开发

假设您是一名开发人员,思考一下您的用户将从Web报表设计器中得到什么吗?他们能突出异常数据吗?他们能够从头开始创建一个报告吗?让我们站在商业用户的角度,看看这到底是怎么回事。 Telerik Reporting Web Designer是一个多功能且用户友好的…

Redis系列--redis管道

一、前言 1、reids客户端向服务端发送命令分四步(发送命令-命令排队-命令执行-返回结果),并监听socket返回,通常以阻塞模式等待服务端响应。 2、服务端处理命令,并将结果返回给客户端 以上两步称为:Roun…

榜店商城独立版禾匠队列服务测试失败问题解决方法-开启禾匠队列教程

发现很多用户在安装完成后或者在使用独立版本的过程中可能突然会遇到测试不通过,队列测试失败的情况,安装完成后输入站点域名登录到商城后台,先清理缓存然后进入“设置”-“队列服务”,按要求启动服务并测试服务是否正常运行,如果运行失败的话,如下图所示 这里狮子喵就给…

端子引脚焊接异常分析

No.1 案例概述 PCBA端子引脚焊接发生异常,通过对PCBA基板和端子进行一系列分析,定位到问题发生的原因在于共面性不良,且端子焊接引脚与锡膏接触程度不足导致。详细分析方案,请浏览文章获知。 Q:什么是共面性? 共面性也…

第一章 Java语言概述

一 Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 二 计算机的硬件与软件 2.1 计算机组成:硬件软件 2.2 CPU、内存与硬盘 CPU(Central Processing Unit,中央处理器) 人靠大脑思考,电脑靠CPU来运算、控…

LocalAI - 兼容OpenAI API的本地大模型技术栈【LLM】

LocalAI 是一个用于本地推理的 与OpenAI API 规范兼容的REST API, 它允许使用消费级硬件在本地或本地运行模型,支持llama.cpp、alpaca.cpp、gpt4all.cpp、rwkv.cpp、whisper.cpp、vicuna、koala、gpt4all-j、cerebras 等大模型。 推荐:用 NSD…

linux入门---模拟实现命令行解释器

目录标题 前提准备工作 前提 平时使用指令操作linux系统的时候可能会输入一些不好的指令,这些指令可能会对操作系统内核造成影响,所以就有了命令行解释器这个东西,它会过滤掉那些不好的指令从而让linux系统更加的安全,比如说我们…

初识linux之线程池与一些常见的锁

目录 一、线程池的概念 1. 线程池的概念 2. 线程池的应用场景 二、模拟实现一个线程池 1. 线程的简单封装 2. 锁的简单封装 3. 线程池的模拟实现 3.1 整体结构及头文件 3.2 构造函数 3.3 析构函数 3.4 线程启动 3.5 传入任务 3.6 整体结构 三、线程安全的单例模式…

向基于语义模型的操作集成的演变

在过去的许多年里,已经定义了许多架构方法,用于系统集成以及其信息和流程的表示。这些方法包括面向数据、面向消息、面向服务和面向信息的方法。需要探讨的问题是: 这些不同的方法有何不同和联系?从实时运营整合架构的角度来看&a…

MQTT协议理解

提示:记录mqtt服务搭建及访问教程 文章目录 前言一、MQTT是什么?二、使用步骤1.MQTT服务器搭建2.MQTT集成 总结 前言 一直想了解下mqtt,本人又懒,被动型学习,刚好项目需要,此篇记录下MQTT搭建过程及心得体…

小模型媲美2000倍体量大模型,谷歌提出新思路:蒸馏也能Step-by-Step

深度学习自然语言处理 原创作者:林哲乐 论文:Distilling Step-by-Step! Outperforming Larger Language Models with Less Training Data and Smaller Model Sizes地址:https://arxiv.org/pdf/2305.02301.pdf录取:ACL2023 进NLP群…

在JavaScript中4种创建枚举方式

本文译者为 360 奇舞团前端开发工程师 原文标题:4 Ways to Create an Enum in JavaScript原文作者:Dmitri Pavlutin原文地址:https://dmitripavlutin.com/javascript-enum/ 使用枚举(enum)可以方便地表示一个变量&…

一个通用的多相机视觉SLAM框架的设计和评估

文章:Design and Evaluation of a Generic Visual SLAM Framework for Multi-Camera Systems 作者:Pushyami Kaveti, Arvind Thamil Chelvan Hanumant Singh 编辑:点云PCL 来源:https://arxiv.org/pdf/2210.07315.pdf 代码&#x…

针对基于智能卡进行认证的活动目录的攻击

最近,我参与了一项攻击基于智能卡的活动目录的工作。实际上,你根本不需要使用物理智能卡来验证登录这个活动目录。证书的属性决定了它是否可以用于基于智能卡进行登录。因此,如果你能获得相应的私钥,那么就可以绕过智能卡的验证实…

借助ChatGPT自动生成PPT

借助ChatGPT自动生成PPT 首先让GPT生成一段markdown格式的PPT内容,尽量描述全面,以什么语言,什么格式,排版等等。 打开mindshow网址,点击import and create,选择以markdown方式创建,再次点击弹…

LayerNorm 在 Transformers 中对注意力的作用研究

LayerNorm 一直是 Transformer 架构的重要组成部分。如果问大多人为什么要 LayerNorm,一般的回答是:使用 LayerNorm 来归一化前向传播的激活和反向传播的梯度。 其实这只是部分正确:Brody、Alon 和 Yahav 的一篇题为“On the Expressivity Ro…

LabVIEWCompactRIO 开发指南20 应用程序接口

应用程序接口 STMAPI如图4.24所示。对于基本操作,它由一个读VI和一个写VI组成。它还具有两个补充VI,以帮助传输元数据,但它们的使用不是强制性的。每个主要的VI都是多态,这意味着可以将它们与不同的传输层一起使用。本文档讨论基…

WMS 窗口添加流程

WMS 系统窗口添加流程 文章目录 WMS 系统窗口添加流程一. addView二. addView代码分析2.1 应用端调用WindowManager的addView2.2 WindowManager的实现类是WindowManagerImpl2.3 WindowManagerGlobal2.4 setView2.4 addToDisplayAsUser(Session.java)2.5 …

韦东山Linux驱动入门实验班(2)hello驱动---驱动层与应用层通讯,以及自动产生设备节点

前言 (1)学习韦东山老师的Linux,因为他讲的很精简,以至于很多人听不懂。接下来我讲介绍韦东山老师的驱动实验班的第二个Hello程序。 (2)注意,请先学习完视频再来看这个教程!本文仅供…