计算机网络通关学习(一)

简介

之前我通过王道的考研课进行了计算机网络的学习,但是在秋招准备过程中发现之前的笔记很多不足,学习的知识不够深入和巩固,所以再重新对《图解HTTP》&《图解TCP/IP》进行深度学习后,总结出了此篇博客,由于内容都是据我而定的,对于我来说以及牢牢记住的知识点就没有进行笔记记录,所以如需深入学习还需要自己独立阅读相关书籍。书籍内容胜过一切八股文和笔记,由浅入深有体系的学习,胜于一切死记硬背。同时在学习协议或者一些专有名词时,和英文原文一起记忆,对我们的学习更有帮助。

HTTP

以下内容是对HTTP的一些学习笔记:

首先我们需要了解到的是HTTP是在应用层使用的一种传输协议,和FTP,DNS应用的位置是一样的,关于计算机网络的分层结构我们在后续TCP/IP协议处在进行解释,这里简单了解即可。

URI和URL

URI:统一资源标志符(Uniform Resource Identifier)

URL:统一资源定位符(Uniform Resource Locater)

即:URI使用字符串标识某一互联网资源,二URL表示资源的地点(互联网上的位置)所以我们说URL是URI的子集。

HTTP定义

  • HTTP协议用于客户端与服务端之间的通信。
  • 通过请求和响应的交换达成通信。
  • HTTP是不保存状态的协议(即:HTTP是无状态协议)

思考:这里对于1,2点,其实没有什么过多的解释了。但是对于第三点,我们需要自己的独立思考参与进来,为什么HTTP是无状态协议呢?HTTP被用于传输,那么我们需要的就是在传递消息的同时尽量减少过程损耗,如果携带状态,那么一定会增加报文长度,所以我们再来参考书籍上的定义就很好理解了:目的是为了更快的处理大量事务,确保协议的可伸缩性。

告知服务器意图的HTTP方法

  • GET:用来请求已经被URI识别的资源,指定的资源服务器解析后返回响应内容。
  • POST:用来传输实体的主体。
  • PUT:传输文件。
  • HEAD:获得报文首部,用于确认URI的有效性及资源更新的日期时间等。
  • DELETE:删除文件,与PUT相反,按照请求的URI删除指定的资源。
  • OPTIONS:询问支持的方法,用来查询针对请求URI指定资源支持的方法。
  • TRACE:追踪路径,让服务器端将之前的请求通过请求通信返回给客户端。
  • CONNECT:要求在于代理服务器建立通信时建立隧道,实现用隧道协议进行TCO通信。(主要用于SSL/TLS协议把通信内容加密后经网络隧道传输。)

注意:有时候面试官会问GET和POST的区别,我们可以由浅入深的进行解答:

  • GET的参数附加在URL中,传递数据可见,并作为URL的一部分发送。
  • POST请求参数放置在请求主体(body)中,不通过URL,而是作为请求的一部分发送到服务器。
  • GET由于数据存储在URL中,所以长度受到限制,通常不超过2048字符。
  • POST理论上不受数据大小限制,因为其在请求体中发送。
  • 多次执行同一个GET请求应该得到同样的结果,并且不会改变服务器的状态。
  • POST请求则是对服务器内容进行修改,多次执行一个POST请求可能会导致不同的结果,甚至改变服务器状态。

但是本质上的区别:

GET产生一个TCP数据包,而POST产生两个TCP数据包。GET请求浏览器会将header和data一起发送给服务器,而POST会先发送header,服务器响应100后,客户端发送data。

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。(客户端:请求报文。服务端:响应报文)

一般有四种首部:通用首部,请求首部,响应首部,实体首部

对于报文主体我们可以采用编码来提升效率,但是编码过程需要客户端或者服务端计算机完成,会消耗更多的cpu资源。

返回状态码

1xx Informational 接收的请求正在处理

2xx Success 请求正常处理完毕

  • 200 ok 表示从客户端发来的请求在服务器端被正常处理了
  • 204 No Content 表示服务器接收的请求已经成功处理但在返回报文中不含实体部分
  • 206 Partial Content 表示客户端进行了范围请求,而服务器成功只想了这部分的请求

3xx Redirection 需要进行的附加操作以完成请求

  • 301 Moved Dermanenty 永久重定向,表示请求的资源已经被分配了新的URI,以后使用资源现在所指的URI
  • 302 Found 临时重定向 ,该状态码表示请求的资源已经被分配了新的RI,(本次)使用资源现在所指的URI
  • 303 See Other 表示由于请求对应资源存在着一个URI,应使用GET方法定向获取请求资源
  • 304 Not Modified 表示客户端发送附带条件的请求时,服务器允许请求访问资源,但因为发生请求未满足条件情况。

