计算机网络:网络通信相关概念入门

目录

  • 一、网络发展背景
  • 二、理解网络通信
  • 三、理解IP地址
    • 1.简述IP地址
    • 2.IP地址的版本
    • 3.提高地址利用率的技术
  • 四、理解端口
    • 1.简述端口
    • 2.使用端口的原因
  • 五、理解网络通信协议

一、网络发展背景

网络发展背景:

  最初的计算机是单机,那么单机是这样传输数据的:A单机和B单机,在A单机处理完数据后,将装有数据的存储介质交付给B单机,然后B单机读取数据并处理。毫无疑问,这样太麻烦了。
  因此逐步诞生了网络的概念,使用网络来进行数据的传输,大大提升了数据传输的效率。

网络的类型:

  • 局域网:网络覆盖范围在1km之内的网络。
  • 城域网:网络覆盖范围在20km之内的网络。
  • 广域网:网络覆盖范围在20km以上的网络。

  但其实局域网与广域网也只是一个相对的概念,比如整个中国的互联网对于整个世界的互联网来说,也是一个局域网。

二、理解网络通信

  网络通信就是升级版的进程间通信。用QQ聊天来举例,A用户用QQ给B用户发送消息,他们进行的就是网络通信。A用户的主机上有一个QQ进程,B用户的主机上也有一个QQ进程,他们互相发送消息的本质就是A用户的QQ进程和B用户的QQ进程进行通信。因此网络通信就是不同主机间的进程间通信。

三、理解IP地址

1.简述IP地址

  在生活中其实很多时候都可以听到IP地址这个概念,IP地址其实就用来在网络中唯一标识一个主机的,就像是我们的身份证一样。

  在寄快递的时候,我们肯定要知道收货人的地址,不然快递怎么寄。在网络通信中传输数据时,肯定要知道接收方的地址才可以进行数据的发送,不然数据往哪里发呢。

  寄快递时包裹上面不但要有收件人的地址,还要有寄件人的地址。在网络通信中,我们把发送方称为源端接收方称为目的端。每一条数据就相当于一个包裹,数据中自然要包含目的端IP源端IP

  也就是说,IP地址是负责记录这条数据的发送主机和接收主机的,至于谁来记录这条数据是发送主机的哪个进程发送的,是接收主机哪个进程接收的,且看下文。

2.IP地址的版本

 IP地址也是有版本之分的,共两个版本:

  • IPv4:这是早期的IP地址版本,也是使用最多的。
  • IPv6:这是为了扩大地址数量而提出的新版本,目前还没有全面普及。(不兼容IPv4)

 IPv4地址的数据类型:

  • uint32_t:32位无符号整型,也就是说IPv4地址只有32位

 IPv6地址的数据类型:

  • uint8_t ip[16]:这是一个数组类型,数组共16个元素,每个元素的数据类型是8位无符号整型,也就是说IPv6地址的长度是128位

3.提高地址利用率的技术

  之所以推出IPv6地址就是因为IPv4地址不够用了,但是IPv6并不向前兼容IPv4,所以又针对IPv4提出了两项技术来提高地址的利用率。

  1. DHCP:动态地址分配。谁上网就给谁分配IP地址,这样就不会有人一直占用IP地址但不使用,但现在我们的设备基本一直都处于联网状态,所以貌似用处没那么大。
  2. NAT:网络地址转换技术。组建私网的技术,私网中主机对外通信使用的是同一个公网IP地址,这样就节省了大量IP地址。

四、理解端口

1.简述端口

  上面用QQ聊天举例说明了网络通信的本质,这里再对上面内容进行更新。还是以送货为例子,上面已经知道了要把信息从哪里发到哪里,假设是发到爱情公寓,现在包裹到爱情公寓楼下了,快递员小哥看着没有收件人的包裹,陷入了沉思~~~~(当然,没有发货人也是不行的)。想必看到这里也就知道了,咱这条信息还差点东西啊,没收件人怎么行。

  既然快递没有收件人不行,那么网络中的数据没有收件人自然也不行,收件人自然就是目的主机上接收该消息的进程,那么用什么信息在网络数据包中标识要发送给哪个进程呢?那就是端口。

  端口,也就是PORT。端口是一个uint16_t 类型的数据,也就是一个无符号16位整形数据。其实端口在生活中也是挺常见的,因为有时用某个软件的时候,可能会遇到提示:某某端口被占用。那么端口究竟是干啥的?

  端口其实就是用来在一台主机中标识一个进程。一个进程可以同时被多个端口标识,但一个端口只能标识一个进程。

  我们用QQ给其他用户发送数据的时候,发送的数据不仅包含源端IP和目的端IP,也包括了我们自己的QQ进程的端口,以及目的端的QQ进程的端口,也就是说网络通信中的每条数据都包括了源端口和目的端口(发件人和收件人)。

  可以这么理解,IP地址就像是收货人的地址,而端口则表明了一个具体的收货人。通过IP地址知道了要把数据发送给哪个主机,也就是知道了要把快递送到哪个地址。通过端口知道了要把数据发送给主机中具体哪个进程,也就是把快递交给收货人。

