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

计算机网络常考协议(HTTPHTTPs、TCP/UDP、DNS)

文章目录

  • HTTP&HTTPs
    • (1)HTTP 1.0 和 HTTP 1.1 之间有哪些区别?
      • 补充:常见的HTTP请求方法
    • (2)HTTP 1.1 和 HTTP 2.0 之间有哪些区别?
      • 补充:队头阻塞
      • 补充:Websocket和HTTP的联系和区别
    • (3)HTTP 2.0 和HTTP3.0之间有哪些区别?
    • (4)HTTP和HTTPs的区别
      • 补充:HTTPs通信(握手过程)
  • TCP&UDP
    • (1)TCP和UDP的区别
      • 补充:UDP协议为什么不可靠?
    • (2)TCP三次握手
      • 补充:为什么不能两次握手?
    • (3)TCP四次挥手
  • DNS域名解析系统
    • (1)DNS作用
    • (2)各级域名
    • (3)域名服务器
    • (4)域名解析过程

HTTP&HTTPs

(1)HTTP 1.0 和 HTTP 1.1 之间有哪些区别?

  • 连接方面:http1.0 默认使用非持久连接,而 http1.1 默认使用持久连接。http1.1 通过使用持久连接来使多个 http 请求复用同一个 TCP 连接,以此来避免使用非持久连接时每次需要建立连接的时延。
  • 资源请求方面:在http1.0 中,存在浪费带宽的现象,如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,http1.1 则在请求头引入了 range头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • 缓存方面:在 http1.0 中主要使用 header 里的 If-Modified-Since、Expires 来做为缓存判断的标准,http1.1 则引入了更多的缓存控制策略,例如 Etag、If-Unmodified-Since、If-Match、If-None-Match等可供选择的缓存头。
  • http1.0 中认为每台服务器都绑定一个唯一的IP 地址,因此,请求消息中的 URL 并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。http1.1 中新增了 host 字段,用来指定服务器的域名。因此有了 host 字段,这样就可以将请求发往到同一台服务器上的不同网站。
  • http1.1 相对于 http1.0 还新增了很多请求方法,如 PUT、HEAD、OPTIONS 等。

    补充:常见的HTTP请求方法

      GET: 向服务器获取数据
      POST:将实体提交到指定的资源,通常会造成服务器资源的修改
      PUT:上传文件,更新数据
      DELETE:删除服务器上的对象
      HEAD:获取报文首部,与GET相比,不返回报文主体部分
      OPTIONS:询问支持的请求方法,用来跨域请求
      CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
      TRACE: 回显服务器收到的请求,主要⽤于测试或诊断
    
区别HTTP1.0HTTP1.1
连接非持久连接持久连接
资源请求服务器返回全部资源,不支持断点续传允许只请求资源的某个部分
缓存主要使用 header 里的 If-Modified-Since、Expires更多的缓存控制策略,如 Etag、If-Unmodified-Since、If-Match、If-None-Match等。
新增/host字段;请求方法(如PUT、HEAD、OPTIONS)

(2)HTTP 1.1 和 HTTP 2.0 之间有哪些区别?

  • 二进制协议:在 HTTP/1.1 版中,报文的头信息必须是文本(ASCII编码)数据体可以是文本,也可以是二进制。HTTP2.0则是一个彻底的二进制协议,头信息和数据体都是二进制,统称为"帧",可以分为头信息帧和数据帧。 帧的概念是它实现多路复用的基础。

  • 多路复用: HTTP2.0 实现了多路复用,HTTP2.0 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵
    塞"的问题。

    补充:队头阻塞

    队头阻塞是由 HTTP 基本的“请求 -
    应答”模型所导致的。HTTP规定报文必须是“一发一收”,这就形成了一个先进先出的队列。队列里的请求是没有优先级的,只有入队的先后顺序,排在最前面的请求会被最优先处理。如果队首的请求处理的太慢而耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本,造成了队头堵塞的现象。

  • 数据流: HTTP2.0引入了数据流的概念。因为 HTTP2.0 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。**HTTP2.0将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。**数据包发送时,都必须标记数据流 ID ,用来区分它属于哪个数据流。

  • 头信息压缩: HTTP2.0 实现了头信息压缩。因为 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP2.0 对这一点做了优化,引入了头信息压缩机制。一方面,头信息使用 gzip 或 compress 压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就能提高速度了。

  • 服务器推送:即HTTP2.0 允许服务器未经请求,主动向客户端发送资源。可以提前给客户端推送必要的资源(静态资源),这样就可以相对减少一些延迟时间。Note:HTTP2.0,服务器主动推送的是静态资源,和 WebSocket 以及使用 SSE 等方式向客户端发送即时数据的推送是不同的。

    补充:Websocket和HTTP的联系和区别

    - 联系:
    	- 都是基于TCP协议的
    	- 都是可靠传输协议
    	- 都是应用层协议
    - 区别:
    	- websocket是持久连接,http是短连接
    	- websocket对应的协议是 以ws、wss开头,http以http、https开头
    	- websocket是有状态的双向连接,http是无状态的单向连接
    	- websocket是可以跨域的
    
