【网络编程】网络基础(一)

news2024/9/27 9:27:34

文章目录

  • 一、计算机网络背景
    • 1.网络发展
    • 2.认识 "协议"
  • 二、网络协议初识
    • 1.协议分层
    • 2.OSI七层模型
    • 3.TCP/IP五层(或四层)模型
  • 三、网络传输基本流程
    • 1.网络传输流程图
    • 2.数据包首部(报头)
    • 3.数据包封装和分用
      • 封装
      • 分用
    • 4. 跨局域网主机通信
  • 四、网络中的地址管理
    • 1.认识IP地址
    • 2.认识MAC地址

一、计算机网络背景

1.网络发展

独立模式: 计算机之间相互独立;

起初,计算机是以单机模式被广泛使用,这种方式也被称为独立模式。

在这里插入图片描述
随着计算机的发展,人们不再局限于独立模式,而是将一个个计算机连接起来,形成一个计算机网络。连接多台计算机实现信息共享,同时还嗯个在两台物理位置较远的机器之前进行数据传输。
网络互联: 多台计算机连接在一起, 完成数据共享;
在这里插入图片描述
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
在这里插入图片描述
这里所谓的“局域网”和“广域网”都是一个相对的概念,我们可以把一个宿舍看成一个“局域网”,也可以把一个学校看成一个“局域网”。
在这里插入图片描述

2.认识 “协议”

在计算机通信领域,有着各种各样的协议,协议本身就是一种预定。我们来通过下边一个例子来理解协议是什么:

当我们在学校时,想要联系我们的父母,有时可能是为了保平安,有时可能是为了给父母要生活费,有时也可能是为了其他的事情,但是话费太贵了,但是如果打电话没有接通就不会扣费,所以我们提前与家里有了下边的约定:
1.如果电话响一声,说明是在给家里保平安。
2.如果电话响两声,说明是没有生活费了,需要家里打钱过来。
3.如果电话响三声以上,就可能是其他的事情,这时父母就要接听电话了。
有了上边的约定,父母甚至可以不接听电话就知道我们想要做什么,大大提高了效率,这就是协议的作用。

在这里插入图片描述

简单来说,协议就是计算机和计算机之间通过网络实现通信时视线达成的一种“约定”。这种约定对于不同的厂商,不同的软硬件,只要遵守这一个协议,就可以实现网络通信。

计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;

二、网络协议初识

1.协议分层

关于协议的分层,我们通过下边打电话的例子来解释一下,在此,我们只考虑语言层和通话设备层的这两个分层的情况:
在这里插入图片描述
我们可能认为与对方通话就是直接把声音传输过去,其实我们对话是通过电话把声音转换为电子信号,此时的语言层和通话设备层是分离的,那就意味着我们此时将通话语言从汉语变为英语也可以进行对话,把设备有电话改为无线电也是可以的。
但是在实际的网络通信更加复杂,可能是多层的。


操作系统要对协议进行管理,就需要先描述再组织。
协议的本质就是软件,软件就可以进行分层。
其实协议也是分层的。

信息传输需要以下问题:

1.如何处理数据
2.如何处理丢包问题
3.目标主机的定位问题
3.下一跳的位置

其实如何处理数据就是应用层的要解决的问题,而处理丢包就是传输层的问题,目标主机的定位就是网络层的问题,而解决下一跳的位置就是数据链路层的问题。

2.OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.

在这里插入图片描述
而OSI模型只是一个参考模型,对于各层都只是有一个粗略的界定,并没有具体实现协议和接口,而后序有很多人根据七层模型实现了具体的协议和接口,例如TCP/IP协议。

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

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆
(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层

在这里插入图片描述
通过OSI七层模型和TCP/IP五层模型作对比,其实下三层都是相同的,只是将OSI七层模型中的应用层,表示层,会话层合并成为了应用层。其实传输层和网络层是嵌在操作系统内部的,我们在应用编写程序,实际上还是使用系统调用接口来编写的。
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
一般而言

对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层;

但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);

三、网络传输基本流程

1.网络传输流程图

在这里插入图片描述
上图可以看作两个主机之间进行网络传输,当客户在应用层发送某个信息时,不会直接通过应用层将数据发给服务器,而是先建立TCP连接,传输给TCP层,再进行IP模块的处理,最后交给数据链路层,通过以太网传输给服务端,再逐步向上递交,最后传输给服务器。但是在此处有一个最重要的部分就是报头,也就是数据首部


2.数据包首部(报头)

