「计网」网络初识

🎇个人主页:Ice_Sugar_7
🎇所属专栏:计网
🎇欢迎点赞收藏加关注哦!

网络初识

  • 🍉IP 地址 & 端口号
  • 🍉网络协议
    • 🍌TCP/IP 网络协议
  • 🍉封装和分用
  • 🍉服务器 & 客户端
  • 🍉TCP & UDP

🍉IP 地址 & 端口号

以生活中网购举例,我买东西后商家发货需要知道我的地址,知道地址才知道要把快递送到哪里,还要有我的手机号(收件人电话),这样快递小哥才可以联系到我,通知我取件

类比到网络中,收件人地址就是 IP 地址;收件人电话就是端口号
IP 地址使用数字描述了一个设备在网络上的位置,这个数字是一个 32 位整数,为了方便表示,我们往往会把 IP 地址表示成点分十进制的形式:使用 3 个 . 把这 4 个字节分成 4 个部分,每部分 1 个字节,取值范围为 0-255(字节的取值范围)。比如 192.168.2.101
有了 IP 可以确定主机,但是一台主机上可能有多个程序在使用网络,所以用端口号来区分一个主机上不同的应用程序,主机收到网络数据后就可以根据端口号把数据交给对应的程序使用
每个程序在网络通信的过程中都需要有一个端口号,端口号也是一个整数,可以是用户手动指定的,也可以是系统自动分配的,不管是哪种,都遵循一个规则:程序之间使用的端口号不能冲突

其实在一次网络通信的过程中,涉及到的 IP 和 端口号各有两个。在上述网购的例子中,快递上除了有我的地址、手机号,还有商家的发货地址和手机号。为了区分,将收件人地址、电话分别称为目的 IP目的端口;将寄件人地址、电话分别称为源 IP源端口,从哪儿来的就称为源,到哪儿去就称为目的


🍉网络协议

协议是网络中的一个核心概念
所谓协议,就是一种通信过程中的约定,发送方和接收方需要提前商量好数据的格式,才能确保二者之间能正常沟通

网络通信过程中涉及到的细节其实是非常多的,需要约定好各方各面的内容,如果只用一个协议来完成通信,那么这个协议会非常复杂

所以使用多个协议,每个协议约定好其中一小部分内容。因为协议比较多,所以引入协议分层,把功能定位相似的协议放在同一层,让这些协议能更好地配合。上层协议会调用下层协议的功能,下层协议给上层协议提供服务,同时规定只有相邻的层次可以沟通,不能跨层次调用(否则容易混乱)

🍌TCP/IP 网络协议

TCP/IP 网络模型由五个层次构成,从上到下分别为:

  1. 应用层:关注传输的数据在应用程序中如何使用
  2. 传输层:负责网络数据包的端到端之间的传输,即关注从哪里来,到哪里去
  3. 网络层:负责起点到终点之间的路径规划
  4. 数据链路层:负责两个相邻节点之间的传输
  5. 物理层:通信过程中的基础设施

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也就是 TCP/IP 五层模型的下面四层
对于路由器,它实现了从网络层到物理层,也就是下面三层
对于交换机,它实现了从数据链路层到物理层,即下面两层


🍉封装和分用

这两个操作是网络传输数据中最核心的流程,下面以发送消息为例进行说明
比如 A 通过微信给 B 发送一个 hello

  1. 封装

在把消息发送出去之前,会进行一系列封装
首先在应用层,微信会从消息输入框获取到输入的 hello,然后把这个字符串构造成一个应用层的数据包,微信这样的程序内部设置了一个应用层协议,这个协议往往是实现这个程序的程序员自己定义的。应用层数据包就是按照应用层协议约定的格式来构造的
假设约定的格式为:发送方的微信号;接收方的微信号;发送时间;正文
那么 hello 就会构造成这样的数据包:

在这里插入图片描述
然后传输层会把上述数据作为一个整体,再构造成一个传输层的数据包。传输层涉及到的协议主要是 TCPUDP,这里为了简便,假定是使用 UDP 来进行通信,就会构造成一个 UDP 的数据包,如下:

在这里插入图片描述

像上面这种添加报头的过程,就称为封装(这里的封装和我们之前面向对象提到的封装差异是比较大的),所谓的封装其实就是字符串拼接,只不过拼的报头具有一定的结构
报头就好比是快递袋上面贴的标签,可以承载一些用来转发数据的关键信息。对于 UDP 报头来说,承载的最重要的信息就是源端口和目的端口
拼好传输层数据包之后就要把这个数据包进一步交给下层——网络层,继续进行封装

这里的交给下层指的是下层协议提供一组 api 或方法,上层调用 api 或方法,并把刚才构造好的数据通过参数传过去,这样下层协议就可以来处理这个数据

接下来到了网络层,这里涉及到的最核心的协议就是 IP 协议。网络层会把刚才传输层的 UDP 数据包作为一个整体,再拼上 IP 协议的报头,构成一个 IP 数据包

在这里插入图片描述

