【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础1(网络框架)

  • 一.什么是协议
    • 1.通信问题
    • 2.协议本质
    • 3.网络协议标准
  • 二.协议分层
    • 1.为什么协议要分层
    • 2.如何具体的分层
  • 三.操作系统OS与网络协议栈的关系
    • 1.核心点:网络通信贯穿协议栈
  • 四.局域网中通信的基本原理
    • 1.封装,解包分用
    • 2.正确看待局域网
  • 五.以太网下是如何通信的
    • 1.碰撞域
  • 六.交换机

本篇开始总结网络知识,系统部分到此结束。
网络的本质就是在获取和生产数据,而系统的本质就是在处理数据。从网络中获取到数据利用系统调用来处理数据。而网络的本质也就是文件,我往文件里写,就是往网卡里写,往网卡里写,就是往网络里写。

一.什么是协议

我们在生活中都是基于数据来进行协助的,而一般我们可以根据协议约定,来减少沟通成本。
协议就是一种约定,它的出现是为了解决通信过程中出现的问题,所以我们只要理解了通信过程会出现什么样的问题,就能清楚要制作什么样的协议,那么通信过程中存在哪些问题呢?

1.通信问题

在这里插入图片描述
在两台主机网络通信过程中,面临着以下四种问题:

【问题1】.你怎么保证你的数据能准确的到达下一个设备?
【问题2】.你如何定位的到要发送的主机位置呢?
【问题3】.长距离传输过程中数据会不会丢失呢?
【问题4】对方接收到数据,就算完了吗?如何处理发来的数据呢?

通信的两台主机都会面临着相同的问题,为了解决这些通信问题,所以就需要制定对应的协议来解决。
问题1由以太网协议解决
问题2由ip协议来解决
问题3由tcp协议来解决
问题4由应用层协议来解决。

2.协议本质

在我们日常生活中,类似于协议的东西有很多,就比如我们接收快递时,我们想要的是买的物品本身,但商家默认会将一个快递盒子发给我们,并且外面还贴有标签(收件人,手机)等信息。这个快递盒子和标签就是协议!

1.所以我们在接收快递时,我们会收到除了快递本身之外的更多信息字段,比如快递盒子外面贴的标签,这个多出来的信息字段,就是协议,严格上说是协议的报头!
2.事实上,在我们日常发送数据时,也不是单单就把数据发送过去,我们一定还会在我们要发送的数据之外多发送一些东西,这个多出来的,就是协议!
在这里插入图片描述

这个多出来的东西,就是一些信息字段,描述某些特征,而在计算机当中,结构体恰好就是用来描述对象的一些基本信息和属性,所以在计算机中,协议的表现形式就是结构体对象!

所以一台主机发送一个结构体对象,另一台主机是可以立马认识到这个结构体表示什么意思,因为该主机也有该类的源代码,结构体对象类型是一样的,所以我们就可以跨逐渐上让它们基于结构体快速形成约定,这就是协议!
在这里插入图片描述

3.网络协议标准

【问题】那么两台主机如果要网络通信,只要约定好协议就可以了吗?

协议是定制设置出来的一种形式,但协议代表的含义也是定制者赋予的,所以除了协议形式要统一,还有很多东西需要统一起来,比如代表的含义,形式大小等待细节。
在这里插入图片描述

统一的标准,从软件到硬件各方面都需要一支,这就形成了网络协议。

二.协议分层

在这里插入图片描述

1.为什么协议要分层

1.本质是因为问题是层状的,所以协议定制出来肯定也是层状的。并且设置成层后,就可以降低耦合度,减少维护成本好维护。
2.因为协议分层后,我们可以认为是每层协议在和每层协议在直接通信,跟下层没有关系,下层出现问题,不会影响到上层。

在这里插入图片描述

3.协议分层后,在逻辑上就可以看成各层之间在匹配通信

2.如何具体的分层

在网络中,协议具体被分成5层,但最重要的是网络层ip和传输层tcp,所以被称为TCP/IP五层模型。
在这里插入图片描述

这五层从下往上分别是,物理层,数据链路层,网络层,传输层,应用层。各自都有对应的协议。
每层具有不同的功能:
在这里插入图片描述

三.操作系统OS与网络协议栈的关系

1.物理层对应着系统中的硬件部分,比如网卡。
2.数据链路层对应着驱动程序,驱动软件。
3.而网络层和传输层是内嵌在内核里的,属于操作系统的部分。
4.应用层就相当于在操作系统之上的用户层,更准确的来说是用户层的各自软件应用。
在这里插入图片描述

在这里插入图片描述

