Linux网络编程——网络初识

文章目录

    • 1. 网络协议初识
      • 1.1 为什么要有网络协议
      • 1.2 协议分层
    • 2. OSI七层模型
    • 3. TCP/IP五层(或四层)模型
    • 4. 网络传输基本流程
    • 5. 以太网通信

1. 网络协议初识

1.1 为什么要有网络协议

早期计算机是独立的,如果要进行数据交互,就得从一台主机到另一台主机;后来出现了网络,将多台计算机连接在一起,可以完成数据交互。

局域网LAN:多台计算机在同一个区域连在一起

广域网WAN:距离十分远的计算机连在一起。

“局域网”和“广域网”是一个相对概念,就比如说我们国家的网络就可以看作一个大型的局域网

但是计算机的传输媒介是光和电,通过频率和强弱来表示01,所以想要传递不同的信息,就要先约定好,也就是“协议”

  • 计算机有不同的厂商
  • 计算机也有不同的操作系统

如果要这些不同的计算机,不同的系统进行通信,就得约定一个共同的标准,也就是网络协议

1.2 协议分层

举个例子:

在C++中,有继承和多态,着本质上就是一种软件分层,基类是上层,子类的各种实现是下层,子类的修改并不影响基类;

Linux文件系统,每个文件里面都有struct file对象,里面包含了函数指针,这个指向着底层不同硬件的方法,在我们上层用户就可以,统一以文件的视角处理所有的软件,在硬件驱动和用户之间加了一个软件层,这也属于一种软件分层。

这些分层,可以在一定程度上降低各个模块之间的耦合度,层和层之间互不影响,在后续的维护上面成本就低一些。

而对于网络协议这里为什么是层状,原因很朴素:

  1. 网络规模太大,分层将各个模块解构出来
  2. 协议要解决问题,而这些问题也刚好是层状的

2. OSI七层模型

OSI组织针对分层的需求将网络协议分为了7层模型:

image-20240129093351073

但在实践中,有些是不好写到操作系统内部的,所以在工程实践的时候,严格上只划分了5层(会话层和表示层并没有在协议中体现出来,合并在应用层了)。

3. TCP/IP五层(或四层)模型

  • **物理层:**负责光电信号的传递方式,我们现在使用的光纤、WiFi都是属于物理层概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
  • **数据链路层:**负责设备之间的数据帧的传递和识别
  • **网络层:**负责地址管理和路由选择,在IP协议中通过IP地址来标识一台主机,通过路由表的方式规划两台主机之间的数据传输线路(路由),路由器工作在网络层
  • **传输层:**负责数据之间通信的安全性和可靠性
  • **应用层:**负责应用之间的沟通

image-20240129102432760

传输层和网络层属于Linux内核的模块,而网卡本质上是属于硬件,我们获取信息本质就是通过网卡将数据拉取到本地,所以网络通信本质上也是访问硬件,而用户是没有资格去直接访问硬件的,所以操作系统要提供一批系统调用(一般由传输层提供)

不管是Linux还是Windows或者是其他的操作系统,它们在系统这块不管怎么不同,但是在网络层面,必须要遵守网络协议标准,不然无法入网

4. 网络传输基本流程

在网络协议栈中,每一层都有对应的协议

image-20240129112952116

在封装的时候,就要考虑到解包的问题,所以任何协议层都要提供解包的方法,即将有效载荷和报头分离;同时每层给协议也需要有将自己的有效载荷交付给上层哪个协议的能力

5. 以太网通信

每台主机在局域网上,都需要有自己唯一的“编号”

在一个教室里面,老师在上面讲课,点人回答问题,比如说点的是“阿坤,请问回答如何训练鸡打篮球”,老师说的这个话,此时教室里所以的人都听到了,可是站起来准备回答的只有“阿坤”。因为这个报头是“阿坤”的,其他人在脑海对比之后发现不是自己,所以没有站起来,然后将整个报文丢弃。

然后“阿坤”说:“老师,训练鸡打篮球首先要养两年半”,此时这个话,全班也听到了,但是这个报头是“老师”,所以其他人对比之后,也是将报文丢弃,这整个过程,虽然其他人都听到了,但是对于“阿坤”和“老师”来说,他们认为本次只完成了他们两个之间的交流。

上面这个例子,就是以太网(局域网)的通信原理。

这个“编号”就是主机的mac地址,当要进行通信的时候,就会携带自己的编号和对方的编号,比如说有10台主机h1、h2...h10