4xx Client Error 服务器无法处理请求

  • 400 Bad Request 表示请求请求报文中存在语法错误
  • 401 Unauthorized 表示发送的请求需要有通过 HTTP BASIC DIGEST 的认证信息
  • 403 Forbiden 表示对请求资源的访问被服务器拒绝了
  • 404 Not Found 表明服务器上无法找到请求的资源

5xx Server Error 服务器处理请求出错

  • 500 Internal Server Error 表明服务器端在执行请求时发生了错误
  • 503 Service Unavailable 表明服务器暂时处于超负载或者正在停机维护,现在无法处理请求

HTTP缺点 --> HTTPS

  1. 通信使用明文(不加密),内容可能会被窃听。
  2. 不验证通信方身份,因此可能遭遇伪装。
  3. 无法验证报文的完整性,所以报文内容可能被篡改。

因此 HTTP+加密+认证+完整性保护 = HTTPS

HTTP并非是一种新的协议,知识HTTP通信接口部分使用SLL(Secure Socket Layer) 和 TLS(Transprot Layer Security) 协议代替而已。

HTTPS混合加密机制

如若想要了解HTTPS如何进行加密,我们就需要了解什么是对称加密和非对称加密。

对称加密

对称加密,或者称之为共享密钥加密。即加密和解密使用同一把钥匙,发送方将信息使用密钥加密后发送到公网中,接收方获取后使用同样的密钥进行解密。

其问题显而易见,就是如何将密钥安全传给对方。但是其优点也很明显,相较于非对称加密而言,他的效率会高出很多。

非对称加密

非对称加密,或者称为公开密钥加密。即每个用户都有一个公钥一个私钥,公钥会放在公网中,发送方使用目标用户的公钥进行加密,然后发送信息,接收方获取到加密信息后使用私钥进行解密。

HTTPS采用的是两者结合的方法:

  • 首先先使用非对称加密,在客户端和服务端间传递对称加密的公钥
  • 然后使用对称加密进行信息传递

但是在非对称加密获取公钥的过程,公钥可能是攻击者伪造的假公钥。于是我们引出了第三方机构的概念。当一个用户注册了私钥和公钥,需要将其公钥交给可信第三方进行证明。然后当另一用户发送消息给当前用户时,另一用户需要将获取的私钥的认证通过非对称加密与第三方机构进行校验,如果为真就会继续使用。

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

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

相关文章

08_Python数据类型_字典

Python的基础数据类型 数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合 字典 字典(Dictionary)是一种可变容器模型,它可以存储任意类型对象,其中每个对象都存储为一个键值对。…

存储数据的树形结构

目录 1、二叉查找树 2、平衡二叉树AVL Tree 3 、平衡多叉树B-Tree 4、BTree树 5 、红黑树 红黑树的应用 6.平衡树的旋转 mysql 索引数据结构: Btree 索引是B树在数据库中的一种实现,最为常见的。B树 中的B代表平衡,而不是二叉 1、二…

带你如何使用CICD持续集成与持续交付

目录 一、CICD是什么 1.1 持续集成(Continuous Integration) 1.2 持续部署(Continuous Deployment) 1.3 持续交付(Continuous Delivery) 二、git工具使用 2.1 git简介 2.2 git的工作流程 2.3 部署g…

如何用 Scrapy 爬取网站数据并在 Easysearch 中进行存储检索分析

做过数据分析和爬虫程序的小伙伴想必对 Scrapy 这个爬虫框架已经很熟悉了。今天给大家介绍下,如何基于 Scrapy 快速编写一个爬虫程序并利用 Easysearch 储存、检索、分析爬取的数据。我们以极限科技的官网 Blog 为数据源,做下实操演示。 安装 scrapy 使…

3. Python计算水仙花数

Python计算水仙花数 一、什么是水仙花数? 百度答案 二、怎样使用Python计算水仙花数? 这里需要for循环,if判断,需要range()函数,需要知道怎么求个位数,十位数,百位数… 1. For循环 语句结…

CTFHub技能树-SQL注入-整数型注入

一、手动注入 思路:注入点->库->表->列->数据 首先使用order by探测有几列 http://challenge-215beae2f0b99b12.sandbox.ctfhub.com:10800/?id1 order by 2 我们发现order by 2 的时候有回显,到了order by 3 的时候就没有回显了&#xf…

k8s的环境配置