操作系统和网络栈是一一对应起来的,网络通信的本质也就是在访问硬件网卡,而用户想要访问硬件,必须要经过操作系统,而操作系统又不相信用户,所以回给上层提供系统调用来访问内部。所以对应的网络通信,用户想要访问网卡,就必须调用系统调用,所以上层开发者为了更好的通信,所以会根据系统调用来开发一些协议来让我们使用。
5.操作系统虽然有多种,比如Linux和windows,但是网络栈却只有一种,所有的操作系统必须遵守,不然系统设备无法入网通信。
在这里插入图片描述

1.核心点:网络通信贯穿协议栈

所以网络通信的本质:就是贯穿协议栈的过程!这个过程先自顶向下,贯穿协议栈,然后通过网卡传输到另一台主机,再自底向上贯穿协议栈。
在这里插入图片描述

四.局域网中通信的基本原理

知识点1:在局域网(网络)当中,任意两台(直接相连的)主机是可以通信的,比如说手机可以投屏到电视上,但必须使用同一个网络才可以。
知识点2:在局域网(网络)当中通信协议有很多种,而以太网是属于局域网通信标准的其中一种

那么在局域网(就是在网络中)当中的两个主机是如何进行通信的呢?

两台主机在局域网中直接通信的过程,本质就是在不断的封装和解包的过程!
在这里插入图片描述

1.封装,解包分用

【问题1】什么叫封装呢?

网络通信时,需要贯穿协议栈,比如A主机要将消息通过网络发送给B主机,那么消息需要由A主机的网络协议栈由顶自下贯穿到B主机,再由底向上贯穿B主机的网络协议栈。
因为协议是附加字段,是一个结构体对象,所以每层协议都有对应的结构体对象。
消息就放在协议的后面,我们称这个部分为报文,而协议结构体部分称为报头。
每贯穿一层协议,报文都会多出一个协议报头,该协议报头就是该层协议的结构体对象。

1.报文是由报头和有效载荷构成,每一层协议栈都会往报文上添加新的报头,而报头后面的就变成新的有效载荷了。
在这里插入图片描述

贯穿协议栈,每层都需要添加报头,这个过程就是不断的封装报文。
【问题2】如何将数据发送给对端的呢?

网络协议栈的层状结构中,每一层都有协议,而通过协议就可以将数据发送给对端,比如数据链路层,通过以太网协议将数据发送给对端主机的数据链路层。
在这里插入图片描述

【问题3】什么叫解包?
由A主机发送给B主机,先自顶向下贯穿A主机网络协议栈,经过添加封装报头,最终到达数据链路层,数据和链路层通过协议,将报文发送给对端链路层。对端链路层再自底向上贯穿协议栈。
并且每层协议栈是可以区别哪些是报头哪里是报文的,然后对端主机的链路层就会将该报文的报头和有效载荷分离,将有效载荷交给上一层协议!
而由协议层分离报头和有效载荷的过程就是不断的在解包报文,会将属于该层的协议报头分离出去,再将剩下的有效载荷交给上一层(贯穿协议栈)
【问题4】什么叫分用?
对端主机的协议层接收到报文后,需要解析报文(分离报头和有效载荷)将有效载荷往上层协议发送,而它怎么知道发送上层的哪一个协议呢?每一层协议栈都会有许多协议存在,那么应该发送给上一层的哪一个协议呢?
所以几乎所有的协议,都要在报头中提供,将自己的有效载荷交付给上层哪一个协议的能力!这个能力就叫分用。

在这里插入图片描述

【结论】:
在这里插入图片描述

数据包封装和分用
1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链
路层叫做帧(frame).
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation).
3.首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议
字段” 将数据交给对应的上层协议处理.

2.正确看待局域网

在这里插入图片描述

局域网就一个网络,而网络就是一个文件,主机之间通信就是进程之间通信,进程之间通过网络进行通信,所以网络就是一个共享资源,并且要求是互斥访问该资源。

五.以太网下是如何通信的

我们知道报文在传递到链路层时,是根据以太网协议与对端链路层进行通信的。那么具体在以太网下是如何通信的呢?
在这里插入图片描述

【前提知识】 在局域网中,每台主机都会有一个唯一标识自己的标志–>Mac地址/ip地址,所以每台主机都是可以识别对方是谁的。在这里插入图片描述

在局域网当中,发送一条消息,会被局域网内的所有主机接收到,也就是消息首先会贯穿协议栈,经历封装添加报头,到达数据链路层,最后在网卡硬件层面接收到。而对端网卡接收到数据是通过以太网接收到的。

以太网下数据是如何传输的呢?是如何通信的呢?

