Linux网络编程——网络初识

news2024/11/14 19:46:34

文章目录

    • 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.coloradmin.cn/o/1421258.html

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

相关文章

安装好IntelliJ IDEA点击无反应,如何解决配置文件不一致导致的启动问题

在我们的开发生涯中,遇到IDE工具出现问题是在所难免的。最令人头疼的莫过于,你的IDEA(IntelliJ IDEA)无法启动,而且没有任何错误提示。这篇文章将详细讲解如何解决IntelliJ IDEA 2023.3.3版本启动失败的问题,这个问题可能也适用于…

【已解决】Centos安装不了podman问题(依赖无法安装)

今天安装podman一直安装不了,原因是containernetworking-plugins-1.1.1-1.el7.2.9.x86_64.rpm这个包因为网站的原因下载不了,不管是开启代理还是使用镜像源,都无法解决 最终是手动下载本地后上传至服务器解决,故把文件分享出来避…

【Web前端实操18】粘性定位——即固定顶层内容,可以继续滚动,但是顶层内容固定,不随着一起滚动

粘性定位 1、了解 可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。粘性定位是指网页或移动应用程序中的一种特性,即当用户滚动页面时,某个元素能够保持在屏幕上特定位置不动,直到用户滚动到达一定位置或进行特定操作。这个特性可…

【C++】C++入门—— 引用

引用 1 前情提要2 概念剖析3 引用特性4 常引用5 使用场景5.1做参数5.2 做返回值 6 传值 传引用的效率比较7 引用与指针的差异Thanks♪(・ω・)ノ谢谢阅读下一篇文章见 1 前情提要 在C语言中,我们往往会遇见复杂的指针(如…

tcpdump在手机上的使用

首先手机得root才可以,主要分析手机与手机的通信协议 我使用的是一加9pro, root方法参考一加全能盒子、一加全能工具箱官方网站——大侠阿木 (daxiaamu.com)https://optool.daxiaamu.com/index.php tcpdump,要安装在/data/local/tmp下要arm6…

vite+vue3+ts项目上线docker 配置反向代理API

这次重点的坑是反向代理。 1。项目中配置代理,为了跨域请求数据 项目根目录中新建vite.config.ts文件 在文件中添加配置代理 注意:其中 /api 和target 的地址后面没有 / 2。在项目根目录中新建Httprequest.ts文件,引入axios,并…

矩阵键盘的使用

在定义局部变量时,一定要给该变量赋初值。在这个程序中,给按键按下的返回值变量 KeyNum 赋值为 20 。 矩阵键盘线行扫描法的学习链接:https://www.bilibili.com/video/BV1dv411z7Gd/?spm_id_from333.999.0.0&vd_sourceb91967c499b23106…

推荐系统|概要_基本概念

文章目录 基本概念曝光点击相关指标点击率点赞率/收藏率/转发率阅读完成率总结北极星指标 实验流程 基本概念 曝光 笔记出现在首页,叫作曝光。 点击 用户从笔记表面进入到相关笔记的详情页,叫作一次点击。 除此之外,用户的喜爱&#xff0c…

Mybatis-Plus扩展

7 MybatisX插件[扩展] 7.1 MybatisX插件介绍 MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。 功…

基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

Java入门高频考查基础知识8(腾讯18问1.5万字参考答案)

刷题专栏:http://t.csdnimg.cn/gvB6r Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。 以下是几个面试技巧&…

Prometheus的pod部署

创建命名空间和账户以及集群账户 kubectl create ns monitor-sa kubectl create serviceaccount monitor -n monitor-sa kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin --serviceaccountmonitor-sa:monitor 创建…

电动汽车|不同类型电动汽车充电负荷蒙特卡洛法模拟研究(包括常规充电、快速充电、更换电池)

目录 主要内容 结果一览 常规充电 快速充电 更换电池 详实文档资料 下载链接 主要内容 本程序采用蒙特卡洛模拟了不同类型电动汽车充电负荷特点,包括常规充电、快速充电和更换电池三种。 充放电行为分为无序充电行为、受控充电行为和受控充放电行为…

大专生能不能学习鸿蒙开发?

目前安卓有2,000万的开发者。本科及以上学历占比为35%;iOS有2,400万开发者,本科及以上学历占比为40% 绝大多数的前端开发者都是大专及以下学历,在2023年华为开发者大会上余承东透露华为的开发者目前有200万,但鸿蒙开发者统计的数据…

【MyBatis】快速入门MyBatis(保姆式教学),你值得一看

文章目录 📄前言一. Mybatis简介✈️1. 什么是Mybatis🚀2. 为什么使用Mybatis 二. Mybatis快速入门🍆1. mybatis使用前准备1.1 创建springboot项目并引入相关依赖1.2 在 application.ym中进行数据源的配置1.3 创建数据表,准备表数…

【竞技宝jjb.lol】LOL:经典大龙毁一生 WE鏖战三局力克FPX

北京时间2024年1月30日,英雄联盟LPL2024春季赛在昨天迎来第二周首个比赛日,本日首场比赛由WE对阵FPX。本场比赛双方前两局战至1-1平,决胜局FPX一度建立不小的经济优势,然而太过冒险的打大龙决策最终让其功亏一篑,WE鏖战…

备战蓝桥杯---数据结构与STL应用(基础3)

今天我们主要介绍的是pair,string,set,map pair:我们可以把它当作一个结构体&#xff1a; void solve(){pair<int int> a;//创建amake_pair(1,2);//添加元素cout<<a.first<<endl<<a.second<<endl;}//输出 当然&#xff0c;它也可以嵌套&#…

Web自动化—Cypress 测试框架概述

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Cypress 测试框架概述 1.1 Cypress 默认文件结构 在C…

Gunicorn性能优化:提升Python Web应用的服务效率

在Python Web开发中&#xff0c;Gunicorn作为WSGI HTTP服务器&#xff0c;常常作为Web应用&#xff08;如Django或Flask&#xff09;与反向代理或负载均衡器之间的桥梁。为了充分发挥其性能&#xff0c;本文将提供一些实用的Gunicorn配置建议。 Gunicorn架构 Gunicorn采用了预…

hcip---ospf综合实验

一&#xff1a;实验要求 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff0c;R4与其所有直连设备间均使用公有IP 2、R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境IP基于R4的环回 4、所有设备均可访问R4的环回 5、减少LSA的更新量&#xff0c;加快收敛…