当前位置: 首页 > news >正文

八股文之计算机网络

TCP/IP 网络模型有哪几层

该模型用来解决不同设备间的进程通信,就需要网络通信,该模型就应运而生。首先是应用层,我们所接触的App都是在这一层实现的,当不同的设备需要通信时,就需要把数据发给传输层,传输层支持两个传输协议,TCP和UDP,TCP应用广泛因为它具有可靠性,顺序性,能进行流量控制,拥塞控制,适用于长连接,适用于事务性应用,它可以确保数据被不丢失和不被篡改。UDP也有自身的优势,UDP没有TCP的连接建立过程和拥塞控制机制,在传输的过程中延迟较低,在简单的应用场景下更加合适,因为它的头部较小,没有复杂的控制机制,UDP支持广播和多播,适用于实时广播、流媒体等,UDP没有连接的概念,适用于一些短期通信的场景。接下来就是网络层了,传输层就作为应用数据传输的媒介,具体的传输路线由网络层管理,网络层采用的是IP协议,会将传输层的报文作为数据部分,再加上IP头部组装成IP报文,如果IP报文大小超过了MTU(以太网中一般就是1500字节)就会再次进行分片,再这一层需要寻找匹配的网络号和主机号(IP按位与子网掩码,IP按位与子网掩码的取反),IP协议还需要进行路由,当数据包到达一个网络节点,就需要通过路由算法决定下一步怎么走。最后数据到了网络接口层,在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上,以太网在判断网络包目的地时和 IP 的方式不同,必须采用相匹配的方式才能在以太网中将包发往目的地,而 MAC 头部就是干这个用的,所以,在以太网进行通讯要用到 MAC 地址。网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

在浏览器输入一个网址到网页显示,这期间发生了什么

  1. 域名解析(DNS解析):首先,浏览器会将输入的网址中的域名部分发送到DNS(域名系统)服务器,以获取与该域名关联的IP地址。DNS服务器将域名解析为对应的IP地址,以便后续连接到正确的服务器。

  2. 建立TCP连接:浏览器使用获取到的IP地址,通过TCP(传输控制协议)建立与服务器的连接。这涉及一个三次握手的过程,其中浏览器和服务器之间进行通信以确保连接的建立。

  3. 发送HTTP请求:一旦TCP连接建立,浏览器将HTTP请求发送到服务器,请求特定的网页内容。HTTP请求中包含请求的方法(GET、POST等)、请求的资源路径、协议版本等信息。

  4. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求的内容和路径来处理请求,然后准备要返回的HTTP响应。

  5. 服务器发送HTTP响应:服务器将请求处理后的网页内容封装成HTTP响应,并发送回浏览器。HTTP响应中包含响应状态码、响应头部和响应体等信息。

  6. 接收响应:浏览器接收到服务器发送的HTTP响应后,会解析响应内容,其中包括状态码、响应头部和响应体等。

  7. 渲染页面:浏览器根据接收到的响应内容,开始渲染页面。它会解析HTML、CSS和JavaScript等内容,并在页面上显示出来。浏览器会按照文档对象模型(DOM)和渲染树的方式来构建页面的可视化表示。

  8. 加载资源:在渲染页面的过程中,浏览器还会下载页面所需的其他资源,如图片、样式表、JavaScript文件等。这些资源的加载是并行进行的,以提高页面加载速度。

  9. 执行JavaScript:如果页面中包含JavaScript代码,浏览器会执行这些代码,可能会改变页面的内容、交互和样式。

  10. 显示页面:最终,浏览器将渲染好的页面显示在用户的屏幕上,用户可以与页面进行交互,点击链接、填写表单等。

    总的来说,从键入网址到网页显示期间,涉及域名解析、建立TCP连接、发送和接收HTTP请求与响应、解析和渲染页面等多个步骤,这些步骤协同工作,使用户能够快速访问并浏览网页内容。

TCP为什么要三次握手四次挥手,一次握手和一次挥手不可以吗

TCP协议的三次握手和四次挥手是为了确保可靠的连接建立和断开,以应对不同网络环境下可能出现的问题和情况。一次握手和一次挥手是不足以满足这些需求的,下面解释一下为什么需要三次握手和四次挥手:

三次握手(建立连接):

  1. 第一次握手:客户端发送连接请求报文(SYN)给服务器,请求建立连接。

  2. 第二次握手:服务器收到客户端的连接请求后,回复一个确认报文(SYN + ACK),表示收到请求,并同意建立连接。

  3. 第三次握手:客户端收到服务器的确认后,再次回复一个确认报文(ACK),表示连接已建立。

    三次握手的主要目的是确保双方都同意建立连接,以及确认双方的通信能力正常。如果仅有一次握手,不能完全保证双方的通信能力,因此可能会导致不稳定的连接。

