Linux_初识网络协议

【Linux网络】协议 什么是协议,为什么要有协议,协议分层,协议如何分层,数据如何在网络中通信 阅读详情
  • 网络协议
  • 数据传输

发明计算机的目的是为了计算数据,结果有可能自己用,也有可能交给其他人使用,所以就需要多台计算机之间可以互相通信。按照通信距离,计算机网络大体分为:局域网(LAN)和广域网(WAN)。
如果两台计算机距离较近,那么直接用一根网线相连即可完成通信。但如果两台计算机之间的距离较远,那么在通信的过程中就无法避免的产生如下问题:

  1. 一台计算机如何找到另一台计算机
  2. 数据如何发送,如果有多条路径,怎么选择路径
  3. 数据在传输的过程中是否会出现丢失

两台计算机之间通信的关键就要解决上述问题,怎么解决呢?协议的定制就是为了解决通信过程中遇到的一系列问题。

一.网络协议

1.1 什么是协议

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。说白了,协议就是通信双方的约定,建立协议是为了减少后期的沟通成本,提高通信效率,解决通信问题。比如购房时签订了协议,有了这份协议在发生纠纷时就很容易解决。

  • 在Linux中,协议就是一个c程序(软件)。
1.2 协议分层

怎样定制协议才能做到效率最大化呢?众所周知,在计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。我们将在计算机通信中遇到的问题分类,每一类问题对应一层协议,不同协议按照顺序分为上下层关系,上层使用下层提供的接口来访问下层。每一层只需要关注自己同层的功能;当一层协议出现问题时,不会影响其他层协议。这样就做到了高内聚低耦合。
类比打电话:用户只认为和同层用户进行通信,不管用户用的什么语言(中文,英语),通信双方都能听懂,而手机也认为它和对面的那台手机通信,当手机换位电脑,仍然不会影响上层用户的通信,这就是用户层和下层功能上的解耦。
image.png

1.3 OSI七层协议模型

七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。它是一个七层的、抽象的模型,不仅包括一系列抽象的术语或概念,也包括具体的协议。
image.png
image.png
由于OSI七层协议模型比较复杂,TCP/IP协议模型在此基础上诞生。

1.4 TCP/IP协议模型

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

  • TCP/IP协议中的应用层里面包含了OSI七层协议模型中的应用层、表示层、会话层
  • 上层使用下层提供的接口

image.png

  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
  • 传输层:负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机
  • 网络层:负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
  • 数据链路层:负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层
  • 物理层:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层
1.5 软硬件体系结构与TCP/IP

TCP/IP协议模型在计算机系统中的位置,如下图:
image.png
应用层在用户层实现,传输层和网络层在操作系统层实现,数据链路层在驱动层实现,物理层在硬件层实现。数据从网络中发来,由网卡接收,然后逐层向上传递到应用层,由应用程序使用数据处理任务。
在Linux中**一切皆文件,**因此网卡也可以看作是文件,虽然我们还没有见到网络的接口,但我们可以预知,应用层对于网络的访问,必定要创建文件描述符,然后通过文件描述符读写数据。
那么为什么网络单独创建了一系列系统调用接口, 而不是挂接到文件管理呢?前面提到许多操作系统有可能在实现系统部分有所差异,但是在实现网络部分,它们一定是一样的,所以操作系统单独为网络设计了一系列系统调用接口。注意:这里的一致性体现在操作系统层,对于数据链路层和物理层,取决于硬件厂商。

二.数据传输

在计算机中一切服务都是以进程的方式运行的,两台计算机之间互相通信,本质就是两台计算机上的进程在通信。

  • 发送进程:用户输入数据,数据自顶向下,逐层传递到物理层(网卡),经由网卡发送到网络中,待接收进程接收
  • 接收进程:识别到该消息是给自己的,然后数据逐层向上传递到应用层,最后交付给用户。
2.1 局域网中数据的传输

有效载荷(数据)每到一层都要封装对应的协议报头,然后向下交付,以待对端接收。
image.png
数据从用户A出发,逐层向下封装,然后传到用户B的数据链路层。每层根据自己的协议报头,将报文解包并且将有效载荷向上传递给指定协议。
局域网通信原理:以太网
一个局域网中可能有多台计算机,当一台计算机发送消息时,所有计算机都能收到这条消息。当发送方的有效载荷到达数据链路层时,数据链路层的协议会添加协议报头,这个报头中有目的MAC地址,如果接收方的数据链路层检测到该MAC地址不是自己,就会丢弃该数据。
image.png

  • 抓包工具的原理就是任何数据都接收。

一个局域网中,任何时刻都可能有多台计算机发送消息,这时候多个消息就会形成碰撞,导致消息异常。因此,数据链路层要保证每个时刻都只有一个人发消息。

MAC地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).

2.2 跨一台路由器的网络中数据传输

路由器:工作在网络层的设备,具备网络层以下的所有功能。可以将路由器看作一个主机(节点)。
image.png

