计网面试干货---带你梳理常考的面试题

顾得泉:个人主页

个人专栏:《Linux操作系统》 《C++从入门到精通》  《LeedCode刷题》

键盘敲烂,年薪百万!


一、HTTP和HTTPS的区别

       1.安全性:HTTPS通过SSL/TLS协议对数据进行加密处理,有效防止数据在传输过程中被窃听或篡改。而HTTP传输的数据是明文形式,不进行加密处理,因此安全性较低。

       2.端口:HTTP的标准端口是80,而HTTPS的标准端口是443。

       3.加密方式:HTTPS使用SSL/TLS协议对数据进行加密,这增加了额外的计算资源消耗,可能导致带宽和CPU使用率增加。而HTTP不进行加密处理,因此在性能上可能略优于HTTPS。

       总的来说,虽然HTTP在传输速度上可能略优于HTTPS,但考虑到数据安全的重要性,推荐网站使用HTTPS协议来传输数据,以提升网站的安全性和用户体验。随着技术的进步和普及,HTTPS的性能损耗正在逐渐减少,同时越来越多的浏览器和搜索引擎都在鼓励使用HTTPS,以提供一个更加安全的网络环境。


二、HTTPS如何确保安全性

       1.加密通信:HTTPS使用SSL/TLS协议对数据进行加密。这意味着所有通过HTTPS传输的数据都会被加密,即使数据在传输过程中被截获,没有相应的密钥也无法解读数据内容。

       2.身份验证:SSL/TLS协议还包括了身份验证的步骤,确保通信双方是可信的。这通常是通过SSL证书来实现的,证书由权威的证书颁发机构(CA)签发,保证了服务器的真实性。

       3.完整性保护:除了加密和身份验证之外,HTTPS还确保数据的完整性,防止数据在传输过程中被篡改。这是因为SSL/TLS协议会使用消息认证码(MAC)来验证数据是否在传输过程中被更改。

       4.安全连接:HTTPS在客户端(通常是用户的浏览器)和服务器之间建立一个安全的连接,这个连接是通过协商加密算法和交换密钥来建立的。这个过程通常称为“握手”,是确保后续通信安全的关键步骤。


三、TCP和UDP的区别

       1.连接性:TCP是一种面向连接的协议,它在数据传输前需要通过3次握手过程建立连接,而UDP是无连接的,它可以直接发送数据,不需要建立连接过程。

       2.可靠性:TCP提供可靠的数据传输服务,包括数据包的顺序传送、错误检测与重传等,确保数据能够按顺序、完整地到达接收端。相比之下,UDP不保证数据的可靠传输,它不进行错误检测和纠正,也不保证数据包的顺序,因此可能会出现数据丢失或乱序的情况。

      3. 传输方式:TCP面向字节流,意味着数据被看作一连串的字节流进行传输,而不是独立的数据包。UDP则是面向报文的,每个数据报文都是独立传输的,保持了报文的边界。

       4.效率和速度:由于UDP没有复杂的传输控制机制,它的首部开销小(只有8个字节),对系统资源的要求较少,因此在传输速率上通常比TCP更快。而TCP首部有20个字节,且需要进行流量控制和拥塞控制,对系统资源的消耗更多。

       5.应用场景:TCP适用于对数据完整性和可靠性要求较高的应用,如文件传输、电子邮件、网页浏览等。而UDP适用于对实时性要求较高或对可靠性要求不高的应用,如在线视频、音频通信和某些游戏。

       总的来说,TCP和UDP各有优势和适用场景。TCP以其可靠的数据传输机制在许多应用中发挥着重要作用,而UDP则以其高效快速的特点在特定领域得到应用。


四、TCP的链接过程