构造成完整的 IP 数据包后,IP 协议会继续调用数据链路层的 api,把数据交给数据链路层的协议进行处理
数据链路层涉及到的核心协议是以太网,以太表示网络数据传输的介质,以太网会把 IP 数据包作为一个整体,在其前后分别添加上帧头和帧尾,组成以太网数据帧

在这里插入图片描述

接下来就会把这样的数据交给物理层
物理层会把以太网数据帧中二进制结构转换为光信号/电信号/电磁波,然后发送
经过上面一系列操作,数据才从你的电脑/手机上发送出去

  1. 分用

数据包到达 B 的网卡后,B 处理数据包的过程就称为分用分用就是封装的逆过程
首先 B 的物理层收到光信号/电信号/电磁波后会把物理信号转换为数字信号(二进制序列),得到一个以太网数据帧,进一步把这个数据帧交给数据链路层处理
到达数据链路层后以太网协议会解析以太网数据帧,取出其中的载荷交给上层协议
网络层会按照 IP 协议的格式进行解析,取出载荷再交给上层协议
传输层按照 UDP 协议格式来解析,同样取出载荷交给上层
最后在应用层按照微信应用程序内部的应用层协议格式来解析数据,微信程序拿到这些信息之后,就会在 B 的设备中弹出提示,并把消息显示在聊天窗口上

从 A 发出到 B 接收,中间还要通过一系列交换机或路由器进行数据转发,不过即使经过交换机或路由器,上面的封装、分用过程仍然适用,只不过封装分用的程度不一定到应用层

在这里插入图片描述
在上图中,假设从 A 右边第一个节点是交换机,那么这个交换机就会把上述光电信号转换为以太网数据帧二进制数据,交给数据链路层,它就会对上述数据进行解析。在解析过程中,一方面要取出载荷部分,另一方面要解析帧头中的关键信息,根据帧头中的信息决定下一步要把数据发送到哪里,由此再构造出新的以太网数据帧


🍉服务器 & 客户端

在网络中,主动发起通信的一方称为客户端;被动接受的一方称为服务器
客户端给服务器发送的数据称为请求(request);服务器根据请求给客户端返回的数据称为响应(response)
同一个程序在不同的场景中,可能是客户端,也可能是服务器

在这里插入图片描述


🍉TCP & UDP

TCP 和 UDP 是传输层涉及到的两个协议
TCP 有四个特点:有连接、可靠传输、面向字节流、全双工
UDP 也有四个:无连接、不可靠传输、面向数据报、全双工
下面简单说一下这些特点
首先是连接,这里的连接是抽象意义上的连接,即虚拟的连接。比如打电话就是有连接的通信方式,我这边打电话给你,你得先接通了,然后我才能说话,你可以接,也可以不接;而无连接则是发微信这种方式,不管你同意与否,我都可以发消息(不拉黑的前提下)
连接本质上是记录对方的信息。客户端有一些数据结构记录谁是它的服务器;与之对应,服务器也有一些数据结构记录谁是它的客户端

然后就是传输的可靠性,在这里谈到的可靠传输是指发送方能够知道对方是否收到了当前数据(具体的实现与 TCP 的确认应答、超时重传有关,这两个机制会在后面讲),而不是保证数据 100% 到达对方那里

接下来几个特点放在一张图里面对比:

在这里插入图片描述

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

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

相关文章

乡村振兴与乡村旅游创新:创新乡村旅游产品,提升旅游服务水平,打造特色乡村旅游品牌,助力美丽乡村建设

