深入理解网络原理1

文章目录

  • 前言
  • 一、网络初识
    • 1.1 IP地址
    • 1.2 端口号
    • 1.3 协议
    • 1.4 五元组
    • 1.5 协议分层
  • 二、TCP/IP五层协议
  • 三、封装和分用
  • 四、客户端vs服务端
    • 4.1 交互模式
    • 4.2 常见的客户端服务端模型
    • 4.3 TCP和UDP差别


前言

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完 成业务,就有了⽹络互连。


一、网络初识

1.1 IP地址

IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。
就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。

IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常⽤“点分⼗进制”的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。
如:100.4.5.6。

1.2 端口号

在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。 简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。

端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。

1.3 协议

协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在⽹络上传输的数据包的格式。

1.4 五元组

在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:

  1. 源IP:标识源主机
  2. 源端⼝号:标识源主机中该次通信发送数据的进程
  3. ⽬的IP:标识⽬的主机
  4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双⽅约定的数据格式

可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息

1.5 协议分层

协议分层是指将通信协议根据其功能和作用分为若干层次,每一层都有特定的功能和责任。通信协议的分层主要是为了提高系统的可扩展性、可维护性和可管理性。

分层的作⽤——
为什么需要⽹络协议的分层?
分层最⼤的好处,类似于⾯向接⼝编程:定义好两层间的接⼝规范,让双⽅遵循这个规范来对接。
在代码中,类似于定义好⼀个接⼝,⼀⽅为接⼝的实现类(提供⽅,提供服务),⼀⽅为接⼝的使⽤类(使⽤⽅,使⽤服务):
• 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接⼝即可
• 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接⼝即可。
这样能更好的扩展和维护,如下图:
在这里插入图片描述

二、TCP/IP五层协议

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

在这里插入图片描述

通俗的理解为:
在这里插入图片描述

三、封装和分用

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

eg.A通过QQ发送hello给B,封装过程如下:
①应用层(应用程序QQ)
QQ从消息输入框获取到用户输入的hello,就需要把这个字符串构造成一个应用层的数据包,QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式来构造的。
在这里插入图片描述
应用程序会调用操作系统提供的api,把这个数据包交给传输层。

②传输层
把上述数据作为一个整体,再构造一个传输层的数据包(传输层涉及到的协议最主要的是TCP和UDP)。此处假定是使用UDP来进行通信,就会构造成一个UDP数据包。

在这里插入图片描述
拼好传输数据包之后,就要把这个数据包进一步的交给下层,网络层继续进行封装了。(交给下层,指的是下层协议提供一组api(函数),上层调用这个api,并且把刚才构造好的数据通过参数传过去,下层协议就可以来处理这个数据了)。

③网络层
这里涉及到的最核心的协议是IP协议。网络层IP协议,把刚才的传输层的UDP数据包作为一个整体,再拼上IP协议的报头,构造成一个IP数据包。
在这里插入图片描述

构造完成完整的IP数据包之后,IP协议继续调用数据链路层的api,把数据再交给数据链路层这里的协议进行处理。

④数据链路层
这里涉及到的核心协议,以太网(此处“以太”用来表示数据传输的介质)。
以太网数据帧,也是以IP数据包为一个整体,在这个基础上添加上帧头和帧尾。
在这里插入图片描述
这样的数据还需要交给物理层。

⑤物理层
硬件设备,把上述这样的以太网数据帧,二进制结构(一串0101为数据),转换成光信号(光纤,通过光的频谱进行编码)/电信号(网线,高电平/低电平)/电磁波(无线wifi),然后进行发送。

经过上述一系列的操作,数据终于从你的电脑上发送出去了。

--------------------------------------------------------------------------------------------------------------------------------------

暂时不考虑中间过程,假定数据包已经到达B的网卡了,B的处理过程就称为“分用”。
①B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制的0101),得到一个以太网数据帧,进一步的把这个数据帧交给数据链路层处理。
②数据链路层
按照以太网数据帧的格式来解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
③网络层
按照IP协议的格式进行解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
④传输层
按照UDP协议格式来解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
⑤应用层
按照QQ应用程序内部的应用层协议格式来解析数据。
在这里插入图片描述
QQ程序拿到这些信息之后,就会在窗口中给你弹出提示,并且把消息/消息的发送者/发送时间都显示到聊天窗口上。

真实情况下,两个主机不太会是通过网线直连的,而是通过一系列的交换机或者路由器来进行数据转发的。上述的封装分用过程同样适用,只不过,封装分用的程度不一定是到应用层(五层都有)。
对于交换机来说,就只需要封装分用到数据链路层即可;经典的路由器来说,就只需要封装分用到网络层即可。