在每个数据分层中,在发送数据时都会发送一个数据首部,也就是报头,包含了协议中一些必要的信息,例如要发送到目标主机的地址,目标线程的端口号等等,从下一层看,报头和上一层的数据统一被看作数据。
在这里插入图片描述
例如在应用层会在应用层数据的基础上加上应用层报头,传递给传输层之后,应用层的数据和应用层报头统一被看作数据,再加上传输层的报头后之后才会交给网络层。

3.数据包封装和分用

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

封装

每一层都会对数据与报头进行封装,最后在以太网传输时,就会包含每一层的的相关信息,在进行分包解用时,就会知道应该交给上一层的哪一个协议。

在这里插入图片描述

分用

而进行分用时,从以太网传输过来的数据帧,已经包含了之前每一层的相关信息,例如目标主机,目标端口号,要传输到上一层的协议。所以进入链路层之后,到网络层就可以根据以太网首部中的类型进行选择要把数据传输给谁。
在这里插入图片描述

4. 跨局域网主机通信

如果两个主机在一个局域网内部,就一定可以进行通信,例如上图中,客户端和服务器可以进行通信,但是下图就有所不同,客户端和服务器在不同的局域网中,所以为了解决这个问题,就有了路由器。
在这里插入图片描述

每个路由器都会有一个路由表,表中每条路由表项都指明了数据包要到达某网络或某主机应通过路由器的哪个物理接口发送,以及可到达该路径的哪个下一跳路由器,或者不再经过别的路由器而直接可以到达目的地。
路由器收到数据包后,会根据数据包中的目的IP地址选择一条最优的路径,并将数据包转发到下一个路由器,路径上最后的路由器负责将数据包送交目的主机。最终将数据包通过最优路径转发到目的地。

在这里插入图片描述
由于以太网和令牌环网属于不同的通信标准,所以在在以太网处加的报头和令牌环网处加的报头是不同的,如果直接传输,那肯定是不能识别的,所以必须通过路由器来路由,路由器和客户端属于一个局域网,与服务器也属于一个局域网,所以可以互相通信,当数据帧从以太网传输给路由器之后,解包到网络层,再添加报头给令牌环驱动程序再通过令牌环网传输给服务端,所以路由器起到了一个中间传输的作用。
在这里插入图片描述


在此处,我们也可以发现对网络进行分层有另外一个好处,哪怕处于不同的局域网,在上层看来,并没有什么不同的,在网络层以上数据和报头都是相同的,只是在数据链路层添加的报头不同,这就有点像Linux下一切皆文件的概念,可能底层是不同的硬件,但是在上层看来都是一个一个的文件结构体,只是在使用时在驱动层去使用每个不同的函数,就是达到访问某个硬件的目的。

在这里插入图片描述

四、网络中的地址管理

1.认识IP地址

IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4

IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

2.认识MAC地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).

那么IP地址和MAC地址有什么联系和区别呢?

例如,我们现在要从陕西西安前往新疆喀什旅游,我们的出发地就是西安,目的地就是喀什,这就类似于IP地址,我们只需记录源IP和目的IP,这在路途中是不变的,是一个大方向,而在数据链路层的MAC地址就是变化的,要以这个IP地址为大方向,选择路途中一次次的小方向,例如先从想西安到兰州,再从兰州前往张掖,其实这个地址就是MAC地址,MAC地址是一直变化的,每次的地址是有链路层根据IP地址选择的。

在这里插入图片描述
在Linux中使用ifconfig指令也可以查看本台主机的IP地址
在这里插入图片描述

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

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

相关文章

【C站话题】如何看待调查称半数年轻人存款不足10万?

*近日,有调查称“大概五分之一的年轻人存款在一万元以内。10万元存款是一个“坎”,存款超过10万就会超过53.7%的人。”“年轻人”“存款”两个词碰撞在一起,引来了广泛的关注和讨论。你认为年轻人存款难吗?可以从以下几个角度发表…

多模态大语言模型 LlaVA 论文解读:Visual Instruction Tuning

代码:https://github.com/haotian-liu/LLaVA 总览 在这篇论文中,作者首次尝试使用纯语言 GPT-4 生成多模态语言图像指令遵循数据(insruction-following data)。 通过对此类生成数据进行指令调整,推出了大型语言和视觉…

RocketMQ --- 实战篇

一、案例介绍 1.1、业务分析 模拟电商网站购物场景中的【下单】和【支付】业务 1.1.1、下单 流程 用户请求订单系统下单 订单系统通过RPC调用订单服务下单 订单服务调用优惠券服务,扣减优惠券 订单服务调用调用库存服务,校验并扣减库存 订单服务调…