区别HTTP1.1HTTP2.0
二进制协议报文头信息是文本,数据体可以是文本、二进制报文头信息、数据体必须是二进制
新增:/多路复用、数据流、头信息压缩、服务器推送

(3)HTTP 2.0 和HTTP3.0之间有哪些区别?

在这里插入图片描述

  • 基于的传输层协议不同:HTTP2基于TCP,HTTP3基于UDP
  • HTTP3.0基于UDP协议实现了类似于HTTP2.0基于TCP的多路复用、流量控制、拥塞控制等传输可靠性等功能,这套功能被称为QUIC协议。
  • 建立连接时延不同:HTTP2.0基于TCP要通过三次握手建立连接,HTTP3.0基于UDP,可以使用0~1个RTT来快速握手,建立连接。

(4)HTTP和HTTPs的区别

在这里插入图片描述

  • HTTP以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了web浏览器和服务器之间的传输报文,就可以直接读懂其中的信息(即存在信息窃听、信息篡改、信息劫持的风险),因此HTTP不适合传输一些敏感信息。HTTPs利用具有安全性的SSL/TLS(具有身份验证、信息加密和完整性验证功能)来加密传输数据,安全性较好。
  • HTTP页面响应速度比HTTPs快。HTTPS协议需要CA证书,费用较高,而HTTP协议不需要。
  • HTTP使用的端口号是80,HTTPs使用的端口号是443。
区别HTTPHTTPs
传输内容明文SSL/TLS加密(非对称加密)
响应速度
端口号80443

补充:HTTPs通信(握手过程)

Https连接过程

TCP&UDP

(1)TCP和UDP的区别

