网络知识模块面试题

网络知识

1. 网络协议为什么都要分层

  • 简化设计复杂性:将庞大复杂的网络通信任务分解为多个相对简单的子任务,每个子任务由一层来完成,便于设计、实现和维护。
  • 独立性与可扩展性:各层相互独立,一层的变化通常不会影响其他层,有利于技术的更新和功能的扩展。
  • 促进标准化:每一层的功能和服务都有明确规范,便于不同厂商的设备和软件遵循统一标准,实现互联互通。
  • 便于故障排查:分层结构使得网络故障的定位和排查更加容易,可快速确定问题所在的层次。

2. 什么是网络协议

网络协议是指为计算机网络中进行数据交换而建立的规则、标准或约定的集合。它规定了通信双方在数据传输、交换和处理等过程中的格式、顺序、动作和响应等,确保不同设备和系统之间能够准确、可靠地进行通信。

3. 常见的协议

  • 应用层:HTTP(超文本传输协议)用于网页数据传输;FTP(文件传输协议)用于文件的上传和下载;SMTP(简单邮件传输协议)用于发送邮件;POP3(邮局协议版本3)用于接收邮件;DNS(域名解析协议)用于将域名转换为IP地址。
  • 传输层:TCP(传输控制协议)提供可靠的面向连接的传输服务;UDP(用户数据报协议)提供无连接的不可靠传输服务。
  • 网络层:IP(网际协议)负责网络中数据的寻址和路由;ARP(地址解析协议)用于将IP地址转换为物理地址。
  • 数据链路层:PPP(点对点协议)常用于拨号上网等场景;Ethernet(以太网协议)用于局域网通信。

4. OSI七层参考模型

  • 应用层:为用户提供访问网络的接口,提供如HTTP、FTP等应用程序服务。
  • 表示层:负责数据的格式化、加密、解密、压缩、解压缩等,确保不同系统间数据格式的兼容性。
  • 会话层:建立、维护和管理会话连接,如会话的建立、拆除和同步等。
  • 传输层:为用户提供可靠的端到端服务,处理数据包错误、顺序等问题,常见协议有TCP和UDP。
  • 网络层:实现节点间数据传输的逻辑链路创建、路由选择、拥塞控制和网络互联等,主要协议是IP。
  • 数据链路层:实现网卡接口的网络驱动,处理数据在物理媒介上的传输,通过“帧”传输,进行差错控制和流量控制。
  • 物理层:是网络通信的数据传输介质,负责处理数据传输和监控数据错误率,实现数据流的透明传输。

5. TCP/IP参考模型

  • 应用层:提供用户访问网络的接口和常用应用程序服务,与OSI应用层功能类似。
  • 传输层:提供可靠或不可靠的端到端数据传输服务,屏蔽下层通信细节,主要有TCP和UDP协议。
  • 网络层:负责数据的寻址、路由选择和网络互联等,核心协议是IP。
  • 数据链路层:实现数据在物理链路中的传输,进行差错检测和纠正等。

6. 什么是TCP协议

TCP(传输控制协议)是一种可靠的、面向连接的、基于字节流的传输层通信协议。通信双方在传输数据前需先建立TCP连接,在通信过程中,通过超时重传、数据确认、数据校验等机制保证数据传输的可靠性,通信结束后通过四次挥手关闭连接。

7. 什么是UDP协议

UDP(用户数据报协议)是一种无连接的、不可靠的数据报协议。在通信前无需与对方建立连接,直接在数据包中加入接收方的IP地址及端口号就可发送数据,发送方不关心接收方是否能收到数据,具有效率高但不保证可靠性的特点,且发送的数据报有大小限制,超出限制需分包发送。

8. 电脑上有多少个端口号

电脑上TCP和UDP的端口号都有65536个,端口号范围是0 - 65535。其中,0 - 1023为知名端口,通常被一些特定的系统服务占用;1024 - 49151为注册端口,一般由应用程序使用;49152 - 65535为动态或私有端口,可由应用程序动态分配使用。

9. TCP的三次握手是怎么进行的

  • 第一次握手:客户端发送一个带有“SYN=1,ACK=0”标志的数据包给服务器端,请求建立连接。
  • 第二次握手:服务器端收到请求后,若允许连接,则发送一个包含“SYN=1,ACK=1”标志的数据包给客户端,告知客户端可以通讯,并让客户端发送一个确认数据包。
  • 第三次握手:客户端再发送一个包含“SYN=0,ACK=1”的数据包给服务器端,告诉服务器端连接已被确认,此时TCP连接建立完成。

10. TCP的四次挥手关闭连接

  • 第一次挥手:主动关闭方发送关闭请求指令“FIN”,然后进入“等待关闭状态”,不再向对方发送数据。
  • 第二次挥手:接收方收到关闭请求后,因可能有数据正在发送,不会马上关闭,而是发送“ACK”给主动关闭方,告知已收到关闭请求并同意关闭,但需等待数据传输完毕。
  • 第三次挥手:接收方数据传输完毕后,向主动关闭方发送“FIN”,告知可以关闭连接。
  • 第四次挥手:主动关闭方再次向接收方发送“ACK”确认指令,双方达成一致,连接关闭。

11. 什么是HTTP协议?什么是HTTPS协议

  • HTTP协议:超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,它规定了客户端和服务器之间请求和响应的格式与规则,以实现网页等资源的获取和展示。
  • HTTPS协议:安全超文本传输协议,它是在HTTP的基础上加入了SSL/TLS加密层,对数据进行加密传输,确保数据的保密性、完整性和身份验证,提高了网络通信的安全性。

12. 如何使用HTTPS协议

  • 获取SSL/TLS证书:从权威的证书颁发机构(CA)申请或购买SSL/TLS证书,也可使用免费的证书,如Let’s Encrypt提供的证书。
  • 配置服务器:将证书安装到Web服务器上,并进行相关配置,如在Apache、Nginx等服务器中设置证书路径等参数。
  • 更新网站链接:将网站的所有链接从HTTP改为HTTPS,确保客户端与服务器之间的通信都通过加密的连接进行。
  • 浏览器支持:用户无需进行额外操作,现代浏览器都支持HTTPS协议,会自动验证证书的有效性并进行加密通信。

13. Java如何实现网络编程

Java通过java.net包下的类来实现网络编程:

  • 基于TCP:使用ServerSocket类创建服务器端,监听指定端口,等待客户端连接;使用Socket类创建客户端,与服务器端建立连接,然后通过输入输出流进行数据的读写。
  • 基于UDP:使用DatagramSocket类既可以作为发送方也可以作为接收方,通过DatagramPacket类来封装要发送或接收的数据报,实现数据的发送和接收。

14. 基于TCP的Socket的实现(服务端代码示例)

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) {
        try {
            // 创建ServerSocket,监听指定端口
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器已启动,正在监听端口8888...");

            // 等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端已连接:" + socket.getInetAddress().getHostAddress());

            // 获取输入流,读取客户端发送的数据
            InputStream inputStream = socket.getInputStream();
            byte[] buffer = new byte[1024];
            int length;
            StringBuilder message = new StringBuilder();
            while ((length = inputStream.read(buffer))!= -1) {
                message.append(new String(buffer, 0, length));
            }
            System.out.println("收到客户端消息:" + message.toString());

            // 获取输出流,向客户端发送数据
            OutputStream outputStream = socket.getOutputStream();
            String response = "收到你的消息啦!";
            outputStream.write(response.getBytes());

            // 关闭连接
            inputStream.close();
            outputStream.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值