2.使用端口的原因

  问题来了,进程不是有pid吗,pid就可以标识一个进程啊,为啥还要用端口来标识?

  还是用QQ聊天来举例,我们发送消息的时候并不是两个用户直接进行数据传输的。A用户和B用户在发送消息时,其实在它们之间还有一个服务器,A用户的消息首先发送给服务器,然后服务器把数据发送给B用户,这才是完整的通信过程。如下图所示

通信流程

那么这个通信流程跟端口有什么关系?

 (1)试想,如果我们使用进程pid来在网络通信中标识进程。A用户和B用户通信的过程中,A用户发送给服务器的数据是不是就包括了A用户QQ进程的pid以及B用户QQ进程的pid(当然还包括了源端IP和目的端IP)。

 (2)然后服务器根据指定的B用户的QQ进程的pid去发送数据。此时如果B用户突然退出QQ,然后重新打开QQ软件并登录,那么是不是就会重新创建pcb,自然就有了新的pid,可是这个新的pid和A用户发送的消息中包含的pid是一样的吗?这个谁也说不准,所以为了避免这种情况,才会使用端口这个东西。

那么A用户发送的消息如何找到服务器呢?

 (1)服务器的端口和IP地址一般都是固定的,并且它固定在我们安装的程序中,所以用户不需要操心这个,程序的安装包里就内置有服务器的IP及端口号。咱们用的应用程序发送数据时,自动就使用了内置的IP和端口作为目的IP和目的端口。

 (2)但是如果服务器迁移了,服务器的IP地址就会变化,我们正在使用的客户端就用不成了,就需要下载新的客户端,新的客户端中会内置新的服务器各项信息。

为什么一个进程可以有多个端口?

  主要还是为了效率。看视频的时候,一个端口接收视频,一个端口接收音频,这样看视频就可以保证音画同步。

五、理解网络通信协议

网络通信协议就是约定,约定在网络通信中数据传输时使用的格式。

为什么要有协议?

(1)这个如果用日常生活中的事情来举例可以理解得非常清楚。一个中国人,一个英国人,如果他们都不懂对方的语言,一个说中文,一个说英文,这咋沟通。

(2)两个人之间说的话其实就是数据,说话的过程其实就是数据传输的过程,中国人说中文使用的是中文的数据格式,英国人说英文使用的是英文的数据格式,他们之间采用的数据格式不同,中国人就接收到英语后,如果按照中文思维进行解析,这解析的是个寂寞~~~~,英国人也是一样道理,因此数据的发送端和目的端一定要采用统一的格式才可以。

(3)因此我们可以规定一种语言,让所有的人都必须用同一种语言进行交流,这样就没有沟通障碍了(也就是大家采用同样的数据格式)。让源端和目的端使用同样的格式进行数据的发送和接收,这样就可以正常通信。这其实就是协议。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【金融量化】Python实现根据收益率计算累计收益率并可视化

1 理论 理财产品(本金100元) 第1天:3% :(13%) ✖ 100 103 第2天:2% :(12%)✖ 以上 103 2.06 第3天:5% : (15%)✖ 以上…

企业直播MR虚拟直播(MR混合现实直播技术)视频介绍

到底什么是企业直播MR虚拟直播(MR混合现实直播技术)? 企业直播MR虚拟直播新玩法(MR混合现实直播技术) 我的文章推荐: [视频图文] 线上研讨会是什么,企业对内对外培训可以用线上研讨会吗&#x…

2023年新学期12306高铁火车学生票如何在线核验享受优惠?

2023学年优惠资质核验已开始,完成学生优惠资质核验后,您可以在线购买2022年10月1日至2023年9月30日的学生优惠票。(注:非该时间段需要重新核验,可享受学生优惠票); 『扩展阅读』 1、美团外卖红…

QT:UI控件(按设计师界面导航界面排序)

基础部分 创建新项目:QWidget,QMainWindow,QDialog QMainWindow继承自QWidget,多了菜单栏; QDialog继承自QWidget,多了对话框 QMainWindow 菜单栏和工具栏: Bar: 菜单栏:QMenuBar&#xff0…

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据) 1.模型原理1.1 模型原理1.2 数学模型 2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 随机森林(Random Forest)是一种集成学习方法…