目录 一、引言 二、乡村旅游产品的创新 (一)挖掘乡村特色资源 (二)注重产品体验性 (三)创新旅游产品形态 三、旅游服务水平的提升 (一)加强基础设施建设 (二&…

如何上传模型素材创建3D漫游作品?

一、进入3D空间漫游互动工具编辑器 进入720云官网-点击“开始创作”-选择3D空间漫游-进入到作品创建页面。 二、上传模型及素材,创建生成3D空间漫游模型 1.创建3D空间作品:您可以选择新建空白作品或使用720云提供的预设空间模板,本篇主要介绍…

[手游] Florence逝去的爱弗洛伦斯

图片处理工具箱Hummingbird : Hummingbird使用智能压缩技术来减少文件的大小,支持:jpg、png、webp、svg、gif、gif、css、js、html、mp4、mov,可以设置压缩的同时等比例缩放图片或视频的尺寸。可以拖放文件夹压缩,一次最多可处理1…

【vue3 + Echarts 】中国地图省市区下钻,并返回上级

实现效果如果&#xff1a; echarts版本&#xff1a; 地图数据来源&#xff1a;阿里云数据可视化平台 代码 <template><div class"mapWrapper"><a-button type"primary" click"goBack">返回上级</a-button><div…

一步步实现知乎热榜采集:Scala与Sttp库的应用

背景 在大数据时代&#xff0c;网络爬虫技术发挥着不可或缺的作用。它不仅能够帮助我们快速地获取互联网上的信息&#xff0c;还能处理和分析这些数据&#xff0c;为我们提供深刻的洞察。知乎&#xff0c;作为中国领先的问答社区&#xff0c;汇聚了各行各业的专家和广大用户的…

【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名

【LeetCode刷题】Day 14 题目1&#xff1a;153.寻找旋转排序数组中的最小值思路分析&#xff1a;思路1&#xff1a;二分查找&#xff1a;以A为参照思路2&#xff1a;二分查找&#xff0c;以D为参照 题目2&#xff1a;LCR 173.点名思路分析&#xff1a;思路1&#xff1a;遍历查找…

(2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X

Lumina-T2X: Transforming Text into Any Modality, Resolution, and Duration via Flow-based Large Diffusion Transformers 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 …

使用Streamlit和MistralAI创建AI聊天机器人应用

大家好&#xff0c;创建交互式和用户友好型的应用程序通常需要复杂的框架和耗时的开发过程。Streamlit是一个Python库&#xff0c;它简化了以数据为重点的网络应用程序的创建过程&#xff0c;使开发人员和数据科学家能够快速将他们的想法转化为交互式仪表盘和原型。本文将介绍使…

『 Linux 』文件系统

文章目录 磁盘构造磁盘抽象化 磁盘的寻址方式磁盘控制器磁盘数据传输文件系统Inode数据块(Data Blocks)超级块(SuperBlock)块组描述符(Group Descriptor) 磁盘构造 磁盘内部构造由磁头臂,磁头,主轴,盘片,盘面,磁道,柱面,扇区构成; 磁头臂&#xff1a;控制磁头的移动,可以精确地…

vs2019 QT UI 添加新成员或者控件代码不提示问题解决方法

右键点击头文件&#xff0c;添加ui的头文件 添加现有项 找到uic目录的头文件 打开ui,QtWidgetsApplication2.ui,进行测试 修改一个名字&#xff1a; 重点&#xff1a; 设置一个布局&#xff1a; 点击生成解决方案&#xff1a; 以后每次添加控件后&#xff0c;记得点击保存 这样…

flink 作业报日志类冲突的解决方案

文章目录 背景思考初步解决方案深入思考下终极解决方案总结 背景 实时作业在页面提交任务后&#xff0c;报NoSuchMethodException 方法&#xff0c;看了下是关于log4j的&#xff0c;首先是作业升级了很多依赖的版本&#xff0c;其次flink 也升级 到了1.19版本 思考 打的Jar有…

CSS选择器的常见用法

大家好&#xff0c;本期博客整理了前端语言 CSS 中选择器的入门级常见用法&#xff0c;希望能对大家有所帮助 CSS 选择器的主要功能就是选中⻚⾯指定的标签元素&#xff0c;选中了元素&#xff0c;才可以设置元素的属性。 那么&#xff0c;css选择器有哪几种呢&#xff1f; 以…

全面理解渗透测试

揭秘网络安全的秘密武器&#xff1a;全面理解渗透测试 在数字化时代&#xff0c;网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发&#xff0c;给个人、企业和国家带来了巨大的损失。为了应对这一挑战&#xff0c;渗透测试作为一种重要的网络安全评估手段&#xff0…

Docker-----emqx部署

emqx通过Docker容器化部署流程 1.创建持久化挂载目录 mkdir -p /home/emqx/etc ------挂载emqx的配置文件目录 mkdir -p /home/emqx/data ------挂载emqx的存储目录 mkdir -p /home/emqx/log ------挂载emqx的日志目录 [root home]# mkdir -p /home/emqx/etc [root home]# mkd…

【Redis】 使用Java操作Redis的客户端

文章目录 &#x1f343;前言&#x1f334;项目的创建&#x1f38b;引入依赖&#x1f333;配置端⼝转发&#x1f332;更改 Redis 配置文件&#x1f384;连接 Redis Server⭕总结 &#x1f343;前言 我们使用 Java 操作 Redis 客户端时我们需要进行以下操作。 注意&#xff1a;J…

Linux上部署和安装MinIO

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法&#xff0c;大数据&#xff0c;深度学习 &#x1f492; 公众号…

2024年6月1日 (周六) 叶子游戏新闻

Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时&#xff0c;他们对游戏大作的价格上涨做出了评论。几年来&#xff0c;游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示&#xff0c;电子游戏行业…

vulnhub靶场之FunBox-10

一.环境搭建 1.靶场描述 As always, its a very easy box for beginners. This works better on VitualBox rather than VMware 2.靶场下载 Funbox: Under Construction! ~ VulnHub 3.靶场启动 靶场IP地址我们不知道&#xff0c;但是网段我们知道是192.168.2.0/24 二.信息…

stack学习

std::stack 类是一种容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO&#xff08;先进后出&#xff09;数据结构。该类模板用处为底层容器的包装器——只提供特定函数集合。栈从被称作栈顶的容器尾部推弹元素。 operator 赋值给容器适配器 (公开成员函数) 元素访问…

Base64码转换

title: Base64码转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将图…