当前位置: 首页 > 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 使用场景与案例…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...