描述一个网络上传输的数据“单位”可能会用到下面的术语:
在这里插入图片描述
网络编程本质上就是学习传输层给应用层提供的api,就可以写代码,把数据交给传输层,进一步的通过层层封装,就可以把数据通过网卡发送出去了。

交换机和路由器的区别? (经典面试题)
工作层次不同。交换机工作在数据链路层,而路由器工作在网络层。
数据转发所依据的对象不同。交换机是利用MAC地址来确定转发数据的目的地址,而路由器是基于路由表转发数据包。

传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域。 路由器提供了防火墙的服务,可以防止广播风暴(具有更高级别的安全性)。
交换机主要用于局域网内部的数据交换,而路由器则主要用于不同网络之间的数据传输。

四、客户端vs服务端

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

4.1 交互模式

  • “一问一答”:一个请求对应一个响应,常见于”网站开发“(web开发)。
  • ”一问多答“:一个请求对应多个响应,这个场景主要涉及到”下载“场景。
  • “多问一答”:多个请求对应一个响应,这个场景主要涉及到“上传”场景。
  • “多问多答”:一个请求对应多个响应,一个响应也可能对应多个请求,这个场景主要涉及到“远程控制/远程桌面",进行的鼠标键盘操作,都会作为一个个请求发送过去,所看到的画面作为响应。

4.2 常见的客户端服务端模型

最常见的场景,客户端是指给⽤⼾使⽤的程序,服务端是提供用户服务的程序:

  1. 客户端先发送请求到服务端
  2. 服务端根据请求数据,执⾏相应的业务处理
  3. 服务端返回响应:发送业务处理结果
  4. 客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

客户端与服务器通信——
在这里插入图片描述

4.3 TCP和UDP差别

TCP特点UDP特点
有连接无连接
可靠传输不可靠传输
面向字节流面向数据报
全双工全双工

最后,码字不易,如果觉得对你有帮助的话请点个赞吧,关注我,一起学习,一起进步!

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

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

相关文章

网络安全审计

一、什么叫网络安全审计 网络安全审计是按照一定的安全策略,利用记录、系统活动和用户活动等信息,检查、审查和检验操作时间的环境及活动,从而发现系统漏洞、入侵行为或改善系统性能的过程,它是提高系统安全性的重要手段。 系统…

linux下载压缩包

比如我要下载的压缩包地址为: http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip 1.创建文件夹并切换到这个目录下 2.用wget获取压缩包 压缩包下好了 3.解压 如果是 tar.gz包解压 tar -zxvf 也可以解压到具体的目录…

Java的逻辑控制和方法的使用介绍

前言 程序的逻辑结构一共有三种:顺序结构、分支结构和循环结构。顺序结构就是按代码的顺序来执行相应的指令。这里主要讲述Java的分支结构和循环结构,由于和C语言是有相似性的,所以这里只会提及不同点和注意要点~~ 注意在C语言中,…

Docker部署nginx并启用https加密连接

前言 在当今互联网时代,安全性成为越来越重要的议题。随着网络攻击日益猖獗,保护数据和通信的安全性变得至关重要。在这种背景下,对于在 Docker 中运行 Nginx 是否需要使用 HTTPS 这一问题,我们需要考虑到网络安全的重要性以及 H…

如何低成本创建个人网站?

目录 前言 网站源代码 虚拟主机或服务器 域名注册或免费二级域名 域名解析 上传源代码压缩包 添加刚刚的域名 成功搭建 失败的解决方案 结语 前言 很多小白都非常想拥有自己的网站,但很多人虽然有了自己的源代码但苦于不知道怎么将其变成所有人都能够访…

YOLO自研模块:多尺度轻量化卷积模块

目录 一、原理 二、代码 三、配置文件 一、原理 不同大小的卷积核,提取目标特征的特征尺度不同,所以通过使用不同大小卷积核的卷积来提取特征就可以保证获取到目标的多尺度特征。 借鉴YOLOv8中,将通道数进行划分的操作,在卷积的输入过程中为了减小参数量,将输入通道数…

【题解】NC109 岛屿数量(BFS / DFS)

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e?tpId196&tqId37167&ru/exam/oj dfs #include <vector> class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可…

堆排序以及TOP-K问题

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;今天我们来深入理解堆这种数据结构&#xff0c;分析一下堆排序以及TOP-K问题&#xff0c;准备好了吗&#xff1f;我要开始咯&#xff01; 一、堆排序 这里我们先假设要排成升序&#xff0c;也就是从左到右&#xf…

变量内存和存储单位