在互联网中,公网IP地址可以唯一标定一个主机。在网络通信中,必须要知道对端IP地址。

IP协议有两个版本, IPv4和IPv6。我们主要讨论IPv4地址

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
  • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
  • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

当发送方封装的数据到达网络层时,会在网络层的路由表中检测当前局域网内有无目的IP地址,若没有,则会在数据链路层的报头中,添加路由器的MAC地址,将该数据发送到路由器中,经由路由器转发到其他局域网内。可以看到,在不同的局域网中,两台主机仍然可以通信,这是因为网络层屏蔽了下层的差异。

Linux网络-网络层IP协议 IP协议,计算机网络分层,IP协议头格式,IP数据报 - 数据分片,数据报为什么要分片?,数据报分片是什么?,如何做到IP数据报分片?,分片demo示例,并不推荐分片,能不分片则不分片。网段划分,前置了解,网络号和主机号,为什么要把IP地址分为网络号和主机号?(作用),过去的一种划分网络号和主机号的方案,把所有的IP地址分为5类, 无类别域间路由CIDR,特殊的IP地址,IP地址的数量限制,私有IP地址和公网IP地址,NAT,路由。 阅读详情

相关推荐

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 831

Linux网络编程 | 【第一篇】网络协议详解

前言 文章目录前言一、协议1.1 基本概念1.2 典型协议二、网络应用程序设计模式2.1 C/S模式2.2 B/S模式三、分层模型3.1 OSI 七层模型 一、协议 1.1 基本概念 从应用的角度出发,定义为数据传输和数据解释的规则; 常见协议:http、tcp; 1.2 典型协议 传输层:TCP/UDP; 应用层:HTTP、FTP; 网络层:IP、ICMP、IGMP; 网络接口层:ARP、RARP; TCP:传输控制协议,面向连接的、可靠的、基于字节流的传输层通信协议;

weixin_45926547的博客 3719

MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息

App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示。 app.TextArea.Value = 'Hello Matlab'; Value可以是字符向量、字符向量元胞数组、字符串数组或一维分类数组。这样直接给TextArea赋值,每次赋值都会消除先前的信息,然后显示新的信息。如果想要在app实现保留原有信息、多行信息的输出,在MathWorks官方帮助中心给出了一种方法: cellArrayText{1} = sprintf('%s\n

我是麻瓜喔的博客 1万+

linux学成之路(基础篇)(十)网络和网络协议

网络:两个不在同一地理位置的主机,通过传输介质和通信协议,实现通信和资源共享。

a872182042的博客 372

Claude Code 完整学习笔记

Claude Code 学习笔记摘要 Claude Code是Anthropic推出的智能编码工具,基于Claude Opus 4.5模型构建,提供跨平台支持(终端/VS Code/JetBrains/Web等)。核心功能包括: 代码库理解与多文件编辑 命令执行与开发工具集成 智能体协作开发流程 安装要求Node.js≥18,提供原生/Homebrew/npm等多种安装方式,支持环境变量配置API访问。基础交互模式包括会话管理、文件操作和代码审查等功能,可自动读写文件并执行精确修改。 (149字)

虚心若愚 812

Android CCodec (十七) 硬件解码调用分析-1(基于V4l2)

简单的分析V4L2DecodeComponent和其相关内容,后续针对解码调用单独分析。

给大佬递杯卡布奇诺的博客 6594

Linux网络协议和管理

网络协议通常工作在不同的层中,每一层分别负责不同的通信功能。一个协议族,比如T C P / I P,是一组不同层次上的多个协议的组合。T C P / I P通常被认为是一个四层协议系统。如图2.1所示。其每一层负责不同的传输任务:1)数据链路层,有时也称网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

wang11876的博客 865

LLC谐振变换器软启动,不只是“慢启动”,还是“智能启动”

LLC谐振变换器的软启动,不只是“慢慢来”,而是要在控制时序、限流、响应速度之间精妙权衡。而数字控制,特别是用查表法或混合信号法,为实现真正的“最佳轨迹”提供了可能。✨小Tips:如果你的系统成本敏感,选择查表法准没错;如果你的设计目标是超高速响应,那就上混合信号的高配方案!

weixin_43199439的博客 691

linux--网络协议初识

网络协议初始

m0_69131255的博客 854

PMP--二模--解题--161-170

A:邀请团队成员在下一次回顾中分享经验。B:请求发起人增加具有所需经验的团队成员。C:在团队内计划知识共享会议。D:请求发起人为团队提供培训课程。A。

stqer的博客 1270

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 197

【Linux网络】Linux网络基础入门:初识网络,理解网络协议

在数字化时代,网络已成为连接世界的桥梁,而Linux,这一开源、灵活且强大的操作系统,无疑是构建和管理这些网络的重要基石。无论你是IT专业的学生、网络管理员,还是对Linux技术充满好奇的爱好者,掌握Linux网络基础都将为你打开一扇通往广阔技术世界的大门

