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

发布于:2024-05-16 ⋅ 阅读:(26) ⋅ 点赞:(0)

顾得泉:个人主页

个人专栏:《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还支持服务器推送技术和头部压缩等功能。


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


网站公告

今日签到

点亮在社区的每一天
去签到