TCP的连接过程通常被称为三次握手

       第一次握手:客户端向服务器发送一个TCP报文,其中SYN(同步序列编号)标志位设置为1,表明这是一个连接请求,并且包含一个随机的初始序号(seq=x)。此时,客户端进入SYN_SENT状态,等待服务器的响应。

       第二次握手:服务器收到客户端的连接请求后,如果同意建立连接,则会返回一个TCP报文。在报文中,服务器也会将SYN和ACK(确认)标志位都设置为1,确认号(ack)设置为客户端初始序号加1(ack=x+1),并且包含服务器自己的初始序号(seq=y)。这表示服务器已经准备好接受数据,此时服务器进入SYN_RCVD状态。

       第三次握手:客户端再次向服务器发送报文,报文中ACK标志位设置为1,确认号设置为服务器初始序号加1(ack=y+1)。这个报文是对服务器SYN报文的确认。完成这一步之后,双方确认了彼此的初始序号,并准备好开始数据传输。此时,TCP连接正式建立,并且是全双工模式,也就是说数据可以在两个方向上同时传输。

       总的来说,这个过程确保了通信双方能够确知对方的存在,并且可以协商一些传输参数,如最大报文段长度、最大窗口大小等,同时也对传输实体资源进行分配,如缓存大小等。


五、TCP如何实现数据的可靠性

       1.序列号/确认应答:每个数据包都被赋予一个唯一的序列号,接收方使用确认号来告知发送方已成功接收的数据。如果发送方在一定时间内未收到某个数据包的确认,它会重传这个数据包。

       2.超时重传:当发送方发送数据后会启动一个定时器,如果在定时器超时前没有收到相应的确认应答,发送方会重新发送该数据。这种机制确保了即使确认应答丢失或延迟,数据也不会丢失。

       3.检验和:TCP首部包含了检验和字段,用于检查数据在传输过程中是否出现错误。接收端在接收到数据后会计算检验和并与首部的检验和比对,不匹配则说明数据出错并丢弃相应的TCP段,随后发送方会重新发送。

       4.滑动窗口控制:通过滑动窗口机制,发送方可以连续发送多个数据报文段而不必等待每个报文段的确认应答,从而提高传输效率。窗口的大小可以根据接收方的处理能力和网络状况进行调整。


六、TCP为什么要三次握手

       TCP协议使用三次握手来建立连接主要是为了确保数据传输的可靠性和正确性。具体分析如下:

       1.防止历史连接:三次握手可以防止已经失效的连接请求突然被服务器接收到,从而错误地建立连接。如果是两次握手,服务器在收到第一个握手(SYN)后直接进入连接状态,如果这个报文是之前某个连接的延迟报文,那么会导致错误建立连接。

       2.同步初始序列号:通过三次握手,客户端和服务器可以相互通知对方自己的初始序列号,这个序列号用于后续数据传输中的序号和确认号的同步,确保数据包的正确排序和检测丢失的数据包。

       3.避免资源浪费:三次握手可以确保双方都具备接收和发送数据的能力。在第三次握手时,客户端再次确认服务器的SYN,这样服务器就知道客户端已经准备好接收数据了。如果此时客户端没有发送确认,服务器会知道连接没有建立成功,从而释放相关资源,避免资源的浪费。


七、TCP为什么不能两次握手

       TCP协议使用三次握手来建立连接,而不能使用两次握手的原因是为了确保数据传输的可靠性和安全性。

       在两次握手的情况下,客户端发送连接请求到服务器,服务器收到请求后返回确认信息,此时客户端会认为连接已经建立,可以发送数据了。但是,如果这个确认信息在网络中被延迟,那么服务器并没有收到客户端的请求,但是客户端已经开始发送数据了。这种情况下,服务器会以为是一个新的连接请求,从而向客户端发送确认信息。此时,客户端会认为这个确认信息是对之前请求的回应,从而建立了一个错误的连接。这种错误的连接可能会导致数据包的丢失、重复、乱序等问题,从而导致数据传输的不可靠性和安全性。

       因此,TCP协议使用三次握手来建立连接,通过第三次握手的确认信息来确保双方都已经收到并确认了对方的请求和响应,从而保证数据传输的可靠性和安全性。


