计算机网络面试题——第一篇

1. 常见的HTTP状态码有哪些

  1. 1xx:信息响应
  • 100 continue: 服务器已经接受请求的初步部分,客户端应继续请求。
  • 101 switching protocols:服务器统一切换协议,如从HTTP切换到websocket。
  1. 2xx:成功
  • 200 OK:请求成功,服务器返回所请求的资源或者数据
  • 201 Created:请求成功并创建了新的资源,常用于post请求。
  • 204 Not Content: 请求成功,但是服务器不返回任何内容,常用于删除操作。
  1. 3xx重定向
  • 301: 资源已经永久移到新的url,客户端使用新url访问。
  • 302 :资源临时移动到新的url,客户端应继续使用原来的url。
  • 304 Not Modified:资源未修改,客户端可以使用缓存版本。
  1. 4xx客户端错误
  • 400 Bad Request:请求无效或者语法错误,服务器无法处理
  • 401 :请求需要身份验证,客户端未提供有效凭证
  • 403 forbidden:服务器理解请求但拒绝执行,通常是权限问题
  • 404 not found:请求的资源在服务器上未找到
  1. 5xx 服务器错误
  • 500 Internal Server error:服务器内部错误
  • 502 Bad Gateway:服务器作为网关或者代理,从上游服务器接收到无效响应。
  • 503 Service unavailable:服务器暂时无法处理请求。

2. HTTP请求包含哪些内容,请求头和请求体有哪些类型

  1. HTTP请求由以下几部分组成
  • 请求行:包含请求方法、请求的资源路径、以及HTTP协议版本。
  • 请求头:包含各种键值对,用于传递客户端环境、请求内容、认证信息等。
  • 空行:用于分割请求头和请求体
  • 请求体:仅在Post、Put等方法中存在,包含需要发送到服务器的数据。
  1. 请求方法
  • get:请求指定的资源,通常用于获取数据,不包含请求体
  • post:向服务器提交数据,通常用于表单提交,数据在请求体中。
  • put:用于更新资源,数据也在请求体中。
  • delete:请求删除指定资源。
  1. 请求头部
  • Host:指定请求的主机名及端口,HTTP/1.1必须包含。
  • User-Agent:标识客户端信息,通常用于服务器端的统计和个性化服务
  • Accept:指定客户端可接受的媒体类型,服务器可以根据此头部返回合适的内容
  • Authorization:用于身份验证,包含凭证信息。如Basic或者Bearer token。
  1. 请求体
  • application/x-www-form-urlencoded: 键值对形式的表单数据,通常用在简单表单提交
  • mutipart/form-data:处理复杂表单,包括文件上传。
  • 自定义数据格式:如xml、json,甚至是二进制数据,不同的content-type可以标识数据格式。
    5.性能与安全
  • 缓存机制:通过cache-control和etag等头部,客户端和服务器可以有效管理缓存,减少不必要的请求。
  • 压缩:content-encoding头部可以指定压缩方式,如gzip,以减少数据传输量。
  • 安全性:Authorization和cookie等头部涉及身份验证和会话管理,应注意保护敏感信息。

3. 除了四次挥手,还有什么方法可以断开连接

  1. RST标志:使用TCP RST标志可以强制立即终止连接,发送方可以直接发送带有RST标志的TCP报文,通知对方理解断开连接。
  2. 超时:如果连接一段时间内没有任何数据包传输,连接双方可以依据设定的超时时间自动断开连接。

RST应用场景:

  • 异常关闭:当遇到程序异常或者攻击时,RST可用于立即终止连接,不经过正常的四次挥手。例如,在入侵检测系统中,RST可用于主动切断可疑连接。
  • 防火墙:有些防火墙或者安全设备会通过发送RST来强制终止不允许的连接。

超时机制

  • TCP keepalive:tcp可以设置keepalive参数,通过定期发送探测报文检查连接是否活跃,如果对方没有响应多次探测,连接自动断开。
    应用层超时:许多应用层协议(如HTTP、FTP)实现了自定义的超时机制,能够在长时间无响应后关闭连接。

4. HTTP1.0和2.0的区别

  1. HTTP/1.0版本主要增加以下几点
  • 增加了Head、Post等新方法
  • 增加了响应状态码
  • 引入了头部,即请求头和响应头
  • 在请求中加入了HTTP版本号
  • 引入了Content-Type,使得传输的数据不再限于文本。
  1. HTTP/1.1 版本主要增加以下几点
  • 新增了连接管理即keepalive,允许长连接。
  • 支持pipeline,无需等待前面的请求响应,即可发送第二次请求。
  • 允许响应数据分块,即响应的时候不标明content-length,客户端就无法断开连接,直到收到服务端的EOF,利于传输大文件。
  • 新增缓存的控制和管理
  • 加入了host头,用在一台机子部署多个主机,然后多个域名解析又是同一个IP,此时加入了Host头就可以判断到底是要访问哪个主机。例如,假设我们有两个网站:www.example.com和www.anotherexample.com,它们都解析到了同一个IP地址(比如192.0.2.1)。当浏览器向这个IP地址发送请求时,它会在HTTP请求的Host头部中包含请求的域名(如Host: www.example.com或Host: www.anotherexample.com)。服务器接收到请求后,会检查Host头部的值,并根据这个值来决定使用哪个网站或应用的配置来处理请求
  1. HTTP/2 版本主要增加以下几点
  • 二进制协议,不再是纯文本
  • 支持一个TCP连接发起多请求,移除了pipeline。
  • 利用HPACK压缩头部,减少数据传输量
  • 允许服务端主动推送数据

5. 什么是TCP连接