一、前期系统环境准备 准备3台主机:硬盘50G cpu2个 内存2G 1、3台主机同时配置 1)关闭防火墙与selinux、NetworkManager [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/…

CSS---序号使用css设置,counter-reset、counter-increment、content配合实现备注文案的序号展示

直接上代码&#xff0c;全代码copy即可使用! <template><div class"reminder"><span class"Bold_12_body" style"line-height: 8vw">温馨提示&#xff1a;</span><br /><div class"rule-container"…

【Hot100】LeetCode—84. 柱状图中最大的矩形

目录 1- 思路题目识别单调栈 2- 实现⭐84. 柱状图中最大的矩形——题解思路 3- ACM 实现 原题链接&#xff1a;84. 柱状图中最大的矩形 1- 思路 题目识别 识别1 &#xff1a;给定一个数组 heights &#xff0c;求解柱状图的最大面积 单调栈 使用 Stack 来实现&#xff0c;遍…

go语言中的数组指针和指针数组的区别详解

1.介绍 大家知道C语言之所以强大&#xff0c;就是因为c语言支持指针&#xff0c;而且权限特别大&#xff0c;c语言可以对计算机中任何内存的指针进行操作&#xff0c;这样自然而然也会带来一些不安全的因素&#xff0c;所以在golang中&#xff0c;「取消了对指针的一些偏移&…

【C语言】分支和循环专题应用

分支和循环专题应用 1、随机数生成1.1rand1.2 srand函数介绍1.3 time函数介绍1.4 设置随机数的范围 2、猜数字游戏的代码及实现 通过了分支和循环的介绍学习之后&#xff0c;我们可以运用分支和循环语句写出一些有趣的代码了&#xff0c;让我们来一起探索吧&#xff01; 写一个…

node.js 中的进程和线程工作原理

本文所有的代码均基于 node.js 14 LTS 版本分析 概念 进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;操作系统的其他所有内容都是围绕着进程展开的 线程是操作系统能够进行运算调度的最小单位&#xff0c;其是进程中的一个执…

远程桌面内网穿透是什么?有什么作用?

远程桌面内网穿透指的是通过特定技术手段&#xff0c;将处于内网中的电脑或服务器&#xff0c;通过外部网络&#xff08;互联网&#xff09;进行访问。内网穿透的主要作用是解决在内网环境下&#xff0c;远程设备与外部互联网之间的连接问题&#xff0c;允许用户从外部访问内网…

.Net Gacutil工具(全局程序集缓存工具)使用教程

GAC介绍&#xff1a; GAC&#xff08;Global Assembly Cache&#xff09;全局程序集缓存&#xff0c;是用于存放.Net应用程序共享的程序集。 像平常我们在Visual Studio中引用系统程序集时&#xff0c;这些程序集便来自于GAC。 GAC默认位置为&#xff1a;%windir%\Microsoft…

【ArcGIS】栅格计算器原理及案例介绍

ArcGIS&#xff1a;栅格计算器原理及案例介绍 栅格计算器&#xff08;Raster Calculator&#xff09;原理介绍案例案例1&#xff1a;计算栅格数据平均值 参考 栅格计算器&#xff08;Raster Calculator&#xff09;原理介绍 描述&#xff1a;在类似计算器的界面中&#xff0c;…

基于对数变换的图像美白增强,Matlab实现

博主简介&#xff1a;matlab图像处理&#xff08;QQ:3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于对数变换的图像美白增强&#xff0c;用matlab实现。 一、案例背景和算法介绍 这次案例是美白算法&…

在实际LabVIEW开发中,哪些算法是常用的?

在LabVIEW的实际开发中&#xff0c;常用的算法主要集中在数据处理、控制系统、信号处理、图像处理等领域。以下是一些常用算法的介绍&#xff1a; 1. PID控制算法 PID&#xff08;比例-积分-微分&#xff09;控制是LabVIEW中常用的算法之一&#xff0c;广泛应用于工业自动化和…

剃(磨)前插齿刀设计计算开发第一步

之前接触滚刀比较多&#xff0c;渐开线齿轮滚刀的基准齿形的参数相对简单&#xff0c;都是由直线和圆弧组成的。插齿刀实质是一个开了前角后后角的“特殊齿轮”&#xff0c;在齿轮的齿形上增加“凸角”和“倒角”相对滚刀基准齿形就要复杂一些了&#xff1a; 要设计一款剃&…

深入分析计算机网络性能指标

速率带宽吞吐量时延时延带宽积往返时间RTT利用率丢包率图书推荐内容简介作者简介 速率 连接在计算机网络上的主机在数字信道上传送比特的速率&#xff0c;也称为比特率或数据率。 基本单位&#xff1a;bit/s&#xff08;b/s、bps&#xff09; 常用单位&#xff1a;kb/s&#x…

MacOS Catalina 从源码构建Qt6.2开发库之01: 编译Qt6.2源代码

安装xcode&#xff0c; cmake&#xff0c; ninja brew install node mac下安装OpenGL库并使之对各项目可见 在macOS上安装OpenGL通常涉及到安装一些依赖库&#xff0c;如MGL、GLUT或者是GLEW等&#xff0c;同时确保LLVM的OpenGL框架和相关工具链的兼容性。以下是一个基本的安装…