MiniGPT4模型训练与部署

第二式:MiniGPT4模型训练与部署 1.环境搭建1.1 下载MiniGPT-4代码1.2 创建虚拟环境 2.Vicuna模型准备2.1 下载vicuna delta weights2.2 下载原始llama weights2.3 合成真正的working weights2.4 配置Vicuna模型路径 3. MiniGPT-4 checkpoint准备3.1 下载MiniGPT-4 c…

《二叉搜索树》

文章目录 一、二叉搜索树的概念二、二叉搜索树的实现2.1 插入迭代插入递归插入 2.2 查找迭代查找递归查找 2.3 删除迭代删除递归删除 2.4 中序遍历 三、二叉搜索树的应用1、K模型2、KV模型 四、二叉树的性能分析 一、二叉搜索树的概念 二叉搜索树又叫做二叉排序树。 左子树的…

diffusion model(三)—— classifier guided diffusion model

classifier guided diffusion model 背景 对于一般的DM(如DDPM, DDIM)的采样过程是直接从一个噪声分布,通过不断采样来生成图片。但这个方法生成的图片类别是随机的,如何生成特定类别的图片呢?这就是clas…

前沿重器[35] | 提示工程和提示构造技巧

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

MySQL数据库主从复制与读写分离(图文详解!)

目录 前言 一:MySQL数据库主从复制与读写分离 1、什么是读写分离? 2、为什么要读写分离呢? 3、什么时候要读写分离? 4、主从复制与读写分离 5、mysql支持的复制类型 (1)STATEMENT (2&…

SLAM面试笔记(5) — C++面试题

目录 第1章 C基础 1 C中static静态变量有什么作用,在什么情况下会用? 2 类中的this指针指向哪里? 3 说一下const的作用。 4 std::string类型为啥不能memset? 5 emplace_back( )和push_back( )有什么区别? 6 tra…

【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

通过Redisson的管道批量操作来提高Redis Io效率

一、背景 当在对redis进行刷数操作时,大部分的redis框架对于单次执行的效率差不多,但我们有时需要一次性写入大量的redis key时,一次一次的操作速度就很慢。尤其是处于跨region的环境,一次的redis io就高达数十毫秒&#xff0…

Android aar包的生成与使用

前言 最近用Android Studio开发Android时,会经常接触到aar包(Java Archive),aar包含所有资源,class以及res资源文件全部包含。 优势 Android通过aar方式把代码和资源打成一个包,提供给第三方使用或者是开…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 (1)前置通知 &#xf…

Java Web JDBC(1)23.6.25

JDBC 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库…

vue3-实战-13-管理后台-数据大屏解决方案-顶部组件搭建-实时游客统计

目录 1-数据大屏解决方案vw和vh 2-数据大屏解决方案scale 3-数据大屏原型需求图 4-数据大屏顶部搭建 4.1-顶部原型需求 4.2-顶部模块父组件的结构和逻辑 4.3-顶部模块子组件结构和逻辑 5-数据大屏游客统计 5.1-原型需求图分析 5.2-结构样式逻辑开发 1-数据大屏解决方…

视觉与多模态大模型前沿进展 | 2023智源大会精彩回顾

导读 6 月 9 日下午,智源大会「视觉与多模态大模型」专题论坛如期举行。随着 stable diffusion、midjourney、SAM 等爆火应用相继问世,AIGC 和计算机视觉与大模型的结合成为了新的「风口」。本次研讨会由智源研究院访问首席科学家颜水成和马尔奖获得者曹…

在UE5编辑器环境中使用Python

UE有很多Python方案,本文所讲述的Python为UE5官方内嵌版本方案,并且只能在编辑器环境下使用,使用该功能可以编写编辑器下的辅助工具,提升开发效率。 1.调用Python的几种方式 讲一讲UE5中调用Python的几种方式,首先是…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时,不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

三、决策树 四、随机森林

三、决策树1.决策树模型的原理1)什么是决策树2)决策树模型原理3.构建决策树的目的4)决策树的优缺点 2.决策树的典型生成算法1)常用的特征选择有信息增益、信息增益率、基尼系数2)基于信息增益的ID3算法3)基…

JAVAWEB 30-

JAVAWEB 30- 快速入门DriverManagerConnectionresultsetPreparedStatement增删改查查询所有添加 修改 MAVEN坐标MyBatis代理开发mybatis查询条件查询添加删除参数传递 快速入门 public static void main(String[] args) throws Exception { /1.注册驱动 Class.forName("co…