计算机网络面试中常见的问题涉及多个层面,包括网络协议、网络体系结构、网络安全、数据传输等。以下是一些常见题目的详解:
1. OSI七层模型是什么?每层的功能是什么?
OSI七层模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,它从上到下分别是:
- 应用层:为应用程序提供交互服务,如HTTP、FTP、SMTP等协议。
- 表示层:数据的表示、安全、压缩,将应用层的数据转换为适合网络传输的格式。
- 会话层:建立、管理、终止会话,组织和协调两个会话进程之间的通信。
- 传输层:负责向两台主机进程之间的通信提供数据传输服务,包括TCP和UDP协议,实现数据的可靠传输。
- 网络层:选择合适的路由和交换结点,确保数据及时传送,主要协议为IP。
- 数据链路层:在两个相邻节点之间传送数据时,将网络层交下来的IP数据报组装成帧,并添加必要的控制信息。
- 物理层:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽传输介质和物理设备的差异。
2. TCP和UDP的区别是什么?
TCP(传输控制协议)和UDP(用户数据报协议)都是传输层的协议,它们的主要区别包括:
- 连接性:TCP是面向连接的协议,在传输数据前需要建立连接;而UDP是无连接的协议,发送数据前不需要建立连接。
- 可靠性:TCP提供可靠传输,通过序列号、确认应答、超时重传等机制确保数据正确传输;UDP则不提供可靠性保证,数据可能丢失或乱序到达。
- 传输效率:由于TCP需要建立连接和进行可靠性校验,因此其传输效率相对较低;而UDP没有这些开销,传输效率较高。
- 应用场景:TCP适用于需要可靠传输的应用场景,如文件传输、网页浏览等;UDP适用于对实时性要求较高、可以容忍一定数据丢失的应用场景,如视频直播、在线游戏等。
3. HTTP和HTTPS的区别是什么?
HTTP(超文本传输协议)和HTTPS(安全的超文本传输协议)的主要区别在于安全性:
- 安全性:HTTP传输的是明文,数据容易被截获和篡改;而HTTPS在HTTP的基础上增加了SSL/TLS协议层,对数据进行加密传输,确保数据传输的安全性。
- 端口号:HTTP默认使用80端口;HTTPS默认使用443端口。
- 性能:由于HTTPS需要进行加密和解密操作,因此其性能相比HTTP会有所下降。
4. TCP三次握手和四次挥手的过程是什么?
TCP三次握手的过程如下:
- 客户端发送一个SYN包(同步序列编号)到服务器,并进入SYN_SENT状态,等待服务器确认。
- 服务器收到SYN包后,确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(即SYN+ACK包),此时服务器进入SYN_RCVD状态。
- 客户端收到服务器的SYN+ACK包后,向服务器发送一个确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
TCP四次挥手的过程如下:
- 客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
- 服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
- 服务器关闭与客户端的连接,发送一个FIN给客户端,服务器进入LAST_ACK状态。
- 客户端收到FIN后,发一个ACK给服务器,确认序号为收到序号+1,客户端进入TIME_WAIT状态。服务器收到ACK后关闭连接,客户端等待2MSL后依然没有收到回复,则进入CLOSED状态。
5. 为什么TCP需要三次握手而不是两次?
TCP需要三次握手而不是两次握手的主要原因是确保双方都具有接收和发送数据的能力,从而建立可靠的连接。具体来说:
- 第一次握手:客户端发送SYN包,服务器确认客户端的发送能力。
- 第二次握手:服务器发送SYN+ACK包,客户端确认服务器的接收能力和发送能力。
- 第三次握手:客户端发送ACK包,服务器确认客户端的接收能力。
如果只有两次握手,可能会出现以下情况:客户端发送连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端。但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接。由于此时客户端已经没有发送数据请求,因此服务端将一致等待客户端发送数据,造成资源浪费。
6. HTTP常用的请求方式有哪些?它们之间的区别和用途是什么?
HTTP常用的请求方式包括GET、POST、PUT、DELETE、CONNECT、OPTIONS和TRACE等,其中GET和POST是最常用的两种。
- GET:用于发送请求以获取服务器上的数据。参数包含在URL中,适用于请求的数据量不大且对安全性要求不高的场景。
- POST:用于向URL指定的资源提交数据。参数通过请求体传递,适用于提交大量数据或对安全性要求较高的场景。
其他请求方式如PUT、DELETE等分别用于修改服务器上的数据、删除服务器上的资源等。这些请求方式各有其特定的用途和适用场景。
以上是对计算机网络面试中常见题目的详解。这些题目涵盖了网络协议、网络体系结构、数据传输等多个方面,是考察应聘者计算机网络知识的重要内容。