EterNity_TiMe_的计算机学习之路 9037

人工智能算法面试大总结-总目录

涉及秋招、春招、社招

啥都生的博客 2万+

LINUX网络基础 [一] - 初识网络,理解网络协议

计算机网络在现代社会中发挥着举足轻重的作用。它打破了数据的孤立状态,使得不同计算机之间能够高效地交换信息和共享资源。无论是工作、学习还是生活,计算机网络都已经成为人们不可或缺的一部分。它让人们能够随时随地访问互联网,获取各种信息和服务,极大地提高了工作效率和生活质量协议(Protocol)是一种约定,是指一组用于规定计算机之间进行通信时,如何传输数据和处理信息的规则和约定。协议是网络通信的基础,它定义了数据传输、错误检测、数据压缩、数据加密等多个方面的细节,以确保不同设备能够顺利、高效地进行通信。

2402_83315537的博客 1724

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux网络基础1(二)之网络协议初识

Linux网络基础1:网络协议的分层模型。以打电话为例说明协议分层的逻辑与优势,包括降低耦合、便于维护和高内聚等特点。重点对比了OSI七层模型和TCP/IP五层(或四层)模型,详细说明了TCP/IP模型中物理层、数据链路层、网络层、传输层和应用层的功能和典型设备。在实际应用中更常用TCP/IP四层模型,并说明不同设备(主机、路由器、交换机等)在各层的实现情况,强调分层架构在网络通信中的重要性等

lll_666666的博客 767

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

初识linux网络编程的Posix API与网络协议栈

POSIX,全称为“可移植操作系统接口”(Portable Operating System Interface),最初由IEEE组织制定,目的是为了使不同的操作系统之间可以互相兼容。POSIX标准定义了一系列API和命令行工具,规定了操作系统应该提供哪些功能,以及这些功能的调用方式和行为。这些标准都是为了让不同的操作系统之间具有更好的兼容性,以便更方便地编写跨平台程序。对于Posix API,这里做了详细介绍。

TanZL的博客 1361

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【网络】初识网络

OSI七层模型 TCP/IP五层(四层)模型 封装 分用 IP MAC

xiaomage1213888的博客 2696

初识Linux · 网络基础

本文作为Linux网络学习的第一篇文章,相对来说概念还是偏多的,甚至于概念让人觉得晦涩,这是非常正常的,那么进入网络部分之前,我们不妨思考一下,为什么会有网络?对于一个业务来说,交互数据的时候,要求的是“快准狠”,那么如果一个人在地球北端,一个人在地球南端,数据传输可想而知有多慢,即便是拿马车来说,时间也是消耗不起的,因为时效性问题。

更新各种计算机技能~ 7672

【Linux网络#1】:初识网络

本篇文章主要是关于计算机网络协议的,讲述了其发展背景及协议的相关知识,还讲了网络传输的流程

island1314的博客 4200

【Linux】初识网络

对网络的初步理解,讲解了TCP/IP模型及网络传输的基础形式

Lin_Alpaca的博客 1842

【Linux网络】网络协议基础

本文介绍了计算机网络的基础知识,包括计算机网络的背景、协议的概念、协议分层的重要性以及OSI七层模型和TCP/IP五层(或四层)模型。文章首先描述了计算机网络从独立模式到网络互联、局域网和广域网的发展过程,强调了协议在计算机通信中的关键作用。接着,文章详细解释了协议分层的优势,如解耦合和降低维护成本,并介绍了OSI七层模型的理论框架及其在实际应用中的局限性。最后,文章重点讲解了TCP/IP五层模型,包括物理层、数据链路层、网络层、传输层和应用层的功能,并指出协议的本质是通信双方共同认识的结构化数据类型。通过

Sakura_ding的博客 848

【初识Linux】上

初识Linux

分享学习知识地方 1429

【Linux】初识加搭建Linux

学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说Linux,还得从UNIX说起。1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的贝尔实验室研究人员KenTompson和Dennis Ritchie,在采用很多Multics特点的基础上开发了UINX系统。

2301_77954967的博客 2571

初识Linux

一文带你了解清楚什么是Linux

cp 1106

【Linux系统化学习】网络基础初识网络

本片文章介绍了Linux网络部分基础知识。

qq_55119554的博客 978

Linux初识

Linux基本常识 Linux内核最早由芬兰人李纳斯·托瓦茨(Linus Torvalds)完成。他当时觉得Unix操作>系统比较难用,所以自己编写了一套操作系统,并命名为Linux,于1991年9月发布,当时仅有一万行代码。 李纳斯公开了Linux源码的版权,所以与Windows系统不同,Linux开放源代码,任何人都可以免费使用它。 Linux的logo是一个企鹅,因为企鹅所在的南极洲...

Huang_Y_hui的博客 208
上一篇: Linux_线程
下一篇: Linux_socket编程
bhbca
博客等级 码龄4年 259粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值