【复习整理归纳】| C++面经网络相关(三)

news/2024/4/27 8:22:54/文章来源:https://blog.csdn.net/weixin_45926547/article/details/126479196

文章目录

    • 计算机网络
      • 性能指标
      • 计算机在发送文件前需要做许多前期的工作
      • 分层结构
      • 概念
      • OSI参考模型
      • 数据链路层
      • ARP
      • 网络协议
      • UDP
      • 套接字
      • TCP
        • TCP粘包
        • 三次握手
        • 四次握手
        • 为什么建立连接协议是三次握手,而关闭连接却是四次挥手呢?
        • 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
        • 滑动窗口:流量控制
        • 拥塞控制
      • 输入网页会发送什么
      • 防火墙的结构和原理
      • 通过将请求平均分配给多台服务器来平衡负载
      • epoll模型
      • HTTP图解
      • 网络是怎么链接的

计算机网络

性能指标

【吞吐量】:单位时间内通过某个网络的数据量;

  • 单位:b/s;
  • 受带宽和额定速率的限制;

【时延】:数据从网络的一端传到另一端所需的时间;
【发送时延】:数据在机器中从第一个bit到最后一个bit进入链路中的时间;(数据长度/信道带宽)
【传播时延】:在信道传播的时间,取决电磁波传播速度链路长度;(信道长度/电磁波在信道传播速率)
【排队时延】:等待输入出/入链路可用;
【处理时延】:检查找出口;

【往返时间RTT】:从发送方发送数据开始,到发送方收到接收方的确认(接收方收到数据后立即发送确认)总共经历的时延;

  • RTT越大,在收到数据前,可以发送的数据越多;
  • (往返传播时延=传播时延*2 + 末端处理时间)

计算机在发送文件前需要做许多前期的工作

  • 需要对数据通路进行激活
  • 告诉网络如何识别目的主机
  • 查明主机是否开机网络连接是否正常;
  • 对方文件管理程序是否就绪
  • 确保差错和意外可以解决;

分层结构

  • 各层之间相互独立,每层只实现一种相对独立的功能
  • 每层之间界面自然清晰,易于理解,相互交流尽可能
  • 结构上可分割开。每层都采用最合适的技术来实现。
  • 上层为下层提供服务;
  • 整个分层结构应该能促进标准化工作。

概念

【实体】:活动元素,同一层的实体为对等实体;
【协议】:为进行网络中对等实体数据交换而建立的协议;
【三要素】:

  • 语法:规定传输数据的格式;
  • 语义:规定所要完成的功能;
  • 同步:规定各种操作的顺序;

【接口(访问服务点SAP)】:上层使用下层服务的入口;

  • 仅相邻层间才有接口,所提供服务的具体实现细节对上一层安全屏蔽;

【服务】:下层为相邻上层提供的功能调用;
【SDU服务数据单元】:为完成用户所要求的功能而应传达的数据;
【PCI协议控制信息】:控制协议操作的信息;
【PDU协议数据单元】:对等层次之间传送的数据单元;

OSI参考模型

【应用层】:用户与网络的界面,典型服务FTP、SMTP、HTTP;
【表示层】:处理在两个通信系统中交换信息的表示方式(数据格式变换数据加密解密、数据的压缩和恢复);
【会话层】:向表示层/用户进程提供建立连接并在连接上有序地传输数据(建立、管理、终止会话校验/同步通信);
【传输层】:负责主机中两个进程的通信(端到端);

  • 可靠、不可靠传输:可靠(TCP),不可靠(UDP)
  • 差错控制:
  • 流量控制:控制发送方的发送流量;
  • 复用分用:复用(多个应用层进程可同时使用下面运输层的服务),分用(运输层把收到的信息分别交付给上面应用层中相应的进程);

【网络层】:把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务;

  • 路由选择:选择合适的路由,最合适的路径;
  • 流量控制:控制发送方的发送流量;
  • 差错控制:
  • 拥塞控制:缓解网络拥塞;

【数据链路层】:把网络层传下来的数据报组装成帧;

  • 成帧:定义帧的开始和结束;
  • 差错控制:帧错+位错;
  • 流量控制:
  • 访问接入控制:控制对信道的访问;

【物理层】:物理媒体上实现比特流的透明传输;

  • 透明传输:不管所传数据是什么样的比特组合,都应当能够在链路上传送;
  • 定义接口特性:
  • 定义传输模式:单工、半双工、双工;
  • 定义传输速率;
  • 比特同步;
  • 比特编码;