基本数据类型及其占位符 存储单位 内存中的数据存储单元是由一个一个的二进制组成的&#xff0c;每个二进制只能存储0 和1 科学家为了更加方便存储更多的数据&#xff0c;把内存中8个二进制分为一组&#xff0c;叫做一个字节&#xff0c;Byte字节是最小的存储单位。(重点⭐⭐⭐…

数据结构与算法-双向链表

1.简介 在使用带头节点的单向链表查找时查找的方向只能是一个方向&#xff0c;而双向链表可以向前或向后查找。例如单向链表只能查到一个节点的下一个节点&#xff0c;但是双向链表不仅可以查到下一个节点&#xff0c;还可以查到上一个节点。 在删除节点时&#xff0c;单向链…

C语言 | Leetcode C语言题解之第66题加一

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* plusOne(int* digits, int digitsSize, int* returnSize){for(int i digitsSize - 1; i > 0; --i){digits[i] digits[i] 1;//最后元素1判断是不…

怎么用CAPL与Python交互

怎么用CAPL与其他应用程序交互 怎么用CAPL与Python交互 怎么用CAPL与Python交互 怎么用CAPL与其他应用程序交互前言1、CAPL怎么调Python&#xff1f;1.1CAPL调Python的命令1.2CAPL调用Python实例 2、怎么把python运行的结果返回给CAPL2.1通过环境变量 3、CAPL调Python的输入参…

linux进入单用户模式指引

文章目录 引言I 通过GRUB进入单用户模式1.1 倒计时界面的操作1.2 GRUB1.3 内核参数编辑界面1.4 更多内核参数编辑界面II 预备知识:Linux用户模式引言 应用场景: root密码重置: 用passwd命令修改root修复登录相关的配置:/etc/pam.d/login 和 /etc/pam.d/sshd 案例:Centos6进…

Qt QImageReader类介绍

1.简介 QImageReader 是用于读取图像文件的类。它提供了读取不同图像格式的功能&#xff0c;包括但不限于 PNG、JPEG、BMP 等。QImageReader 可以用于文件&#xff0c;也可以用于任何 QIODevice&#xff0c;如 QByteArray &#xff0c;这使得它非常灵活。 QImageReader 是一个…

奥尔良

目录 一&#xff0c;核心规则 1&#xff0c;游戏回合 2&#xff0c;公共主版面 3&#xff0c;公共副版面 4&#xff0c;个人版面 二&#xff0c;规则细节 1&#xff0c;七种随从 2&#xff0c;渡船、马车、公会 3&#xff0c;得分 4&#xff0c;其他规则 奥尔良是一个…

【大模型学习】私有大模型部署(基础知识)

私有大模型 优点 保护内部隐私 缺点 成本昂贵 难以共享 难以更新 大模型底座 基础知识点 知识库 知识库是什么&#xff1f; 知识库的作用是什么&#xff1f; 微调 增强大模型的推理能力 AI Agent 代理&#xff0c;与内部大模型进行交互 开源 and 闭源 是否可以查…

[蓝桥杯2024]-PWN:fd解析(命令符转义,标准输出重定向,利用system(‘$0‘)获取shell权限)

查看保护 查看ida 这里有一次栈溢出&#xff0c;并且题目给了我们system函数。 这里的知识点没有那么复杂 方法一&#xff08;命令转义&#xff09;&#xff1a; 完整exp&#xff1a; from pwn import* pprocess(./pwn) pop_rdi0x400933 info0x601090 system0x400778payloa…

Redis教程——管道

在上篇文章我们学习了Redis教程——事务&#xff0c;这篇文章我们学习Redis教程——管道。 客户端向服务端发送命令分四步&#xff08;发送、排队、执行和返回结果&#xff09;&#xff0c;并监听Socket返回&#xff0c;通常以阻塞模式等待服务端响应&#xff0c;如下图所示&a…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存

探索和构建 LLaMA 3 架构&#xff1a;深入探讨组件、编码和推理技术&#xff08;三&#xff09; KV缓存 在推理的每一步中&#xff0c;只对模型输出的最后一个标记感兴趣&#xff0c;因为已经有了之前的标记。然而&#xff0c;模型需要访问所有先前的标记来决定输出哪个标记&…

【算法】【单调栈】【leetcode】1019. 链表中的下一个更大节点

刷这题之前先看&#xff1a; 【算法】【OD算法】【单调栈】找朋友-CSDN博客 【算法】【单调栈】【leetcode】1475. 商品折扣后的最终价格-CSDN博客 【算法】【单调栈】【leetcode】901. 股票价格跨度-CSDN博客 【算法】【单调栈】每日温度-CSDN博客 题目地址&#xff1…