TCP面向连接的并不是真的双方之间连起来,而是双方都维护了一个状态,通过每一次通信来维护状态的变更,使得双方好像有一条线关联对方。

TCP中Socket、序列号和窗口大小

  1. socket:在TCP/IP协议中,Socket是通信的端点,由IP地址和端口号组成,如192.168.1.1:8080。在编程中,socket是用于网络通信的接口,通过它,应用程序可以发送和接收数据。
  2. 序列号:TCP序列号在传输过程中非常关键,因为他保证了数据传输的有序性和完整性。在三次握手中,双方交换初始序列号,并在此基础上为后续的每个数据端分配序列号。
  3. 窗口大小:TCP窗口大小指的是在特定时刻,接收方能够接受的最大数据。这个大小由接收方通知发送方,表明接收方的缓冲区能处理多少数据。他直接影响TCP的流量控制和拥塞控制机制,通过调整窗口大小,TCP可以避免发送过多数据导致接收方的缓冲区溢出。

6. HTTP和HTTPS的区别

  1. 数据传输安全性
  • HTTP:数据以明文传输,容易被窃听
  • HTTPS:通过SSL/TLS协议对数据进行加密传输,提供数据机密性和完整性保障。
  1. 端口号
  • HTTP:默认使用80端口
  • HTTPS:默认使用443端口
  1. 性能
  • HTTP:无加密过程,连接建立速度快
  • HTTPS:基于HTTP加上了SSL或者TLS协议来实现的加密传输。加解密过程增加了计算开销,握手时间较长。
  1. SEO影响
  • HTTP:搜索引擎一般会降低未加密站点的排名
  • HTTPS:搜索引擎更倾向于优先展示HTTPS网站。

7. TCP是用来解决什么问题

TCP通过提供 可靠传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠的IP网络上的传输问题:

  • 可靠性传输:TCP确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达,通过确认(ACK)、重传机制、序列号,TCP能够保证数据在不可靠的IP网络上可靠传输。
  • 流量控制:TCP通过滑动窗口机制调节发送方的数据传输速率,防止接收方因为处理能力有限而被数据流淹没。
  • 拥塞控制:TCP通过拥塞避免(慢启动、拥塞避免、快速重传和快速恢复)来防止网络过载,确保网络资源的公平使用和稳定性。
  • 连接管理:TCP是面向连接的协议,采用三次握手、四次挥手机制来管理会话,确保通信的可靠性和状态的同步。
  1. 数据包重排序和重传机制
  • TCP的序列号机制确保数据包按照正确的顺序组装。接收方通过序列号识别数据包的顺序,如果检测到丢包或者乱序的包,会请求重传,保证数据完整性。
  1. 滑动窗口和流量控制
  • 滑动窗口用于动态调整可以发送的数据量。接收方通过发送窗口大小,指示发送方可以发送的最大数据量。这种机制不仅避免了接收方的溢出,还提高了数据传输速率。
  1. 拥塞控制算法
    TCP的拥塞控制算法是核心的网络稳定性保证,经典算法包括以下几个步骤:
  • 慢启动:逐步增加发送窗口,直到检测到网络的阻塞点
  • 拥塞避免:当达到网络容量后,逐渐增加窗口以避免拥塞
  • 快速重传和快速恢复:在监测到包丢失时,立即进行重传并调整窗口大小,快速恢复正常传输状态。
  1. TCP三次握手和四次挥手
  • 三次握手:建立连接时,双方通过三次信息交换(SYN、SYN-ACK、ACK)来确保双方都准备好进行数据传输,并协商参数。
  • 四次挥手:断开连接时,通过四次信息交换来确保数据传输完成且资源可以安全释放。

8. TCP和UDP有什么区别

TCP提供了可靠、面向连接的传输,适用于需要数据完整性和顺序的场景;UDP则提供了轻量、面向报文的传输,适用于实时性要求高的场景。
主要从以下五个方面看待

  1. 连接性
  • TCP:面向连接的协议,通信前需要建立连接,通信结束后需要断开连接。
  • UDP:无连接的协议,不需要建立连接,直接发送数据包。
  1. 可靠性
  • TCP: 可靠传输协议,通过确认机制、重传机制、序列号、流量控制、拥塞控制确保数据不丢失、不重复、按顺序到达。
  • UDP:不可靠传输协议,不提供确认和重传机制,数据包可能丢失、重复或者乱序
  1. 数据传输方式
  • TCP:面向字节流的协议,数据作为一个连续的流传输,可以按需分片和重组
  • UDP:面向报文的协议,数据作为独立的报文传输,保留了应用层的消息边界。
  1. 性能
  • TCP:由于需要连接建立,确认和重传,传输速度较慢
  • UDP:传输速度快
  1. 应用场景
  • TCP:适用于需要可靠传输的应用。
  • UDP:适用于对速度要求高但是可靠性要求不高的应用。

9. 为什么要TCP,IP层实现控制不行吗

主要是为了分层架构设计的灵活性和可扩展性。

IP层负责数据包的路由和传输,而TCP提供传输层的可靠性服务,这种分离使得网络协议更加灵活和可扩展。

基于IP层,如果需要可靠性服务,那么上层可以使用TCP协议。如果不需要可靠性服务,对实时性要求较高,且允许一定程度的数据丢失,可以使用UDP。

所以,这样的设计可以在IP层之上构建其他传输协议,为不同应用提供更合适的传输服务,而无需修改IP 层的实现。

并且,一条数据在网络上传输需要经过很多设备,而设备之间需要靠IP来寻址,假设IP层实现了控制,那么传输的效率会大打折扣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值