数据链路层

透明传输

【透明传输】:数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

  • 透明传输会导致什么呢?当设置帧头和帧尾时,数据的内部具有一样的标志时,如何才能接收到正确的数据;
    • 在发送帧之前,对其进行检查,是否出现标志相同,若相同,则在该标志前加上转义字符;

【常用方法】:

  • 面向字节的物理链路使用字节填充来实现透明传输;
  • 面向比特的物理链路使用比特填充来实现透明传输;
  • 在发送前使用零比特填充法,对数据进行扫描每5个1后插入0,当接收后将其剔除即可;

差错检测

由于帧在传输过程中遭遇干扰后可能出现误码,故接收方需要在接收数据的时候判断是否出现误码(0变1,1变0);

  • 故发送方需要在发送帧之前,基于待发送的数据和检错算法计算出检错码,封装在帧尾(FCS),即接受方在接收的时候可以进行检测;

【奇偶校验】:在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数或偶数;

  • 奇校验:在数据后添加一个1,让1的总数为奇数,若产生一个位错误(1变0),则进行奇校验时,发送1的总数位奇故判断出现错误;
  • 但同时两个1变成0,即检验无效;
  • 只能在奇数个位发送误码,则奇偶性发送改变,才可以检查误码;

【循环冗余校验CRC】:

  • 收发双方约定好一个生成多项式G(x)
  • 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
  • 接收方通过生成多项式来计算收到的数据是否产生了误码;

常用多项式:
CRC-16 = x16+x15+x^2+1
CRC-CCITT = x16+x12+x^5+1
CRC-32 = x^32 +x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

常见的错误:
分组丢失:没有被接收到;
分组失序:发送早的数据比发送晚的数据早接收到;
分组重复:发送的数据迟迟没有被接收到,重新发送后,原先的数据也被接收到了;

可靠传输

【不可靠】:当接收方接收到有误码的帧是,将其丢弃即可;
【可靠】:当接收到误码的帧时,能够继续发送一份数据;
【三种可靠传输协议】:可应用于计算机网络体系结构各层协议中;

ARP

【如何通过IP地址找到MAC地址】
使用ARP协议,当一台主机要发送数据包时,会先查询自身的ARP高速缓存表,若没有,则无法在包中填写目的MAC地址;
故发送ARP请求报文(广播)来获取接收方的IP地址;该请求报文本封装与帧中,当某台主机解析到IP与自身相符,则先记录发送方MAC地址,在通过该请求(单播)回应

### UDP考虑等待应答、超时重发、为数据包编号、流量控制

UDP数据报
在这里插入图片描述

网络协议

Linux网络编程 | 【第一篇】网络协议详解TCP、UDP、ARP

UDP

Linux网络编程 | UDP服务器

套接字

【UNIX网络编程】| 【01】基本套接字编程(套接字地址结构、值-结果参数、字节序基本函数)
【UNIX网络编程】| 【02】基本TCP套接字编程(socket、connnect、bind、linsten、accept、并发服务器)
【UNIX网络编程】|【06】基本UDP套接字编程【数据报丢失、性能、流量控制…】
Linux网络编程 | Socket

TCP

【UNIX网络编程】| 【03】TCP客户/服务器程序示例
TCP数据报
在这里插入图片描述

TCP粘包

问题描述

TCP粘包是指发送方将多个数据包发送到接收方的缓冲区,应用程序读取到接收方缓冲区中多个首尾相连粘在一起的数据包;

主要原因

发送方:由于TCP协议默认使用Nagle算法(通过合并数据,从而减少发送数量来提升TCP/IP传输效率),这个算法会收集多个数据包分组,合并成一个大的数据块,这样会导致接收方难以分辨原来数据包,故Nagle算法可能会导致发送方出现粘包问题。

接收方:由于TCP连接的每一方都有固定大小的缓冲空间,TCP连接的接收方接收到的数据包就会放在其缓冲区中,等待应用程序(应用层)来读取。但有时会出现接收数据的速率大于应用程序读取的速率,这就会导致多个首尾相连的数据包被应用程序视为一个包读取,就出现粘包问题;

解决

