C++面试题记录(网络)
TCP与UDP区别
1. TCP面向连接,UDP无连接,所以UDP数据传输效率更高
2.UDP可以支持一对一、一对多、多对一、多对多通信,TCP只能一对一
3. TCP需要在端系统维护连接状态,包括缓存,序号,确认号,拥塞控制参数等,UDP不维护
4.TCP首部20字节,UDP首部8字节
5.UDP没有拥塞控制,应用层对于数据发送的控制更灵活,某些应用需要稳定速率发送,允许少量丢失,UDP可以稳定发送不受网络拥塞程度影响
6. TCP是可靠交付,UDP不保证可靠传输,但可以在应用层做出自己的可靠性机制
7.TCP传输的是报文段,应用层数据视为字节流,传输时可能分片也可能多报文合并传输,UDP传的是用户数据报,由应用层决定多长,不合不拆
TCP连接建立
服务器进入LISTEN(监听)状态后,客户端可以发送连接请求。这个连接请求报文段SYN同步位设置1,初始序号seq=x,不携带数据但消耗一个序号。 发送后客户端进入SYN-SENT(同步已发送)
服务器如果同意连接,发回确认报文段并分配资源。 确认报文段SYN=1,ACK=1,确认号ack=x+1,同时也选择自己的初始序号seq=y。确认报文也不携带数据,消耗一个序号。 发送确认后服务器进入SYN-RCVD(同步确认)
客户端收到确认后向服务器发出确认,并为连接分配资源。确认报文段ACK=1,seq=x+1,ack=y+1该报文可以携带数据,如果携带数据消耗一个序号,不携带数据不消耗序号。发送确认后客户端进入ESTABLISHED(连接建立)
服务器收到客户端确认后进入ESTABLISHED(连接建立)
(由于服务器接收到连接请求,如果同意就分配资源,那么多个客户机只发连接请求,但不回应服务器确认报文,就会导致服务器资源消耗尽,称为SYN洪泛攻击)
TCP连接释放
客户端发送连接释放报文段,然后停止发送数据。报文段FIN设置为1,序号seq=u,(u是客户端发送最后一个数据字节的序号+1),FIN可携带数据,无论有没有携带都消耗一个序号。发送完报文段后客户端进入FIN-WAIT-1(终止等待1)
服务器发出确认报文段,ACK=1,确认号ack=u+1,序号seq=v,(v是此tcp连接的服务器发送的最后一个数据字节的序号+1)。服务器发送确认后进入CLOSE-WAIT(关闭等待),这个状态下还会继续向客户端发送未完成的数据
客户端接收到服务器的确认报文后,进入FIN-WAIT-2(终止等待2),直到服务器发完想发的数据
如果服务器发送完想发的数据或者根本没有数据要发,就发出连接释放报文段。报文段FIN=1,ACK=1,ack=u+1,seq=w (seq=w是因为服务器发送了未完成的数据)。发送连接释放报文段后服务器进入LAST-ACK(最后确认)
客户机收到连接释放报文段,向服务器发出确认。确认报文段ACK=1,seq=u+1,ack=w+1。发送确认后,进入TIME-WAIT(定时等待) ,开始计时,如果经过2个最长报文段寿命(2MSL),都没有接收到服务器重传的连接释放报文段,客户机就可以安心进入CLOSED(连接关闭)
服务器接收到客户机连接释放的确认报文后进入CLOSED,如果一直没接到连接释放的确认报文,就重发连接释放报文段。
套接字通信(socket)
一般网络通信有两种方式,应用层给传输层TCP传报文段或者给UDP传用户数据报。为了方便使用传输层的两个协议才产生socket通信。套接字其实就是系统提供的网络编程接口,使得我们不用考虑建立连接的细节就能使用网络通信。两个进程通信,各使用一个套接字,套接字含IP地址,端口,通信协议,还可以支持加密,方便我们使用网络。socket套接字支持使用TCP和UDP,还可以不用这两种协议,而是自己控制传输方法。通过套接字可以创建TCP或者UDP连接。
winsock建立连接的主要实现步骤?
服务器端:socket()建立套接字,绑定(bind)端口并监听(listen)连接,用accept()等待客户端连接, accept()发现有客户端连接,建立一个新的套接字接收。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
客户端:socket()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
套接字关闭时有两个函数,close和shutdown,close使引用计数减1,计数为0释放套接字,未发送的数据仍会继续发;shutdown切断连接,但没有释放socket
套接字三种类型
流式socket(tcp传输),数据报式(udp传输),原始socket(可以读写内核没有处理的IP数据包)
TCP为什么不是两次连接?而是三次握手?
如果A与B两个进程通信,如果仅是两次连接。可能出现的一种情况就是:A发送完请报文以后,由于网络情况不好,出现了网络拥塞,即B延时很长时间后收到报文,即此时A将此报文认定为失效的报文。B收到报文后,会向A发起连接。此时两次握手完毕,B会认为已经建立了连接可以通信,B会一直等到A发送的连接请求,而A对失效的报文回复自然不会处理。依次会陷入B忙等的僵局,造成资源的浪费。
FTP的连接模式
FTP是应用层协议,传输层使用TCP。工作时使用两个并行TCP连接,控制连接端口号21,数据练级端口号20.
服务器监听21号端口,等待连接。控制连接用来传控制信息,如连接请求,传送请求等,以7位ASCII码格式传送。
建立控制连接后,如果服务器控制进程接收到客户端文件传送请求,就建立数据传送进程和数据连接,由两个数据传送进程进行数据通信。
建立的数据连接有主动模式和被动模式。主动模式是客户端开放一个端口,发送控制信息给服务器,由服务器20号端口连接客户端开放的端口。被动模式是客户端发控制命令告诉服务器使用被动模式,服务器开放一个随机端口并高斯客户端,客户端再连接到此端口。
(使用被动模式一般是因为客户端防火墙对于开放端口有影响)
HTTP过程
http是应用层协议,本身无连接,在传输层使用tcp连接。
访问www服务器时,首先是DNS域名解析,获取ip地址后浏览器向服务器发tcp连接请求,建立tcp连接后,浏览器向服务器发http请求,服务器返回http响应,浏览器对信息进行解释,显示web页面,最后释放tcp连接。
http可以使用持久连接和非持久连接,持久连接就是在获取服务器响应后不释放tcp连接,可以继续使用此连接向服务器请求数据。
对于持久连接可以分流水线方式请求和非流水线方式请求。流水线方式是没收到响应前可以继续发请求,非流水线方式要求接收到响应才能继续发下一个请求。
Cookie原理
用户浏览某个网站,服务器为用户产生Cookie,包含一些信息,如用户的标识符、会话ID、用户偏好等,通常以“名/值”对(name-value pairs)的形式存储。接着返回的响应报文添加一个Set-cookie字段将cookie一起返回。
用户接收到响应,Cookie文件保存在本地
下次访问时,将之前存储的Cookie发送回服务器。这通常通过HTTP请求头中的Cookie字段完成。
GET和POST
| GET方法用于从Web服务器请求数据。在使用GET方法时,浏览器向Web服务器发送一个请求,Web服务器将响应数据发送回浏览器。GET方法是无状态的,也就是说每个请求都是独立的,没有前后关系。GET方法通常用于请求静态数据,如HTML页面、图片和CSS文件等。 POST方法用于向Web服务器提交数据。在使用POST方法时,浏览器将数据打包并发送到Web服务器。Web服务器收到数据后,可以根据数据执行相应的操作,并向浏览器发送响应。POST方法是有状态的,也就是说请求和响应之间存在关系,请求和响应之间的数据可以互相传递。POST方法通常用于向Web服务器提交表单数据和上传文件等操作。 |
| 在使用GET方法时,浏览器将请求的参数附加到URL的末尾,以“?”号开始,并用“&”符号将多个参数连接在一起。 在使用POST方法时,浏览器将要请求的数据打包并放置在HTTP请求体中。请求头中会包含请求体的大小等信息。 |
| GET方法将数据附加到URL中,因此数据大小有限制。在URL中,只能传递ASCII字符,并且URL的长度有限制。 POST方法将数据放在HTTP请求体中,因此数据大小不受限制。但是,Web服务器和Web应用程序可能会对POST请求的大小进行限制。 |
| GET方法的参数是通过URL传递的,因此可以很容易地在浏览器地址栏中看到。 POST方法将数据放在HTTP请求体中,因此相对于GET方法更加安全。但是请求体可能被捕获。 |
| GET方法具有缓存机制。如果浏览器请求的资源已经在本地缓存中存在,浏览器将使用缓存而不是向服务器发送请求。这可以提高Web应用程序的性能。 POST方法没有缓存机制。每次使用POST方法发送请求时,浏览器都会向Web服务器发送请求,Web服务器也会重新处理请求。因此,POST方法的性能相对于GET方法较低。 |
常见的 HTTP 状态码有哪些
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
HTTPS 和 HTTP 的区别
HTTPS 相较 HTTP 不是一种新协议,只是在 HTTP 通信接口部分使用了 SSL和TLS协议来实现。使得 HTTP 先与 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接与 TCP 通信。
1.SSL安全协议
HTTP 信息是明⽂传输,存在安全⻛险的问题。
HTTPS 在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
2.建立连接
HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。
HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
3.端口号
HTTP 的端⼝号是 80。
HTTPS 的端⼝号是 443。
4.CA证书
HTTPS 协议需要向 CA(证书权威。机构)申请数字证书来保证服务器的身份是可信的。
https的请求过程?
用户在浏览器里输入一个https网址,然后连接到server的443端口。
服务器将自己的数字证书(含有公钥)发送给客户端。
客户端收到服务器端的数字证书之后,会对其进行检查,如果不通过,则弹出警告框。如果证书没问题,则生成一个密钥(对称加密),用证书的公钥对它加密。
客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。
服务器将加密后的密文返回给客户端。
客户端收到服务器发返回的密文,用自己的密钥(客户端密钥)对其进行对称解密,得到服务器返回的数据。
对称加密和非对称加密的区别
对称加密算法:加密和解密使用相同密钥的加密算法。常见的对称加密算法有AES、3DES、DES、RC5、RC6等。
非对称加密算法:非对称加密算法需要两个密钥(公开密钥和私有密钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。主要的非对称加密算法有:RSA、Elgamal、DSA、D-H、ECC。
相关文章:
C++面试题记录(网络)
TCP与UDP区别 1. TCP面向连接,UDP无连接,所以UDP数据传输效率更高 2.UDP可以支持一对一、一对多、多对一、多对多通信,TCP只能一对一 3. TCP需要在端系统维护连接状态,包括缓存,序号,确认号,…...
YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)
摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…...
图论(从数据结构的三要素出发)
文章目录 逻辑结构物理结构邻接矩阵定义性能分析性质存在的问题 邻接表定义性能分析存在的问题 十字链表(有向图)定义性能分析 邻接多重表(无向图)定义性能分析 数据的操作图的基本操作图的遍历广度优先遍历(BFS)算法思想和实现性能分析深度优先最小生成…...
spark相关知识
1.Spark的特点 Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。 运行速度快,易使用,强大的技…...
K8S认证|CKA题库+答案| 12. 查看Pod日志
目录 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目: 开始操作: 1)、切换集群 2)、提取错误日志 3)、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目: 您必须在以下C…...
【Java SE】 String、StringBuff和StringBuilder
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 字符串不可变性1.1 设计不可变1.2 修改字符串创建新对象1.3 为什么字符串不可变1.4 String类设计不可变的…...
产品经理-需求分析(三)
1. 需求分析 从业务的需要出发,确定业务目的和目标,将业务需求转为产品需求 1.1 业务需求 业务需求 业务动机 业务目标 就是最根本的动机和目标成果,通过这个需求解决特定的问题 1.2 产品需求 产品需求 解决方案 产品结构 产品流程…...
Linux 编译器gcc/g++使用
gcc/g同理 编译器运行过程 1. 预处理(进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下 2. 编译&#x…...
adam优化器计算过程(tensorflow)
一、adam原理 原理 应用 优点 缺点 二、手动实现 一步一步计算 三、使用tensorflow api实现 api使用 四、一个具体的深度学习的例子...
【数据结构与算法 | 链表篇】力扣876
1. 力扣876 : 链表的中间节点 (1). 题 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表…...
kubeadm引导欧拉系统高可用的K8S1.28.X
文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker&#x…...
【信息学奥赛】字典的键和值对换
【信息学奥赛】字典的键和值对换 💖The Begin💖点点关注,收藏不迷路💖 输入一个字典,要求将该字典的键和值对换。(注意,字典中有键的值是重复的) 输入: 一行࿰…...
使用Django框架搭建Web应用
文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…...
我用Mybatis的方式封装了OLAP查询!
背景 相信做数据平台的朋友对OLAP并不陌生,主流的OLAP引擎有Clickhouse,Impala,Starrocks…以及公司二开的OLAP平台,本次要说的OLAP属于最后一种。 最近在做一个BI项目,业务背景很简单,就是一个数据展示平…...
golang rune类型解析,与byte,string对比,以及应用
Golang中的rune类型是一个32位的整数类型(int32),它是用来表示Unicode码点的。rune类型的值可以是任何合法的Unicode码点,它通常用来处理字符串中的单个字符。 在Golang中,字符常量使用单引号来表示,例如 a。使用单引号表示的字符…...
重学java 51.Collections集合工具类、泛型
"我已不在地坛,地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…...
多语言印度红绿灯系统源码带三级分销代理功能
前端为2套UI,一套是html写的,一套是编译后的前端 后台功能很完善,带预设、首充返佣、三级分销机制、代理功能。 东西很简单,首页就是红绿灯的下注页面,玩法虽然单一,好在不残缺可以正常跑。...
HTML拆分与共享方式——多HTML组合技术
作者:私语茶馆 1.应用场景 如果是一个产品级的Web项目,往往非常多的页面部分是重复的(为保持风格一致),每个HTML页面将这些重复部分重新写一次,既带来极大的工作量,也造成后续修改不便。 因此会考虑到将一个HTML的不同部分拆分为多个HTML页面,利用类似Include方式包含…...
K8s集群之 存储卷 PV PVC
目录 默写 1 如何将pod创建在指定的Node节点上 2 污点的种类(在node上设置) 一 挂载存储 1 emptyDir存储卷 2 hostPath存储卷 ①在 node01 节点上创建挂载目录 ② 在 node02 节点上创建挂载目录 ③ 创建 Pod 资源 ④ 在master上检测一下:…...
“腾讯云 AI 代码助手”体验
一、“腾讯云 AI 代码助手”体验 1、注册账号并进行实名认证 2、进入开发环境 3、体验javascript简单函数 代码如下: //请写一个两个日期计算的函数 function dateDiff(date1, date2) {return date2.getTime() - date1.getTime(); } var date1 new Date("2…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