四次挥手(断开连接):

  1. 第一次挥手:客户端发送连接释放报文(FIN)给服务器,表示客户端没有数据要发送了,请求断开连接。

  2. 第二次挥手:服务器收到客户端的释放请求后,发送一个确认报文(ACK),表示已收到请求。

  3. 第三次挥手:服务器发送自己的连接释放报文(FIN)给客户端,表示服务器也没有数据要发送了,准备断开连接。

  4. 第四次挥手:客户端收到服务器的释放请求后,发送一个确认报文(ACK),表示已收到请求。

    四次挥手的过程是为了确保双方都完成数据的传输和处理,以及释放连接资源,避免在数据未完全传输或处理完毕时就断开连接,导致数据丢失或错误。

总的来说,三次握手和四次挥手的设计是为了保证连接的可靠性和数据的完整性,在不同网络环境下能够应对各种可能的问题,确保通信的稳定和可靠。

你说到数据安全,你可以说说对称加密和非对称加密吗?

  1. 对称加密:在对称加密中,同一个密钥被用于加密和解密数据。这意味着发送方和接收方都必须共享同一个密钥。常见的对称加密算法包括DES(Data Encryption Standard)、AES(Advanced Encryption Standard)等。对称加密的优点是加解密速度较快,但密钥的管理和分发相对复杂,容易受到安全威胁。

  2. 非对称加密:非对称加密使用一对密钥,分别是公钥和私钥。发送方使用接收方的公钥来加密数据,而接收方使用自己的私钥来解密数据。反之亦然。非对称加密算法的常见代表是RSA(Rivest-Shamir-Adleman)。非对称加密能够提供更好的安全性,因为私钥不需要与其他人共享,但相对来说加解密速度较慢。

https为什么安全,怎么实现的

HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密和身份验证来保护网络通信的协议,它在传输数据时使用了SSL(Secure Sockets Layer)或TLS(Transport Layer Security)加密协议,从而提供了更高的安全性。HTTPS的安全性体现在以下几个方面:

  1. 数据加密: 在HTTPS中,传输的数据会通过加密算法进行加密,使得未经授权的第三方无法解读和窃取数据内容。这防止了数据在传输过程中被拦截和篡改。

  2. 身份验证: HTTPS使用了数字证书来对服务器进行身份验证,确保你与服务器通信的是预期的合法服务器,而不是恶意的中间人。这样可以防止“中间人攻击”等安全威胁。

实现HTTPS安全的过程如下:

  1. 获取SSL/TLS证书: 网站管理员需要从权威的证书颁发机构(Certificate Authorities,CA)处获取SSL/TLS证书。证书中包含了网站信息、公钥等,证明了服务器的身份。
  2. 配置服务器: 服务器需要配置支持HTTPS协议,一般是在Web服务器(如Apache、Nginx)上进行配置。配置的过程包括指定证书、私钥、加密算法等信息。
  3. 建立安全连接: 当客户端(浏览器)向服务器发起连接请求时,服务器会返回证书。浏览器通过证书中的公钥加密一个随机生成的对称密钥,并将其发送给服务器。
  4. 握手过程: 服务器收到客户端发送的对称密钥后,使用自己的私钥进行解密,得到了对称密钥。接下来的通信会使用这个对称密钥来进行加解密。此外,服务器和客户端会交换一些用于后续通信的加密参数。
  5. 安全通信: 一旦握手成功,客户端和服务器之间的通信就会使用对称密钥进行加密,从而保障数据的隐私和完整性。

需要注意的是,虽然HTTPS提供了更高的安全性,但也并非绝对安全。不正确的配置、失效的证书、被劫持的域名等都可能影响HTTPS的安全性。因此,维护证书的有效性、正确配置服务器以及及时更新证书等都是保障HTTPS安全的重要步骤。

相关文章:

八股文之计算机网络

TCP/IP 网络模型有哪几层 该模型用来解决不同设备间的进程通信,就需要网络通信,该模型就应运而生。首先是应用层,我们所接触的App都是在这一层实现的,当不同的设备需要通信时,就需要把数据发给传输层,传输…...

kotlin 比较 let apply

let 和 apply 是 Kotlin 标准库中的两个非常有用的函数,它们用于在代码中实现更简洁和可读的操作。它们通常在函数式编程和链式调用中使用,以简化代码并提高可维护性。下面是关于这两个函数的详细解释: let let 函数是一个作用域函数&#…...

springboot跨域踩坑笔记

事情是这样的,我在进行前后端联调的时候,发送了跨域拦截 马上在spring项目中创建一个CorsConfig类 package com.example.demo.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.an…...

基于STM32+FreeRTOS的四轴机械臂