发送方:故可通过不使用Nagle算法来解决,发送方用TCP_NODELAY选项来关闭;
接收方:这里接收方解决指的是应用层方面,即格式化数据包附带数据包长度发送

  • 格式化数据包是指为数据包加上开始符和结束符,那么应用程序读取时就能区分出每个数据包的开始和结束。
  • 附带数据包长度发送是指在数据包头部定义出数据包的长度,那么程序在读取时,会按照长度读取对应字节数据,保证读取的是单个包,且数据完整,这样就能保证数据包是单个且完整。

UDP有无粘包问题

UDP不存在粘包问题,因为UDP连接的接收方每次只接收—条独立的数据包,而TCP协议可以将多个数据包—起发送并接收(前提是接收方缓冲区剩余大小要能接收这多个数据),即接收方不保证一次只接收一条信息,所以TCP才存在粘包问题。

三次握手

https://liuyu121.github.io/post/tcp/
https://amsimple.com/blog/article/109.html

  • 【第一次】客户端发送一个带SYN标志的TCP报文到服务器:
    client为SYN_SEND,server为SYN_RCVD
  • 【第二次】服务器端回应客户端,带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯;
    server进入SYN_RCVD
  • 【第三次】客户必须再次回应服务器端一个ACK报文;
    都进入ESTABLISHED;
  • 在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值最大段尺寸等。

常用标志

  • SYN表示建立连接,
  • FIN表示关闭连接,
  • ACK表示响应,
  • PSH表示有 DATA数据传输,
  • RST表示连接重置

四次握手

由于TCP连接是【全双工】的,故每个方向都必须【单独进行关闭】。这原则是当一方完成它的数据发送任务后就能【发送一个FIN来终止】这个方向的连接。收到一个 FIN只意味着这一方向上【没有数据流动】,一个TCP连接在收到一个FIN 后【仍能发送数据】。首先进行关闭的一方将执行【主动】关闭,而另一方执行【被动】关闭。

  • 客户端发出段7,FIN位表示关闭连接的请求;
  • 服务器发出段8,应答客户端的关闭连接请求;
  • 服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求;
  • 客户端发出段10,应答服务器的关闭连接请求;

在这里插入图片描述

为什么建立连接协议是三次握手,而关闭连接却是四次挥手呢?

关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据
服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送等服务端不再发送数据时才发送 FIN 报文给客户端来表示同意现在关闭连接;

  • 也可以三次挥手

为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

让4次握手关闭流程更可靠

  • 4次握手的最后一个ACK是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发送一个FIN过来
  • 若主动关闭方能够保持一个2MSL的TIME_WAIT状态,则有更大的机会让丢失的ACK被再次发送出去

防止lost duplicate对后续新建正常链接的传输造成破坏;保证这次连接的重复数据段从网络中消失

  • lost uplicate在实际的网络中非常常见,常由于路由器产生故障,路径无法收敛导致一个packet在路由器A,B,C之间做类似死循环的跳转。IP头部有个TTL,限制了一个包在网络中的最大跳数,因此这个包有两种命运,要么最后TTL变为0,在网络中消失;要么TTL在变为0之前路由器路径收敛,它凭借剩余的TTL跳数终于到达目的地。但非常可惜的是TCP通过超时重传机制在早些时候发送了一个跟它一模一样的包,并先于它达到了目的地,因此它的命运也就注定被TCP协议栈抛弃;

滑动窗口:流量控制

该机制允许发送方在停止并等待确认前连续发送多个分组,而不必每发送一个分组就停下来等待确认,从而增加数据传输的速率提高应用的吞吐量;

限制

  • 接收放缓存;
  • 网络带宽小,发太多包会导致丢包;

发送方缓冲区:发送方缓冲区用于存储已经准备就绪数据和发送了但是没有被确认的数据。
接收方缓冲区:接收方缓冲区用于存储已经被接收但是还没有被用户进程消费的数据。
在这里插入图片描述
在这里插入图片描述
TCP 是如何解决窗口关闭时,潜在的死锁现象呢?
为了解决这个问题,TCP 为每个连接设有一个持续定时器,只要 TCP 连接一方收到对方的零窗口通知,就启动持续计时器。

如果持续计时器超时,就会发送窗口探测 ( Window probe ) 报文,而对方在确认这个探测报文时,给出自己现在的接收窗口大小。
窗口探测

  • 如果接收窗口仍然为 0,那么收到这个报文的一方就会重新启动持续计时器;
  • 如果接收窗口不是 0,那么死锁的局面就可以被打破了。

拥塞控制