八、TCP为什么要四次挥手

       第一次挥手:客户端向服务器发送FIN报文,表明自己已经没有数据要发送了。但此时客户端仍然能够接收数据。

       第二次挥手:服务器收到客户端的FIN报文后,会发送ACK报文作为响应,确认序号为收到序号加1。此时,客户端进入FIN_WAIT_2状态。

       第三次挥手:服务器向客户端发送FIN报文,表明服务器也没有数据要发送了。然后客户端回应ACK,确认序号为收到序号加1。

       第四次挥手:客户端等待一段时间后,确定服务器端没有更多数据发送,就关闭连接。


九、TCP/IP五层模型是什么

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

十、HTTP1.0/1.1/2.0的区别

       HTTP1.0:是第一个广泛使用的HTTP版本,它使用短连接,每个请求都需要建立一个新的TCP连接。因此,每次请求都需要经历三次握手和慢启动过程,这会导致连接建立的延迟和网络拥塞。此外,HTTP1.0不支持长连接,每个请求完成后都会关闭TCP连接,导致请求响应速度较慢。

       HTTP1.1:通过引入持久连接来解决HTTP1.0的问题,即同一个TCP连接可以发送多个请求和响应。此外,HTTP1.1还引入了管道化技术,使得客户端可以同时发送多个请求而无需等待响应,从而提高了网络性能。此外,HTTP1.1还支持分块传输编码和压缩传输等技术来提高传输效率。

       HTTP2.0:相对于HTTP1.x,HTTP2.0的最大变化是采用了二进制协议而非文本协议,提高了传输效率。此外,HTTP2.0还支持多路复用技术,即在一个TCP连接上可以同时处理多个请求和响应,从而避免了HTTP1.x中建立多个TCP连接的问题。同时,HTTP2.0还支持服务器推送技术和头部压缩等功能。


结语:关于本次常见面试题的梳理到这里就结束了,希望本篇文章的分享会对大家的面试带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言,最后祝愿每位伙伴都能找到心意的工作。 

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

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

相关文章

函数栈帧的创建和销毁(详细理解)

🎁个人主页:我们的五年 🔍系列专栏:c语言课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 问题: 1.ebp,esp两个寄存器用来维护函数栈帧 2.main函数也一个函数&#…

Darknet+ros+realsenseD435i+yolo(ubuntu20.04)

一、下载Darknet_ros mkidr -p yolo_ws/src cd yolo_ws/src git clone --recursive https://github.com/leggedrobotics/darknet_ros.git #因为这样克隆的darknet文件夹是空的,将darknet_ros中的darknet的文件替换成如下 cd darknet_ros git clone https://github.…

2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题是由安全生产模拟考试一点通提供,湖北省安全员-B证证模拟考试题库是根据湖北省安全员-B证最新版教材,湖北省安全员-B证大…

错误: 找不到或无法加载主类问题(已解决)

今天在虚拟机中安装了idea2023.2的版本,运行代码时发现错误找不到主类! 直接说结论: 我先clean了一下target,然后重新build,发现maven报错了,idea2023.2默认使用了内置的maven,然后我切换了一下…

Linux基础之僵尸进程与孤儿进程

目录 一、僵尸进程 1.1 什么是僵尸进程 1.2 为什么要有僵尸状态 1.3 观察我们的僵尸状态 1.4 关于僵尸进程的小Tip 二、孤儿进程 2.1 什么是孤儿进程 一、僵尸进程 1.1 什么是僵尸进程 在上一篇文章中,我们有提到过进程的死亡状态的概念,而我们的…

Transformer 模型

文章目录 前言一、模型结构 前言 Transformer 模型是由谷歌在 2017 年提出并首先应用于机器翻译的神经网络模型结构。机器翻译的目标是从源语言(Source Language)转换到目标语言(Target Language)。Transformer 结构完全通过注意力…

IDC:2023年中国IT安全软件市场同比增长4.7%

IDC最新发布的《中国IT安全软件市场跟踪报告,2023H2》显示,2023年下半年中国IT安全软件市场厂商整体收入约为169.8亿人民币(约合23.5亿元美元),同比上升2.7%。结合全年数据,2023全年中国IT安全软件市场规模…

Linux命令使用

