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

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层实现了控制,那么传输的效率会大打折扣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytest - 多线程提速

import timedef test1_test1():time.sleep(1)assert 1 1, "11"def test1_test2():time.sleep(1)assert 1 1, "11" 上面2个函数,执行情况: 正常执行时,花费 2.08s2个进程执行时,花费 1.18s2个线程执行时&a…

k8s篇之数据挂载类型及区别

一、K8S集群数据挂载类型及区别 在 Kubernetes 中,数据挂载类型主要有以下几种,每种类型适用于不同的场景。以下是主要的挂载类型及其应用场景的详细说明: 1. emptyDir 描述:emptyDir 是一个空目录,其生命周期与 Pod 相同。 它在 Pod 创建时被创建,并在 Pod 删除时被清…

NLP:命名实体识别及案例(Bert微调)

1. 命名实体识别 1.1 序列标注 序列标注(Sequence Labeling)是NLP中最基础的任务之一,其应用十分广泛。它指的是对给定的序列(如文本中的单词或字符)中的每个元素进行标注,以识别出该元素在序列中的特定角色或属性。 1.2 命名实体识别 命名实体识别(Na…

【React】useEffect

1. 基本介绍 概念 语法 副作用函数依赖项数组(空数组时,只会在组件渲染完毕后执行一次副作用函数) 2. 使用 import { useEffect, useState } from reactfunction App() {const [value, setValue] useState(0)useEffect(() > {console…

如何使用ssm实现小区物业管理系统

TOC ssm733小区物业管理系统jsp 第一章 绪论 1.1 研究背景 在现在社会,对于信息处理方面,是有很高的要求的,因为信息的产生是无时无刻的,并且信息产生的数量是呈几何形式的增加,而增加的信息如何存储以及短时间分析…

Quill Editor 富文本编辑器的高度问题

问题现象 1. 编辑框只有一行高; 2. 编辑框高度足够,但显示不全,左侧有滚动条。向下拉滚动条,编辑框把工具栏向上顶出去,工具栏看不见了。 网上搜出来一大堆各种说法,照猫画虎,有时候对&#…

基于微信小程序的美食外卖管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

SPI驱动学习七(SPI_Slave_Mode驱动程序框架)

目录 一、SPI_Slave_Mode驱动程序框架1. Master和Slave模式差别1.1 主设备 (Master)1.2 从设备 (Slave)1.3 示例 2. SPI传输概述2.1 数据组织方式2.2 SPI控制器数据结构 3. SPI Slave Mode数据传输过程4. 如何编写程序4.1 设备树4.2 内核相关4.3 简单的示例代码4.3.1 master和s…

Anaconda虚拟环境默认路径在C盘怎么更改

笔者已经新建好了虚拟环境并且安装了对应库,输入conda env list查询发现虚拟环境竟然安装到了C盘(。•́︿•̀。),为避免下一次创建虚拟环境出错,笔者现在修改默认路径置D盘(软件安装盘) 参考两…

二分——二分查找

题目描述 输入n个不超过109的单调不减的(就是后面的数字不小于前面的数字)非负整数a1,a2,…,an,然后进行m次询问。对于每次询问,给出一个整数q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…

【YOLO目标检测车牌数据集】共10000张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:10000(2000张绿牌、8000张蓝牌) 标注数量(txt文件个数):10000 标注类别数:1 标注类别名称:licence 数据集下载:车牌数据…

小程序-生命周期与WXS脚本

生命周期 什么是生命周期 生命周期(Life Cycle)是指一个对象从创建 -> 运行 -> 销毁的整个阶段,强调的是一个时间段。 我们可以把每个小程序运行的过程,也概括为生命周期: 小程序的启动,表示生命…

ant design vue中带勾选表格报Tree missing follow keys: ‘undefined‘解决方法

1、这里一定要给columns和data-source设置key即可。 <div><a-table:row-selection"rowSelection":dataSource"tableList":columns"columns":scroll"{ x: 100% }":pagination"false":loading"loading"&g…

配置STM32F103的高级定时器TIM1用于PWM功能

配置STM32F103的高级定时器TIM1用于PWM功能 之前在使用stm32f103的PA9引脚复用为高级定时器TIM1_CH2&#xff0c;用它来输出PWM波时发现无法正常输出PWM波形。出现这种问题的情况一般是将PA9先初始化成了串口&#xff0c;然后又配置成PWM功能&#xff0c;这样会导致无法输出PW…

RestSharp简介

RestSharp是一个轻量级HTTP客户端库&#xff0c;主要功能是通过HTTP对远程资源进行同步异步调用&#xff0c;可将请求主体序列化为JSON或XML并反序列化相应。 请求主体的方式&#xff1a;JSON、XML和表单数据 参数类型&#xff1a;查询、URL段、标头、cookie、正文 官方的例…

C++ -- 异常

C中的异常是用于处理程序执行过程中出现的错误情况。通过异常处理&#xff0c;程序可以在遇到错误时优雅地处理这些问题&#xff0c;而不是直接崩溃。 C语言处理错误的方式 C语言传统的处理错误的方式主要有两种&#xff1a; 终止程序&#xff1a;使用如assert这样的宏来检查…

Chromium 如何禁用自动加载指定路径扩展 c++

之前文章提到过浏览器启动会从[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Google\Chrome\Extensions\ 注册表下自动搜索需要加载的扩展&#xff0c;那么如何禁用此功能呢&#xff1f; 直接看源码 chrome\browser\extensions\external_registry_loader_win.cc chrome\browser\…

制作 rootfs步骤

1. 准备工作 地平线开发板通过root访问权限&#xff0c; 在开发板中安装所有的依赖库 2. 在开发板创建 rootfs 通过地平线开发板创建一个跟文件系统(rootfs)的方法是通过 chroot 工具将文件系统打包 2.1 挂载必需的文件系统 确保挂载必要的虚拟文件系统&#xff0c;以便正…

隐藏SpringBoot自动生成的文件

第一种方法——删除 第二种方法——Settings——Editor——fail types