输入网页会发送什么

查看是否缓存;
DNS解析IP
请求webserver;
处理请求;
返回响应

防火墙的结构和原理

可以通过接收方IP地址发送方IP地址发送方端口号TCP控制位可以判断出通信的起点和终点、应用程序种类、访问的方向;

防火墙功能:

  • 允许或阻止网络包的通过;
  • 地址转化功能;

通过将请求平均分配给多台服务器来平衡负载

epoll模型

【UNIX网络编程】|【04】I/O模型、select、pselect、poll
https://blog.csdn.net/weixin_45926547/article/details/123051768

一种同步IO模型,实现一个线程可以监听多个文件句柄,当有某个文件句柄就绪,即通知应用程序进行相应的读写操作;没有句柄就绪,则会阻塞应用程序;

select和epoll区别

  • select需要不断拷贝描述符集合到内核态,消耗;
  • 需要遍历整个描述符集合;
  • 文件描述符的限制;

ET和LT

  • 边缘触发(ET) :只有数据到来才触发,不管缓存区中是否还有数据;
  • 水平触发(LT) :只要有数据都会触发;

HTTP图解

【图解HTTP】| 【01】简单了解HTTP协议

网络是怎么链接的

【网络是怎样连接的】| 【01】浏览器如何生成消息?如何与服务器通信?
【网络是怎么连接的】| 【02】TCP/IP数据传输
【网络是怎么连接的】| 【03】探索集线器、交换机和路由器

【网络时怎样连接的】| 【04】服务端的局域网、服务器负载均衡
【网络是怎样连接的】| 【05】服务器响应返回浏览器

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

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

相关文章

C++ | 12天学好C++ (Day 12)->结构图可视化、代码加通俗理解

为每天进步一点点而努力。 C是计算机视觉的重要的一部分,虽然在初始学习时Python应用比较广,但是大多数公司还是C做计算机视觉类的比较多,因为C可加密,所以我们来一起探索吧!看了这系列博客,将会学到C的基…

#边学边记 必修4 高项:对事的管理 第4章 项目进度管理之 制定进度计划

制订进度计划的输入、工具与技术和输出 制定进度计划过程分析活动顺序、持续时间、资源需求和进度制约因素,创建项目进度模型的过程。主要作用是把活动、持续时间、资源、资源可用性和逻辑关系代入进度规划工具,从而形成包含各个项目活动的计划日期的进…

在docker安装的centos容器内设置远程链接

写在前面 写在前面 运维这个行业,不需要按照顺序学习。 比如你学会了基础命令,直接学docker和k8s,和学会了基础命令开始学服务难度差不多。 再比如你学会了基础命令直接学shell脚本,也能学的会。 所以我一直主张,…

WEB漏洞-文件操作之文件下载读取全解

目录 前言: (一)前置知识 (二)文件下载读取漏洞利用 1、网站目录的获取: 0x01 字典 0x02 网络爬虫 0x03 fuzz 0x04 自动化工具 0x05 下载传参的脚步文件 0x06 配合其他漏洞 2、下载数据库,操作系统配置文件 0x01 Window…

非空约束

1.创建表时添加约束   创建完表后,添加非空约束 删除name的非空约束

Vue3.0----组件基础【上】(第二章)

一、单页面应用程序 1. 什么是单页面应用程序 单页面应用程序(英文名:Single Page Application)简称 SPA,顾 名思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的 功能与交互都在这唯一的一个页…

(六)Shell编程之函数、脚本引用、符号展开、重定向

一、定义函数 shell中函数的定义格式如下: [ function ] funname [()] {action;[return int;] }说明: 可以带function fun()定义,也可以直接fun()定义,如果带function函数名后的小括号可以省略。返回值语句[return int;]可以不写…

软件项目管理:外包 outsourcing、采购 procurement、合同 contracts