【深度学习】PyTorch快速入门

【深度学习】学习PyTorch基础 介绍PyTorch 深度学习框架是一种软件工具,旨在简化和加速构建、训练和部署深度学习模型的过程。深度学习框架提供了一系列的函数、类和工具,用于定义、优化和执行各种深度神经网络模型。这些框架帮助研究人员和开发人员专注…

RabbitMQ 安装教程

RabbitMQ 安装教程 特殊说明 因为RabbitMQ基于Erlang开发,所以安装时需要先安装Erlang RabbitMQ和Erlang版本对应关系 查看地址:www.rabbitmq.com/which-erlan… 环境选择 Erlang: 23.3及以上 RabbitMQ: 3.10.1Windows 安装 1. 安装Erlang 下载地…

Spark 学习记录

基础 SparkContext是什么?有什么作用? https://blog.csdn.net/Shockang/article/details/118344357 SparkContext 是什么? SparkContext 是通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDDs 、累加和广播变量( Br…

【css】渐变

渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线) 径向渐变(由其中心定义) 1、线性渐变 语法:background-image: linear-gradient(direction, co…

黑客必备的操作系统——kali linux安装

大家经常会在电视里面看到各种炫酷的黑客操作,那么黑客一般用什么操作系统呢?今天小训带大家来安装黑客必备的kali linux-2022操作系统,有兴趣的一起来学习下吧! 1、安装前准备 1.1 VMware下载 VMware官网下载: ht…

开源力量再现,国产操作系统商业化的全新探索

文章目录 1. 开源运动的兴起2. 开源力量的推动3. 国产操作系统的崭露头角3.1 国产操作系统有哪些 4.国产操作系统的商业化探索5.开源力量对国产操作系统商业化的推动 操作系统作为连接硬件、中间件、数据库、应用软件的纽带,被认为是软件技术体系中最核心的基础软件…

linux4.0新增32位ARM的系统调用

修改内核源码 Linux系统为每一个系统调用赋予一个系统调用号。当应用程序执行一个系统调用时,应用程序就可以知道执行和调用到哪个系统调用了,从而不会造成混乱。系统调用号一旦分配之后就不会有任何变更,否则已经编译好的应用程序就不能运行…

runtime error: member access within misaligned address(力扣最常见错误之一)

runtime error: member access within misaligned address(力扣最常见错误之一) 前言原因和解决办法总结 前言 最近博主在刷力扣时,明明代码逻辑都没问题,但总是报下面这个错误: runtime error: member access within…

SQL-每日一题【1251. 平均售价】

题目 Table: Prices Table: UnitsSold 编写SQL查询以查找每种产品的平均售价。average_price 应该四舍五入到小数点后两位。 查询结果格式如下例所示: 解题思路 1.题目要求查询每种产品的平均售价。给出了两个表,我们用聚合查询来解决此问题。 2.首先我…

腾讯会议:云上协奏,远程韶华

腾讯会议的原理及历史 摘要 本论文介绍了腾讯会议的原理和历史。腾讯会议是一款基于云计算和通信技术的在线会议平台,由腾讯公司推出。通过分析腾讯会议的工作原理和演进历史,我们可以深入了解该平台是如何实现高效、便捷、安全的远程协作和沟通的。 1. 引言 近年来,随着…

ruby send call 的简单使用

refer: ruby on rails - What does .call do? - Stack Overflow Ruby使用call 可以调用方法或者proc m 12.method("") # > method gets the method defined in the Fixnum instance # m.class # > Methodm.call(3) #> 15 # 3 is passed inside the…

Mr. Cappuccino的第63杯咖啡——Spring之AnnotationConfigApplicationContext源码分析

Spring之AnnotationConfigApplicationContext源码分析 源码分析 源码分析 以上一篇文章《Spring之Bean的生命周期》的代码进行源码分析 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(SpringConfig02.class); LifeCycleBe…

如何在Stream流中分组统计

上面是今天碰到需求,之前就做过类似的分组统计,这个相对来说比较简单,统计的也少,序号和总预约人数这两部分交给前端了,不需要由后端统计,后端统计一下预约日期和检查项目和预约人数就行; Overridepublic List<ItemStatisticsVo> statistics(ItemStatisticsModel itemSta…

智能与本体

世界的本体是一个复杂而广泛的话题&#xff0c;可以根据不同的学科、思想体系和信仰背景来进行不同的解释和理解。它涉及到人类对于现实和存在的思考&#xff0c;以及对于世界本质的追寻和探索。 在哲学上&#xff0c;世界的本体指的是存在的实质或基本特征。它探讨了世界的本源…
最新文章