目录 代码: 注释写的较少,但本文出现的代码都有注释,所以请直接在本文里看注释 项目概述: 一 准备阶段(都是些废话) 二 裸机测试功能 1.摇杆控制 接线: CubeMX配置: 代码 2…...

【C语言】三子棋游戏——超细教学

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 🔥该篇将结合之前的知识来实现 三子棋游戏。 目录: 🌟思路框架:测试游戏 &#x1f31f…...

redux的介绍、安装、三大核心与执行流程

redux的介绍、安装、三大核心与执行流程 一、redux的基本介绍二、redux的安装三、redux核心概念3.1 action3.2 reducer3.3 store 四、Redux代码执行流程五、加减案例练习 一、redux的基本介绍 redux中文官网Redux 是 React 中最常用的状态管理工具(状态容器&#x…...

Redis 5环境搭建

一、环境搭建 如果是Centos8,yum 仓库中默认的 Redis版本就是5,直接yum install即可。如果是Centos7,yum 仓库中默认的 Redis版本是3系列,比较老~ 为了我们能在 Centos7中下载到 Redis5 首先要安装额外的软件源 sudo yum insta…...

stm32红绿灯源代码示例(附带Proteus电路图)

本代码不能直接用于红路灯,只是提供一个思路 #include "main.h" #include "gpio.h" void SystemClock_Config(void); void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOB_CLK_ENAB…...

Qt与电脑管家4

折线图&#xff1a; #ifndef LINE_CHART_H #define LINE_CHART_H#include <QWidget> #include <QPainter> #include "circle.h" class line_chart : public QWidget {Q_OBJECT public:explicit line_chart(QWidget *parent nullptr); protected:void pa…...

使用css美化gradio界面

基本方法 在默认的前端页面中使用检查工具确定要修改的部分的选择器名称&#xff0c;然后在block_css中对其修改&#xff0c;并在启动网页时传入参数&#xff1a;with gr.Blocks(cssblock_css, thememy_theme) as demo: 禁止修改下拉框文字 input.border-none.svelte-c0u3f0…...

Flink流批一体计算(13):PyFlink Tabel API之SQL DDL

1. TableEnvironment 创建 TableEnvironment from pyflink.table import Environmentsettings, TableEnvironment# create a streaming TableEnvironmentenv_settings Environmentsettings.in_streaming_mode()table_env TableEnvironment.create(env_settings)# or create…...

java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。 public class WordCounting { public static void main(String[] args) { try(FileReader fr new FileReader("a.txt")) { int counter 0; boolean state false; int currentChar; while((currentChar fr.read()) ! -1) { i…...

点云平面拟合和球面拟合

一、介绍 In this tutorial we learn how to use a RandomSampleConsensus with a plane model to obtain the cloud fitting to this model. 二、代码 #include <iostream> #include <thread> #include <pcl/point_types.h> #include <pcl/common/io.…...

部署问题集合(十九)linux设置Tomcat、Docker,以及使用脚本开机自启(亲测)

前言 因为不想每次启动虚拟机都要手动启动一遍这些东西&#xff0c;所以想要设置成开机自启的状态 设置Tomcat开机自启 创建service文件 vi /etc/systemd/system/tomcat.service添加如下内容&#xff0c;注意修改启动脚本和关闭脚本的地址 [Unit] DescriptionTomcat9068 A…...

视觉SLAM:一直在入门,如何能精通,CV领域的绝境长城,

目录 前言 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 1 什么是SLAM&#xff1f; 2 为什么用SLAM&#xff1f; 3 视觉SLAM怎么实现&#xff1f; 4 前端视觉里程计 5 后端优化 6 回环检测 7 地图构建 8 结语 前言 上周的组会上&…...

【报错】yarn --version Unrecognized option: --version Error...

文章目录 问题分析解决问题 在使用 npm install -g yarn 全局安装 yarn 后,查看yarn 的版本号,报错如下 PS D:\global-data-display> yarn --version Unrecognized option: --version Error: Could...

二叉搜索树的(查找、插入、删除)

一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1、若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2、若它的右子树不为空&#xff0c;则右子树上所有节点的值都…...

电力虚拟仿真 | 高压电气试验VR教学系统

在科技进步的推动下&#xff0c;我们的教育方式也在发生着翻天覆地的变化。其中&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的出现&#xff0c;为我们提供了一种全新的、富有沉浸感的学习和培训方式。特别是在电力行业领域&#xff0c;例如&#xff0c;电力系统的维护…...

innovus如何设置size only

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 给instance设置size only属性命令如下: dbset [dbGet top.inst.name aa/bb -p] .dontTouch sizeOk 给一个module设置size only需要foreach循环一下: foreach inst [dbGet top.…...

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...