1.每台主机都有唯一的标识,所以A主机要发送消息给B主机,A主机是需要知道B主机的Mac地址的(消息贯穿A主机的协议栈到达数据链路层,在报头中是存储着B主机的Mac地址的)
2.首先在局域网当中所有的主机都会接收到报文(在逻辑上,每一层协议直接通信,也就是在链路层收到消息。A主机数据链路层通过以太网将报文发送给各主机的的数据链路层)。
3.而其他主机的数据链路层一旦接收到报文,就会进程报头分离解析,根据标识每台主机的ip地址发现不是发送给自己的,就会将报文直接丢弃。
4.如果发现是发送给自己的,就会将有效载荷发送给上一层协议。

在这里插入图片描述

1.碰撞域

往局域网当中发送一条消息,该局域网下的所有主机都会收到,而多台主机同时往局域网中发送消息,那么这些消息就会发送碰撞,发生丢失,而发生碰撞的地方就称为碰撞域,所以以太网是基于碰撞域形成的。

所以以太网下通信是会存在数据碰撞问题的。
在这里插入图片描述

有问题就会有解决方法,如何解决该碰撞问题呢?
【碰撞机制】采用延迟发送
在这里插入图片描述
【网卡工作模式】正常模式与复杂模式
正常模式就是不是发送给自己的报文直接丢弃。
复杂模式就是不是发送给自己的报文不会直接丢弃。
【安全问题】

在这里插入图片描述

六.交换机

在这里插入图片描述

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

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

相关文章

机器学习 低代码 ML:PyCaret 的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

png图片怎么转换成jpg?四个方法搞定不求人

在数字图像处理领域,PNG和JPG是两种常见的图片格式。PNG以无损压缩而闻名,适用于保存透明背景和保留图像细节;而JPG以有损压缩而著称,适用于在较小的文件大小下保持照片质量。有时候,您可能需要将PNG格式的图片转换为J…

<设计模式>单例模式懒汉和饿汉

目录 一、单例模式概述 二、懒汉模式和饿汉模式 1.饿汉模式 1.1代码实现 1.2实现细节 1.3模式优劣 2.懒汉模式 2.1代码实现 2.2实现细节 2.3模式优劣 三、多线程下的线程安全问题 1.懒汉和饿汉线程安全问题分析 1.1安全的饿汉模式 1.2不安全的懒汉模式 2.懒汉线程…

用Python画一条祥龙,祝您新年龙腾万里

用Python画一条祥龙,祝您新年龙腾万里 龙年到了,祝大家新年龙行龘龘,龙腾万里! 从2021年开始,我每年都用Python画一幅当年生肖的图。 用Python标准库turtle画一头金牛,祝您新年牛气冲天! 用P…

SpringBoot项目打包成jar包供第三方使用实践

文章目录 1.使用者手动配置 basePackages1.1 第三方jar项目1.2 使用者项目1.2.1 使用者配置1.2.2 项目测试 2.使用者通过注解的方式引入2.1 第三方jar项目2.2 使用者项目2.2.1 使用者配置2.2.2 项目测试 3.SpringBoot Starter 方式3.1 第三方jar项目3.2 使用者项目3.2.1 使用者…

Unity3d C# 在WebGL平台加载并解析xml文件实现总结

前言 xml是可扩展标记语言,由一系列的元素、属性、值节点等构成的一个树形结构,除了可读性差一点,别的用于存储一些结构化的数据还是比较方便的。这个功能在Unity3d端的实现是比较方便快捷的: void GetXML1() {string filePath …

【Docker进阶】镜像制作-用Dockerfile制作镜像(一)

进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作用dockerfile制作镜像dockerfile是什么dockerfile格式为什么需要dockerfileDockerfile指令集合FROMMAINTAINERLABELCOPYENVWORKDIR 用dockerfile制作镜像 用快照制作镜像的缺陷: 黑盒不可重复臃肿 docker…

Python 轻量级定时任务调度:APScheduler

简述 APscheduler (Advanced Python Scheduler),作用为按指定的时间规则执行指定的作业。提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库…

ES6中新增Array.of()函数的用法详解

new Array()方法 ES6为Array增加了of函数用一种明确的含义将一个或多个值转换成数组。因为用new Array()构造数组的时候,是有二意性的。 构造时,传一个参数,实际上是指定数组的长度,表示生成多大的数组。 构造时,传…

问题:媒体查询语法中, 可用设备名参数表示“文档打印或预览“的是 #媒体#媒体#其他

问题:媒体查询语法中, 可用设备名参数表示"文档打印或预览"的是 A、C.?screen B.?projection C、A.?print D.?speech 参考答案如图所示

【JavaEE】UDP协议与TCP协议

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

【大厂AI课学习笔记】1.4 算法的进步(4)关于李飞飞团队的ImageNet

第一个图像数据库是ImageNet,由斯坦福大学的计算机科学家李飞飞推出。ImageNet是一个大型的可视化数据库,旨在推动计算机视觉领域的研究。这个数据库包含了数以百万计的手工标记的图像,涵盖了数千个不同的类别。 基于ImageNet数据库&#xf…