"你准备好接受面试了吗?"
"当然是。请开始。"
"大。能否谈谈你对计算机网络的了解?也许我们可以从TCP是什么以及它如何工作开始。"
"嗯……嗯……嗯……"
"好的,谢谢你今天的时间。请等待未来几天的进一步通知。"
这看起来和你的经历相似吗?
不要放弃, 你绝对可以做得更好。
这是技术面试中会遇到的一些常见计算机网络问题。它们大多数与应用程序,传输和网络层有关。你可以按照本指南从头开始学习计算机网络,并向面试官清楚地解释它们。
1. 计算机网络的体系结构是什么?
通常,计算机网络概念通常分为5个主要层。这是OSI(开放系统互连)模型和TCP / IP模型的组合,分别具有7层和4层。
> Different Models of Computer Networks (Image by Author)
2. 每层的功能是什么?
以下介绍将基于OSI网络模型:
- 应用程序层:应用程序层的任务是指定主机运行的应用程序进程之间的通信协议或接口。应用层中有一些通用协议,例如HTTP(超文本传输协议),DNS(域名系统)和SMTP。
- 表示层:此层主要负责将来自应用程序层的数据转换为所需的格式(例如ASCII)。此处完成了一些工作,例如数据加密/解密和压缩。
- 会话层:此层负责在两个进程之间建立和维护连接或会话。它还允许进程添加检查点以进行同步。
- 传输层:它通过网络在应用程序之间提供端到端的数据(段)传输服务。传输层最著名的协议是TCP(传输控制协议)和UDP(用户数据报协议)。
- 网络层:网络层负责数据包(数据块)的路由。具体来说,网络层选择合适的传输路径,并从其他网络发送和接收IP(互联网协议)数据包。
- 数据链路层:该层将来自网络层的IP数据包封装为帧,并通过链路节点发送它们。帧传输取决于MAC(消息访问控制)地址。可以通过发送ARP(地址解析协议)请求来获取接收者的MAC地址,以查看是否有任何节点具有所需的IP地址。
- 物理层:负责节点之间的位传输,这是物理连接(通过物理数据链路),并尽可能消除设备之间的差异。
3. 传输层中的TCP和UDP是什么?他们有什么区别?
TCP(传输控制协议)是一种面向连接的服务,这意味着它在传输数据之前建立连接,并在传输之后关闭连接。
TCP的可靠性反映在通过三向握手建立连接,以及一些机制如错误检测,流控制,拥塞控制和重传。这些功能将花费大量开销并占用处理器资源。
TCP通常用于文件传输,邮件的发送和接收以及远程登录。
UDP(用户数据报协议)不需要在数据传输之前建立连接,这意味着远程主机在接收到UDP段之后不需要进行确认。
尽管UDP无法提供可靠的传输,但它在某些情况下(通常是即时消息传递)是最有效的服务,例如实时音频和视频流。
> TCP v.s. UDP (Image by Author)
4. TCP如何建立和终止连接?
我们首先来看一下如何在客户端/服务器模型中建立TCP连接,该模型通常称为三向握手:
- 客户端:它发送一个SYN段,该段请求服务器将其序列号与客户端的序列号同步。
- 服务器:从客户端接收到数据包后,服务器将返回SYN和ACK段,这会通知客户端已收到该数据包,并要求其提供用于确认的预期序列号。
- 客户端:它发送回带有ACK段的数据包,该数据包通知服务器已正确接收了返回的数据包。
> TCP Connection Establishment (Image by Author)
SYN段确认从发送方到接收方的路由没有问题,但是从接收方到发送方的路由应由ACK段确认。
接下来,我们将讨论TCP如何在"客户端/服务器"模型中终止连接,这是一个四次握手过程:
- 客户端:决定关闭连接后,客户端将向服务器发送FIN段。然后,客户端将进入FIN_WAIT_1状态,等待来自服务器的确认。
- 服务器:一旦接收到来自客户端的FIN段,它将发送回ACK段。
- 客户端:从服务器接收到ACK段后,它进入FIN_WAIT_2状态,服务器正在等待另一端发送的FIN段。
- 服务器:它还会关闭与客户端的连接,并在发送ACK段后发送FIN段。
- 客户端:接收到来自服务器的ACK段后,客户端会发回最终的ACK段进行确认。之后,客户端将进入TIME_WAIT状态,如果另一端未收到最终的ACK段,则客户端将在一段时间后正式关闭。
5. 什么是ARQ(自动重复请求)?
ARQ是一种错误控制方法,用于在传输层和数据链路层中进行数据传输。
确认和超时用于确保可靠的数据传输。如果接收方在给定时间内没有收到确认,它将重新发送同一数据包,直到返回确认或超出预定义的重传时间为止。
有两种类型的ARQ,包括:
- 停止等待ARQ:停止等待ARQ的基本思想是发送方每次发送数据包后都会停止数据传输。如果在给定时间后未收到接收方的确认,则传输将被视为失败。这意味着应该重新传输数据,直到收到确认为止。如果接收方收到重复的数据包,则应放弃此数据包并同时发送回确认。
- Go-Back-N ARQ:发件人维护一个滑动窗口,该窗口中的数据包可以连续发送,无需等待确认。接收器通常仅接收有序数据包,并在最后一个数据包到达后发回累积ACK。
6. TCP如何实现流量控制?
流控制的目的是控制数据包发送的速度,以确保接收方可以及时接收到它。
TCP可以通过滑动窗口来实现流控制。发送方的滑动窗口大小可以由接收方返回的ACK段控制,这也可能影响发送速度。
7. TCP如何实现拥塞控制?
当对网络资源的请求超出其可以处理的数据量时,就会发生网络拥塞。
拥塞控制是为了防止过多的数据注入网络,以使网络链接或节点不会过载。
TCP拥塞控制采用多种策略,包括:
- 启动缓慢:TCP不会首先将少量数据发送并在每个RTT(往返时间)后按指数方式逐渐增加拥塞窗口(cwnd)大小,而不是将大量数据吸收到网络中。
- 避免拥塞:拥塞窗口(cwnd)大小达到阈值后,它开始累加地增加以避免网络拥塞。
- 拥塞检测:这发生在发生拥塞时,拥塞窗口大小将成倍减小。假定在需要重发分组时发生拥塞。
- 快速重传和恢复(FRR):这是一种拥塞控制算法,可以快速恢复丢失的数据包。如果没有FRR,TCP将通过计时器暂停传输。在暂停期间,不会传输新的数据包。使用FRR,如果接收器收到一个分段,它将立即返回一个重复的ACK分段。发送方将在接收到三个重复的ACK段后假定该段丢失。FRR减少了重传的延迟。
8. 从输入URL到显示网页的过程是什么?
此过程可以分为几个步骤:
- DNS解析。
- 建立一个TCP连接。
- 发送HTTP请求。
- 服务器处理该请求并返回HTTP响应。
- 浏览器呈现网页。
- 紧密连接。
> The Process of Accessing URL and Protocols Used (Image by Author)
8. HTTP如何保存用户状态?
HTTP是一种"无状态"协议,这意味着它不会保存请求和响应本身之间的连接状态。
那么我们如何保存用户状态?
管理会话以解决此问题。会话的主要功能是从服务器端记录用户状态。
例如,当您将一些产品放入亚马逊购物车,并考虑以后再购买时。由于实际上是无状态的,因此系统实际上不知道是谁通过HTTP保存这些项目。因此,服务器将为您创建并保留一个特定的会话,从而可以跟踪您的购物信息。
9. 什么是计算机网络中的cookie?Cookies和会话之间有什么区别?
Cookie和会话都可以跟踪和存储用户身份,但是它们通常用于不同的情况。
Cookies通常用于存储用户信息。例如,在登录网站后,下次无需再次登录,因为我们的安全详细信息已作为令牌存储在cookie中。系统仅需根据令牌值查找用户。
会话通过服务器记录用户状态。使用会话的典型场景是在线购物车。由于HTTP是无状态的,因此服务器将通过将用户标记为会话来跟踪用户状态。
Cookie数据存储在客户端(浏览器)上,而会话数据存储在服务器端。这意味着与cookie相比,会话具有更高的安全级别。
10. HTTP和HTTPS有什么区别?
HTTP超出了TCP的范围,并使用纯文本传输内容。客户端和服务器端都无法验证彼此的身份。
HTTPS(安全超文本传输协议)是运行在SSL / TLS之外的HTTP,而SSL / TLS运行在TCP / IP之外。传输的所有内容均已加密。
因此,HTTPS的安全性高于HTTP,但是HTTPS比HTTP需要更多的资源。
需要明确的是,仍然有许多与计算机网络有关的知识。由于常见的技术面试,尤其是初级软件工程师的面试通常集中在网络层的上半部分,因此我们所看到的那些问题只是该领域的一小部分。