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。

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

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

相关文章

防火墙——域网络、专用网络、公用网络

在防火墙设置中,域网络、专用网络和公用网络是指计算机连接到网络时所处的不同环境。每种环境都有不同的安全级别和配置。 1、域网络(宽松) 域网络是指计算机加入了一个Windows域(Domain)环境,这通常在企业…

程序员的那些经典段子

哈喽,大家好,我是明智~ 本周咱们已经解决了在面试中经常碰到的OOM问题: 《美团一面,发生OOM了,程序还能继续运行吗?》 《美团一面:碰到过OOM吗?你是怎么处理的&#xff1…

白嫖的在线工具类宝藏网站清单,快点击进来收藏一波

简单整理了一下自己日常经常使用的10个免费工具网站,建议点赞关注收藏,快点分享给小伙伴们! 1.奶牛快传:用户体验更好的网盘工具。 https://cowtransfer.com/ 今年开始使用的一款网盘工具,和百度网盘类似,叫奶牛快传,如…

【设计模式】——装饰模式(包装器模式)

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

数据结构--二叉搜索树

目录 二叉搜索树的概念 二叉树的实现 结点类 函数接口总览 实现二叉树 二叉搜索树的应用 K模型 KV模型 二叉搜索树的性能分析 二叉搜索树的概念 二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,其具有以下几…

数据库(6)——数据类型

SQL标准常用的数据类型有: 数据类型含义CHAR(n),CHARACTER(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串CLOB字符串大对象BLOB二进制大对象SMALLINT2字节 短整数INT , INTEGER4字节 整数BIGINT8字节 大整数FLOAT(n)精度为n的浮点…

6818 android 修改开机 logo, 编译脚本分析

问题: 客户需要去掉 android5.1 的开机logo. 说明: 对于Android5.1 来说,uboot 与kernel 的logo 是一个。 过程: 其实对于开机logo 的修改很简单,直接参考厂家手册就可以了。 这是 android4.4 的开机logo 的修改&…

设计一个代办功能模块

目录 1. 需求分析2. 数据库设计用户表(Users Table)代办任务表(Tasks Table)订单表(Orders Table)评价表(Reviews Table) 3. 功能实现创建代办任务前端部分后端部分 接受代办任务前端…

产品经理-需求收集(二)

1. 什么是需求 指在一定的时期中,一定场景中,无论是心理上还是生理上的,用户有着某种“需要”,这种“需要”用户自己不一定知道的,有了这种“需要”后用户就有做某件事情的动机并促使达到其某种目的,这也就…

FPGA实现多路并行dds

目录 基本原理 verilog代码 仿真结果​ 基本原理 多路并行dds,传统DDS的局限性在于输出频率有限。根据奈奎斯特采样定理,单路DDS的输出频率应小于系统时钟频率的一半。但是在很多地方,要使采样率保持一致,所以,为了…

【CTF Web】CTFShow web7 Writeup(SQL注入+PHP+进制转换)

web7 1 阿呆得到最高指示&#xff0c;如果还出问题&#xff0c;就卷铺盖滚蛋&#xff0c;阿呆心在流血。 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\…

路径规划算法的复杂度

通常通过以下指标来衡量&#xff1a; 时间复杂度&#xff1a;这是评估算法执行所需时间的量度。它通常用大O符号表示&#xff0c;给出了算法运行时间随着输入规模增长的增长率。例如&#xff0c;一个时间复杂度为O(n^2)的算法在处理大规模输入时会比时间复杂度为O(n log n)的算…

PostgreSQL的扩展(extensions)-常用的扩展之pg_plan_advsr

PostgreSQL的扩展&#xff08;extensions&#xff09;-常用的扩展之pg_plan_advsr pg_plan_advsr 是 PostgreSQL 社区中的一个扩展&#xff0c;用于分析和改进查询执行计划。它能够自动识别哪些查询执行缓慢&#xff0c;并提供优化建议&#xff0c;以提高查询性能。pg_plan_ad…

AI时代存储大战,NAND闪存市场风云再起!

随着人工智能&#xff08;AI&#xff09;相关半导体对高带宽存储&#xff08;HBM&#xff09;需求的推动&#xff0c;NAND闪存市场也感受到了这一趋势的影响。 据《Business Korea》援引行业消息来源称&#xff0c;NAND闪存市场的竞争正在加剧&#xff0c;而存储巨头三星和SK海…

CSP俄罗斯方块(简单易懂)

开始将题目理解成了&#xff0c;开始的列应该是从输入图案的最左端开始计算&#xff0c;将前面所有的空列都删掉&#xff0c;代码如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

Redis的持久化方式:

Redis提供了两种数据持久化的方式&#xff1a; RDB 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 AOF 该机制将以日志的形式记录服务器所处理的每一个写操作。 在Redis服务器启动之初会读取文件来重新构建数据库&#xff0c;以保证启动后数据库中的数据是完…

leedcode【203】. 移除链表元素——Java解法

Problem: 203. 移除链表元素 题目思路解题方法复杂度Code效果 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val…

OS复习笔记ch6-1

死锁的原理 定义 一组进程中&#xff0c;其中每个进程因等待事件而阻塞&#xff0c;且所等待的事件只能被这组进程中的另一阻塞进程激发称之为死锁。 举例如下 四个车辆希望紧迫的希望能很快通过&#xff0c;每辆车需要两个象限的资源&#xff0c;然而四个车都只得到一个象…

golang调用aliyun的语音通话服务,复制直接使用

golang调用aliyun的语音通话服务 通过API使用语音通知/语音验证码——阿里云官方文档SingleCallByTts - 发送语音验证码或文本转语音类型的语音通知入门流程主要参数引入阿里云语音官方SDK-go版本完整代码通过API使用语音通知/语音验证码——阿里云官方文档 https://help.aliy…

电子电器架构 - AUTOSAR软件架构介绍

电子电器架构 - AUTOSAR软件架构介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…