一、ls tree clear 1.1 ls ls:查看当前目录下的文件名ls 目录名:查看指定目录下的文件名ls /:查看根目录下的文件名ls -a:查看当前目录下的所有文件名,包括隐藏文件ls -l:查看当前目录下文件的详细信息…

python EEL + vue3.js 项目中如何把组件中的函数提升为全局函数

eel官方示例中暴露的js函数是全局函数,vue中的自定义函数作用域通常都是组件范围内。要让eel.js调用,需要将其升为全局可用。 一般方法有 app.config.globalProperties 或 mixin等。 main.js //main.jsimport { createApp } from vue import App from…

Java中Set不同实现类的对比

Java中Set不同实现类的对比 在Java的集合框架中,Set接口表示一个不包含重复元素的集合。与List接口不同,Set不保证元素的顺序(除非使用它的某个特定实现,如LinkedHashSet),且不支持索引访问。Java提供了几…

Java中的数组、Set、List、Map类型的互相转换总结

序言 数组、Set、List、Map是Java语言非常常用的几种数据类型,他们之间存在着千丝万缕的联系。关于底层的数据结构我这里就不再多说啦,直接从应用出发,总结他们之间的转换方法,并给出推荐方法。 大家可以点赞收藏等到需要的时候…

【JAVA】嵌入式软件工程师-2025校招必备-详细整理

一、Java 基础 1.JDK 和 JRE 有什么区别? jdk:java development kit jre:java runtime Environment jdk是面向开发人员的,是开发工具包,包括开发人员需要用到的一些类。 jre是java运行时环境,包括java虚拟机…

SVDD(Singing Voice Deepfake Detection,歌声深度伪造检测)挑战2024

随着AI生成的歌声快速进步,现在能够逼真地模仿自然人类的歌声并与乐谱无缝对接,这引起了艺术家和音乐产业的高度关注。歌声与说话声不同,由于其音乐性质和强烈的背景音乐存在,检测伪造的歌声成为了一个特殊的领域。 SVDD挑战是首个…

惠州在线教育系统公司,K12数学受资本关注?麦斯数学获数千万人民币Pre-A轮融资

K12赛道一直是很火热的,大家也非常关注细分领域中的数学。近日麦斯数学宣布完成数千万人民币Pre-A轮融资,投资方为联想之星。 麦斯数学由51Talk联合创始人舒婷创立,目标定位于9-15岁的青少儿群体。据了解,麦斯数学以在线12-16人小…

电脑常用的PDF阅读器-嗨动PDF编辑器!带你详细了解它

电脑常用的PDF阅读器-嗨动PDF编辑器!在数字化信息爆炸的时代,PDF格式的文件因其易于打印和保留原始格式等优点,成为了人们日常工作和学习的常用格式。而对于PDF文件的处理,一款功能强大、操作简便的PDF阅读器是必不可少的。今天&a…

小白学dubbo傻冒连问-长连接篇

dubbo长连接有多长? dubbo的长连接并没有一个固定的时间长度,因为它是相对于通常的短连接而言的,主要特点是长时间保持客户端与服务端的连接状态。 在dubbo中,缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并…

SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类3.1 引入myb…

FastAdmin菜单规则树形结构分类显示

控制器controller文件Classification.php <?phpnamespace app\admin\controller\classification;use app\common\controller\Backend; use fast\Tree; use think\Db; use app\admin\model\AuthRule; use think\Cache;/*** 模块分类管理** icon fa fa-circle-o*/ class Cla…

Linux/Debian/Ubuntu系统中apt/apt-get的20个常见命令

apt的20个常见命令 以下是apt的20个常见命令&#xff1a; apt install <package>&#xff1a;安装软件包。apt remove <package>&#xff1a;移除软件包。apt purge <package>&#xff1a;移除软件包及其配置文件。apt update&#xff1a;更新可用软件包列…

学习前端第三十七天(静态属性静态方法、类检查、错误处理)

一、静态属性和静态方法 1、静态属性静态方法 在属性和方法前加上static&#xff0c;创建属于类自己的属性和方法 class Person {// 加static&#xff0c;属于类自己的static name "xc"; // 类的name属性static height 183; // 类的height属性static age 20;…