区别TCPUDP
是否连接面向连接面向无连接
连接对象个数只能一对一通信支持一对一、一对多、多对一、多对多通信
是否可靠可靠传输(数据顺序和正确性,使用流量控制和拥塞控制不可靠传输(不保证数据顺序和正确性),不使用流量控制和拥塞控制
传输方式面向字节流面向报文
首部开销首部最小20字节,最大60字节首部开销小,仅8字节
使用场景实时应用,视频会议、直播文件传输等要求可靠传输的应用

补充:UDP协议为什么不可靠?

1. 不保证消息交付:不确认,不重传,无超时
2. 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
3. 不跟踪连接状态:不必建立连接或重启状态机
4. 不进行拥塞控制:不内置客户端或网络反馈机制

(2)TCP三次握手

三次握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

  • 客户端发起请求,SYN=1,seq=x
  • 服务器响应请求,并发出新请求,SYN=1,ACK=1,seq=y,ack=x+1
  • 客户端相应请求,并发送数据,SYN=1,ACK=1, seq=x+1,ack=y+1

具体三次握手过程如下:

  • 第一次握手: 客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序列号。请求发送后,客户端便进入 SYN-SENT 状态。
  • 第二次握手: 服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序列号,发送完成后便进入 SYN-RECEIVED 状态。
  • 第三次握手: 当客户端收到连接同意的应答后,还要向服务端发送一个确认报文客户端发完这个报文段后便进入ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

TCP三次握手

补充:为什么不能两次握手?

三次握手主要是防止历史连接,两次握手无法判断当前连接是否是历史连接且客服端不响应服务器端发来的确认,浪费资源
如果是用两次握手,则会出现下面这种情况:

  1. 客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求,后来收到了确认,建立了连接,数据传输完毕后,就释放了连接。
  2. 客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接。即服务器无法判断当前连接是否是历史连接。
  3. 此时服务端发出确认,就建立新的连接了,但客服端认为自己没有发送连接请求,因此忽略服务端发来的确认,也不发送数据,则服务端一直在等待客户端发送数据,浪费资源。

(3)TCP四次挥手

  • 客户端发起结束请求,FIN= 1,seq=u
  • 服务器端响应客户端的请求,并发出自己的数据,seq=v,ACK=1,ack=u+1
  • 服务器端数据传输完毕,向客户端发起结束请求,FIN=1,seq=w,ACK=1,ack=u+1
  • 客户端响应服务器端的请求,ACK=1,seq=u+1,ack=w+1

具体四次挥手过程如下:

  • 第一次挥手:若客户端认为数据发送完成,则它需要向服务端发送连接释放请求
  • 第二次挥手:服务端收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可发送数据给客户端。
  • 第三次挥手:服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进入 LAST-ACK 状态
  • 第四次挥手:客户端收到释放请求后,向服务端发送确认应答,此时客户端进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,客户端就进入 CLOSED状态。当服务端收到确认应答后,也便进入 CLOSED 状态。
    TCP四次挥手

DNS域名解析系统

(1)DNS作用

域名解析为IP地址,客户端向DNS服务器发送域名查询请求,DNS服务器告知客户端Web服务器的 IP 地址。

(2)各级域名

- 根:.
- 顶级域名:
	- 国家顶级域名 cn,us,uk
	- 通用顶级域名 com,net,org,gov
	- 基础结构域名/反向域名 arpa
  • 二级域名:
    • 类别域名 ac,com,edu,gov,net,org
    • 行政区域名 用于我国各省、自治区、直辖市 bj,js
    • 自己注册的域名(全球唯一)
  • 三级域名:
    • pku.mail
  • 四级域名…

(3)域名服务器

  • 根域名服务器:(管理该根服务器注册的所有顶级域名):
  • 顶级域名服务器(管理该顶级域名服务器注册的所有二级域名):
  • 权限域名服务器(负责一个区的域名服务器):
  • 本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器。

(4)域名解析过程

  • 递归查询(交给别人查询)
  • 浏览器首先会在浏览器的缓存中查找对应的IP地址,如果查找到直接返回,若找不到则 浏览器将请求发送给本地域名服务器本地域名服务器将请求发送给根域名服务器根域名服务器将请求发送给顶级域名服务器顶级域名服务器将请求发送给权限域名服务器,在权限域名服务器缓存中查询, 然后将结果原路返回给请求查询的浏览器。
    在这里插入图片描述
    递归与迭代相结合(有来有回)(第一步是递归查询,递给本地域名服务器去查询)
  • 浏览器首先会在浏览器的缓存中查找对应的IP地址,如果查找到直接返回,若找不到继续下一步
  • 浏览器将请求发送给本地域名服务器,在本地域名服务器缓存中查询,如果查找到,就直接将查找结果返回,若找不到继续下一步
  • 本地域名服务器根域名服务器发送请求,根域名服务器会返回一个所查询域的顶级域名服务器地址
  • 本地域名服务器顶级域名服务器发送请求,顶级服务器查询自己的缓存,如果有记录,就返回查询结果,如果没有就返回下一级权限域名服务器的地址
  • 本地域名服务器权限域名服务器发送请求,权限服务器查询自己的缓存去返回对应的结果给本地域名服务器
  • 本地域名服务器返回结果保存在缓存中,便于下次使用
  • 本地域名服务器将返回结果返回给浏览器

相关文章:

  • 服务器调制、调试和测试
  • 神经网络深度学习(三)优化器
  • Altium Dsigner 20 工艺参数设置修改
  • 2022“杭电杯” 中国大学生算法设计超级联赛(10)1 4题解
  • ssh免密登陆
  • 神经网络深度学习(二)激活函数
  • Java_Servlet处理请求流程
  • cadence SPB17.4 - allegro - modify shape
  • AJAX详细教程
  • 关于 在国产麒麟系统上使用QProcess配合管道命令执行shell命令获取预期结果输出失败 的解决方法
  • docker进阶——docker网络简解
  • 2022/09/01 day01:Git概述
  • 2022/09/02 day02:连接远程仓库,推送、克隆
  • 第18章linux系统-备份与恢复
  • 2022/09/03 day03:搭建私有git服务器与IDEA中使用Git
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Apache Pulsar 2.1 重磅发布
  • Java 最常见的 200+ 面试题:面试必备
  • JavaWeb(学习笔记二)
  • python3 使用 asyncio 代替线程
  • React中的“虫洞”——Context
  • vue 个人积累(使用工具,组件)
  • vue-router 实现分析
  • vue总结
  • 从零开始学习部署
  • 翻译:Hystrix - How To Use
  • 回顾 Swift 多平台移植进度 #2
  • 警报:线上事故之CountDownLatch的威力
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (备忘)Java Map 遍历
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十一)c52学习之旅-动态数码管
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)创业的注意事项
  • (转)大型网站的系统架构
  • (转)可以带来幸福的一本书
  • ***测试-HTTP方法
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 5种线程安全集合
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 表达式计算:Expression Evaluator
  • .NET 中 GetProcess 相关方法的性能
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET多线程执行函数
  • .stream().map与.stream().flatMap的使用
  • ??javascript里的变量问题
  • [20171113]修改表结构删除列相关问题4.txt