文章目录外包不同类型为什么选择外包好处坏处采购 procurementplanning 阶段-弄清需求 & 市场 / 评估风险Source 阶段-确定供应商具体过程RFxState of Work (SOW)评估步骤 Evaluation processManage 阶段Contract 合同定义种类固定价格合同适用场景(保守&#x…

稀疏矩阵的压缩存储

目录 稀疏矩阵的定义 稀疏矩阵的转置 代码实现 运行结果 稀疏矩阵的定义 假设在 m * n 的矩阵中&#xff0c;有 t 个元素不为零&#xff0c;且 t<<m*n&#xff0c;则称此矩阵为稀疏矩阵。按照常规的存储方法&#xff0c;稀疏矩阵很浪费内存空间&#xff0c;所以采取…

学习梦想家CMS内容管理系统-环境启动

gitee官网中项目的地址&#xff1a;首先准备里面提到的工具其中JDK8和MySQL5.7我们已经有了&#xff0c;现在需要准备另外的工具。 Spring Tool Suite 4&#xff08;STS&#xff09; 安装过程在《1-1-Spring Tool Suite 4&#xff08;STS&#xff09;的下载安装》 Redis 安装…

数字孪生在电网系统开发建设,如何选择可视化平台?

随着新能源发展规模持续增大&#xff0c;电网作为能源转换利用和输送配置的枢纽平台&#xff0c;其功能、结构和形态发生了深刻变化。同时&#xff0c;随着现代计算机技术发展&#xff0c;数字孪生成为电网向数字化转型、提高电网调度运行决策的准确性与实时性提供关键技术支撑…

初识数据库-MySQL数据库

文章目录数据库数据库的相关概念常见的关系型数据库管理系统MySQL数据库MySQL目录结构MySQL数据模型数据库 数据库的相关概念 数据库 存储数据的仓库&#xff0c;数据是有组织的进行存储英文&#xff1a; DataBase,简称 DB 数据库管理系统 管理数据库的大型软件英文&#xff…

震撼上新丨云和恩墨新一代数据库存储 zStorage 和数据库一体机 zData X 即将发布...

存储&#xff0c;在一定程度上可以称为数据库存储&#xff0c;存储与数据库的发展总是相生相随。技术上&#xff0c;数据库对高 I/O 频率、低时延、高可靠性的追求一直是存储更快、更高、更强需求的来源。商业上&#xff0c;两家影响世界的公司 Oracle 和 EMC 几乎同时起步于 1…

使用element ui的el-upload组件上传图片,记录一下

使用element ui的el-upload组件上传图片 效果预览 下面是实现效果,接口方面是把有两个接口,一个接口上传图片,传参是图片和路径,返回值是路径。另一个接口是上传表单内容(用户,地址,照片),照片是传一个路径。具体实现 html <el-form-item label="上传照片"…

第二十一章 函数递归

一、函数递归调用介绍 函数不仅可以嵌套定义,还可以嵌套调用,即在调用一个函数的过程中,函数内部又调用另一个函数,而函数的递归调用指的是在调用一个函数的过程中又直接或间接地调用该函数本身。例如在调用f1的过程中,又调用f1,这就是直接调用函数f1本身def f1():print(…

springboot(三)

视频链接&#xff1a;https://www.bilibili.com/video/BV1XQ4y1m7ex/?vd_source9545770e4a2968c05878ffac8589ec6c 视频选集&#xff1a;P58— P92 文章目录1.接口架构风格-RESTful1.1 认识REST1.2 RESTful的注解1.2.1 PathVariable1.2.2 PostMapping1.2.3 DeleteMapping1.2.4…

分布式缓存

本文介绍关于缓存的常用设计模式。以及如何保证缓存的一致性进行分类讨论。 还会介绍关于缓存失效的常见问题&#xff0c;以及针对缓存失效的解决方法。 在高并发的环境下&#xff0c;比如春节抢票大战&#xff0c;一到放票的时间节点&#xff0c;分分钟大量用户以及黄牛的各种…

魔改xxl-job,彻底告别手动配置任务!

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单,但是苦于手动注册任务久矣,今天就来魔改一下,实现任务的自动注册!原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra。 xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、…

12个小细节让普源示波器使用更加高效(上)

俗话说细节决定成败&#xff0c;示波器作为电子测量的第一工具&#xff0c;虽然使用简单&#xff0c;但并不是每个人都能注意到细节。运用好细节&#xff0c;可以使你的示波器使用更加的便捷。以下由安泰测试带来普源示波器测量相关的12个小细节可作为示波器常识快速自检的小文…

Spring Boot(4):@Import注解和@Conditional注解

说明&#xff1a;基于atguigu学习笔记。 在了解spring boot自动配置原理前&#xff0c;再来了解下两个注解Import注解和Conditional注解。 Import Import注解主要用于导入某些特殊的Bean&#xff0c;这些特殊的Bean和Bean Definitaion 有关。 主要用于导入Configuration 类…