主机h1要给h10发信息,在网卡层面,除了h1本身,其他的9台主机其实都收到了信息,在数据链路层就会进行解析,发现目标不是自己就之间丢弃,然后上层并不知道这个事情,在底层直接处理掉了;如果是自己,则层层解析,拿到最后的信息。

如果想搞乱一个局域网,只需向局域网中不断发送垃圾信息,和正常信息不断碰撞,让主机收不到正常信息即可。

当然除去恶意碰撞,每台主机都要有自己的碰撞避免算法(发生碰撞时,错峰发送),这个是以太网自己协议自己定的。

息不断碰撞,让主机收不到正常信息即可。

当然除去恶意碰撞,每台主机都要有自己的碰撞避免算法(发生碰撞时,错峰发送),这个是以太网自己协议自己定的。

局域网可以看作是多台主机共享的临界资源

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

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

相关文章

【Shell实战案例面试题】输入网卡的名字,来输出网卡的IP

1.问题 参数后判断要加"" 名字为空时显示ip 2.分析 把本机的所有网卡名列出来,来引导用户输入 使用命令列出所有网卡信:ifconfig/ip a 设计一个函数,把网卡名作为参数,函数返回网卡的IP 在获取某个网卡IP时,考虑网…

手把手带你Git入门,从下载到精通,常用git命令

文章目录 Git概述什么是GitGit历史Git是什么 为什么要使用Git什么是版本控制系统 Git和SVN对比SVN集中式SVN优缺点 Git分布式Git优缺点 Git工作流程四个工作区域工作流程 Git下载与安装下载window版下载64位软件包安装Git Git基础环境配置设置用户信息查看配置信息 文件的两种状…

Android Clear架构最强官方指南Kotlin版

Android Clear架构最强官方指南Kotlin版 在这篇文章中,我将介绍关于Android应用程序架构的一些内容。尽管自从早期更稳健的Android架构方法在移动开发中变得流行以来已经说了很多话,但改进和演进的空间总是存在的。 基于上述文章中的清晰架构示例&…

从大模型中蒸馏功能性重排列任务的先验知识

导读 本文是VCC朱家辉同学对论文 Distilling Functional Rearrangement Priors from Large Models 的解读,该工作来自北京大学和中山大学,并已被发表在国际机器人顶会ICRA 2024上。 项目主页: https://sites.google.com/view/lvdiffusion…

ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口;向量数据库的挑战和未来

🦉 AI新闻 🚀 ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口 摘要:OpenAI在ChatGPT中引入了一个新功能,允许用户在聊天时任意一个GPTs(即ChatGPT最新推出的AI Agent 智能应用…

文心一言 VS 讯飞星火 VS chatgpt (189)-- 算法导论14.1 6题

六、用go语言,在OS-SELECT或OS-RANK中,注意到无论什么时候引用结点的size属性都是为了计算一个秩。相应地,假设每个结点都存储它在以自己为根的子树中的秩。试说明在插入和删除时,如何维护这个信息。(注意,这两种操作都…

UI设计中的图标定义

图标的含义 图标是图形化用户界面设计中的重要元素之一,也是图形化用户界面设计中最直接、最生动的视觉形态,有着优秀图形化用户界设计、形象明确、造型突出的图标,能够迅速地被用户所理解和接受,从而使软件或程序的使用效率提高…

【Javaweb程序设计】【C00163】基于SSM房屋中介服务平台(论文+PPT)

基于SSM房屋中介服务平台(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的房屋中介服务平台 本系统分为前台、管理员、用户3个功能模块。 前台:当游客打开系统的网址后,首先看到的就是首页界面。…

如何使用宝塔面板搭建MySQL 5.5数据库并实现公网远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

5G_RACH(一)

什么是RACH RACH 代表 Random Access Channel。这是开机时UE发给eNB的第一条消息。 为什么选择RACH ?(RACH 的功能是什么? 当你第一次听到RACH或RACH Process这个词时,你脑海中浮现的第一个问题是“为什么是RACH?”…

量化交易学习3(量化择时策略)

1 什么是量化择时 量化择时策略,简单来说,就是采用数量化分析方法,利用单个或多个技术指标的组合,来对交易标的股票或股票指数进行低买高卖的操作,期望获得超越简单买入持有策略的收益风险表现。 量化择时策略的核心…

NodeJs环境安装与配置

最近电脑重装了系统,开发环境啥的都得重装,顺便记录下 nodeJs 的安装与配置,方便需要的同学查看,也方便自己以后查找。 安装 下载地址:https://nodejs.cn/download/ 根据需要选择自己环境需要的下载即可,…