计算机网络 Part1

目录

计算机网络的一些术语:

计算机网络的重点:

整体结构以及HTTP部分一些问题:

TCP以及UDP相关的问题:

DNS以及网络安全相关的问题:

1. OSI七层模型的每一层分别是什么?对应的协议有哪些?

传输层协议和网络层协议有什么区别?  

HTTP协议为什么设计为无状态的?

HTTP / 1.1相对于HTTP / 1.0版本多了哪写新特性? 

HTTP 1.1和TCP协议有什么弊端?

HTTP / 2.0为什么不用UDP? 

HTTP有加密方式吗?

混合加密

HTTPS是怎么保证安全性的?

HTTPS 主要工作流程:

客户端怎么去校验证书的合法性?

TLS四次握手讲一讲?

什么是握手(Handshake)?

TLS四次握手过程:

HTTP和HTTPS有什么区别?

HTTPS的缺点:

HTTP的缓存机制?

HTTP的强缓存和弱缓存了解吗?

为什么IP协议需要分片? 

IP协议什么情况下需要分片?

IP协议是怎么进行分片的?

TCP协议和UDP协议

TCP三次握手和四次挥手(三握四挥)

前置知识

三次握手

TCP三次握手中,连接的序号一定要从0开始吗?

如果第一次握手服务端未收到SYN报文会发生什么情况?

如果第三次握手服务端未收到ACK报文会发生什么情况?

第二次握手传回了ACK,为什么还要传回SYN?

TCP三次握手中可以携带应用层数据吗?

TCP半连接队列和全连接队列(也叫并发链接数)

TCP三次握手建立的连接,如果服务端不进行accept接收新连接,最多可以三次握手完成多少个连接?

TCP服务端最多通过三次握手,建立多少个TCP连接?

什么是SYN Flood / SYN 洪泛攻击?(与SYN队列有关)

TCP需要三次握手,两次不行吗?

为什么要三次握手而不是两次握手?

ACK数据包,消耗TCP序号吗?

什么是序号?

在一个TCP连接当中,有两种数据包种类:

SYN报文什么情况下会被丢弃?

三次握手中为什么需要协商MSS(最大消息长度)?

1. 什么是MSS?

2. 为什么要协商MSS?

数据链路层MTU和MSS的强关系

什么是四次挥手?

CLOSE-WAIT状态有什么意义?

服务端出现大量的CLOSE_WAIT状态,什么原因?有什么危害?应该怎么办?

TIME_WAIT为什么是2倍的MSL?

注意:

为什么客户端需要等待TIME_WAIT超时时间?

TIME_WAIT状态过多会导致什么问题?

怎么解决TIME_WAIT状态过多?

四次挥手阶段可以发送应用层数据吗?

为什么挥手需要四次呢?

什么情况会出现三次挥手?

补充:什么是TCP延迟确认机制 - 延迟ACK?

TCP延迟确认机制的策略 - 延迟ACK:

为什么SYN/FIN不包含数据却要消耗一个序列号?

TCP协议的序号的值,最大是多少?超过了最大数值之后,序号的值是多少呢? 

什么是TCP的确认应答机制? 

什么是TCP的超时重传机制? 

TCP的超时重传时间是如何计算的?

什么是TCP的快(速)重传机制? 

快重传不是为了提高效率吗?那快重传自身存在效率问题吗?

快重传当中的SACK(选择性确认)方法? 

TCP如何提高传输效率?

TCP如何保证数据可靠且有序?

TCP的滑动窗口?

1. 什么是TCP的滑动窗口机制?- 理解TCP的缓冲区 

2. 什么是TCP的滑动窗口机制?- 理解滑动窗口中的窗口 

3. 什么是滑动窗口机制?- 理解滑动窗口机制

如果窗口中收到了靠后分组的确认,窗口可以向右滑动吗?

接收方的滑动窗口包含三大部分,如下:  

4. 什么是滑动窗口机制?- 理解窗口的变化

TCP的流量控制机制?

那等到什么时候是个头呢?

TCP的拥塞控制?

什么是拥塞窗⼝?和发送窗⼝有什么关系呢?

发送方还需要维护一个慢开始门限ssthresh的状态变量:

拥塞窗口 cwnd 变化的规则:

判断出现网络拥塞的依据是:

UDP协议

TCP和UDP的主要区别 

1. UDP协议将数据交给IP协议之后,IP协议需要分片传输吗?

2. TCP协议将数据交给IP协议之后,IP协议需要分片传输吗? 

数据链路层MTU和MSS是有一个强关系的:

小细节:

总结:网络层IP协议的分片传输机制是给传输层的UDP协议用的! 

TCP和UDP的应用场景?

TCP协议的特点? 

什么是TCP的粘包与拆包/分包? 

造成粘包和拆包现象的原因:

什么是子网掩码?

子网掩码的作用? 

1. TCP怎么解决数据包乱序问题?

2. POST请求的请求参数长度限制是多少?

3. URL是个啥?

​编辑4.  Https中的s代表什么?

 5. Https介于哪两层之间起作用?对于应用层透明吗?

6. 状态码中,301和302的区别?

7. UDP在传输层分片吗?UDP在哪里分片?

9. 在浏览器输入URL / 域名后发生了什么?(在浏览器输入www.baidu.com后执行的全部过程?)

10. 什么是限流?怎么做限流策略

11. 什么是认证和授权?如何设计一个权限认证框架?

12. DHCP?

13.  拔掉网线后,TCP连接还存在吗?

心跳机制 - 保活计时器

14. 分布式环境下Session怎么处理呢?

负载均衡:

15. 客户端无法使用Cookie怎么办?  

16. 说说 HTTP 常用的状态码及其含义?

17. 请简单说一下你了解的端口及对应的服务? 

18. 简单说一下DNS协议的作用? 

19. DNS整个执行的过程是怎么样的?

20. DNS是基于TCP还是UDP的? 

21. 域名和 IP 的关系?一个 IP 可以对应多个域名吗? 

22. 为什么既有IP地址,又有MAC 地址? 

MAC地址和IP地址都有什么作用?  

23. TCP和UDP可以绑定相同的端口吗?

24. 多个TCP服务进程可以绑定同一个端口号吗?

分情况:

25. 如何在Linux系统中查看TCP状态?

26. URI和URL的区别?

27. IPV4与IPV6的区别?

28.  XSS攻击介绍一下?

如何防御?

29. CSRF攻击是什么?CSRF跨站请求伪造攻击

防御思路:

防御策略(两种策略):

30. DDoS攻击?

那什么优势拒绝服务(Denial of Service)呢?

防御策略

31. ping原理? 

32. 交换机和路由器的区别?

33. 什么是跨域?如何解决?


计算机网络的一些术语:

  • 速率:传送比特的速率,也称为比特率或者数据率。在计算机网络中,表示单位时间内从网络中的某一点到另一点所能通过的"最高数据率"(单位是比特每秒,记作b/s)、
  • 带宽:网络的通信线路所能传送数据的能力。单位:Hz
  • 吞吐量:表示单位时间内通过某个网络/信道/接口的数据量。 
  • 网络按传输介质分类,可分为有线网络和无线网络。
  • 链路:是一个节点到相邻节点的一段物理线路。
  • 数据链路层传送的数据单元是帧。
  • 单工:只能有一个方向的通信而没有反方向的交互。
  • 半双工:通信的双方都可以发送信息,但不能双方同时发送或同时接收
  • 全双工:通信的双方可以同时发送和接收信息。

  • 网络应用是当前的主流,对于网络开发来说,需要考虑到不同协议所带来的问题。
  • 对于Java网络开发来讲,长期以来都是依靠中间件的技术进行的程序开发,所有的代码都保存在中间件上,而后通过中间件进行所谓的各类的性能调优以及网络服务的构建。
  • 网络应用之中最为重要的核心概念就是通信协议而协议常见的就是TCP/UDP这样的基础协议,在这之上可以扩展出其它的协议,例如:HTTP协议,网络协议确定了,就可以进行网络应用的开发,而应用的开发就可以通过编程语言来实现的。 
  • 不同的编程语言都有不同的"语法糖",对于技术来讲关键是看落地。
  • Java NIO技术的封装 - Netty开发框架
  • 网络应用基本上都会按照"C/S"模式(B/S也是C/S一种延续而已),客户端通过特定的IP地址和端口号与指定的服务器进行连接,随后与服务器在建立的网络通道上进行通讯。

此时需要思考到两项性能优化的方案:

  1. 优化方案一:网络连接上的有效管理(占着茅坑不拉屎)
  2. 优化方案二:减少通信数据的体积(搬东西太多了,跑不快)
  • "世界上计算机没有100%的优化方案,但是可以对"蠢材"写出的代码进行优化"。
  • NIO的核心本质就在于多路复用。

话题:Go现在很火,我要放弃Java转Go了?

  •  "这个话题我已经听了20年了..."
  • Go的生态很火,火的原因是在于其有大量的Go云组件,最著名的就是Docker、Kubernates、ETCD、CoreDNS、MinIO,但是使用Go构建的业务代码多吗?
  • Nginx基本上是每个公司都会使用的,使用C语言开发的,难道C不比Go厉害?为什么你不学C?所有的运行环境都有Linux操作系统,Linux使用C写的,你怎么不学C?

Linux下使用的是Epoll模型。 

  • IP地址有两个部分组成,分别是网络号和主机号。
  • 子网掩码是为了划分网络号和主机号的。

计算机网络的重点:

  1. 计算机网络的整体结构
  2. HTTP
  3. TCP
  4. DNS
  5. 网络安全 

整体结构以及HTTP部分一些问题:

  1. OSI七层模型的每一层分别是什么?对应的协议有哪些?
  2. TCP/IP模型的每一层分别是什么?为什么TCP/IP模型更常用?
  3. HTTP协议的特点?
  4. HTTP协议中常见的状态码有哪些?301和302有什么区别?
  5. GET和POST方法有什么区别?除了这两个之外还了解过什么请求?
  6. HTTP 1.1相对于1.0版本多了哪些新特性?
  7. Cookie,Session和Token分别是什么?
  8. Session在分布式场景下有什么缺点?如何解决? 
  9. 服务器接收到一个HTTP报文之后是如何解析的?
  10. HTTP和HTTPS有什么区别?
  11. 对称加密和非对称加密有什么区别?
  12. TLS连接过程?
  13. HTTPS发起请求的过程?
  14. HTTP的缓存机制?HTTP的强缓存和弱缓存了解吗?
  15. HTTPS怎么保证安全性的?
  16. HTTP和IP在哪层?有什么区别?TCP在哪层?ICMP是哪一层的协议?
  17. 长链接和短连接?
  18. 什么是对头阻塞?

TCP以及UDP相关的问题:

  1. TCP协议的特点?
  2. 三次握手和四次挥手的流程(重要)
  3. 为什么需要三次握手?两次不行吗?为什么?为什么需要四次挥手?三次不行吗?
  4. 三次握手的过程中可以携带数据吗?
  5. TCP三次握手中可以携带应用层数据吗?
  6. ACK数据包,消耗TCP的序号吗?
  7. 有了解过SYN攻击吗?具体是怎么样的?如何解决?
  8. TCP如何保证可靠传输的?
  9. UDP有什么特点?一般在哪些场景下会考虑使用UDP协议? 
  10. TCP的拥塞控制?TCP的滑动窗口、流量控制,拥塞控制和连接管理?

DNS以及网络安全相关的问题:

  1. 简单说一下DNS协议的作用?
  2. DNS整个执行的过程是怎么样的?DNS是基于TCP还是UDP的?
  3. 跨域是什么概念?
  4. 有没有了解过常见的网络攻击手段?
  5. XSS攻击是什么?CSRF攻击是什么?DDos攻击???
  6. 在浏览器输入网址到打开网站页面整个过程中发生了什么?
  • 为了可以通过MAC地址对不同设备进行数据的传输,就出现了交换机
  • TCP允许应用把字节流变成多份段,而不是整个字节数据完整的发送出去。

1. OSI七层模型的每一层分别是什么?对应的协议有哪些?
  • 应用层、表示层和会话层的数据统称为应用数据,或者应用负载,也可以叫做上层数据,同时也是教科书上说的报文。
处于最中间的 - 传输层

OSI七层模型:就是把整个计算机网络划分成了七层的结构,每一层都有自己负责的一个任务。OSI网络参考模型的出现是为了解决主机之间的网络通讯。

  1. 应用层:负责为应用程序提供交互服务,对应的是HTTP协议(超文本传输协议)可以理解为应用层定义了一些比较高级的API应用层是最接近用户的一层,请求的发送直接对应到用户上,用户可以直接在浏览器中直观的看到应用层的一些东西,比如我们的整个页面:其实都是一个HTTP请求发送返回的一个结果,只不过浏览器把它解析成了我们所看到的页面供我们去查看。还有FTP(文件传输协议)、DNS(域名解析系统/域名解析协议):将域名转换为对应的IP地址。
  2. 表示层:不同计算机内部的各自表达方式可能不太相同,表示层就来负责这样的一个转换,也就是编码和解码。数据往往还需要进行加密,比如:HTTPS(SSL/TLS)就会对我们的数据进行加密和解密。说白了主要做数据格式的一个转换,比如通常情况下我们希望数据的格式是文本格式或者说字符,因为这样的话我们用户可以比较直观的去查看,但是有些情况我们可能希望传输或者接收数据的格式是二进制类型的,因为计算机解析二进制肯定要比解析文本更快一点,对于这种情况,我们就需要在表示层去做一些处理。另外我们可能还需要进行文件瘦身,压缩也是表示层负责的。
  3. 会话层:用来负责建立和管理会话(客户端跟服务端之间的一次连接)。会话层没有特定的协议。比如你登录了一个网站,网站服务可以保持你的登录状态,不用每次都输入账号和密码。另外会话层还负责同步服务:比如你上次看到电影高潮的时候突然停电了,再次登录账号的时候,就可以自动同步到上次看到的时间段。
  4. 传输层:段就是传输层里面数据的名字,负责提供端到端之间,或者说主机到主机之间一个连接,实现了服务进程到服务进程的传输,两台主机之间的通信都是由传输层来进行控制的。比如我们去百度上搜索东西,我们的主机肯定是要跟百度的服务器建立一个Connection连接,建立连接之后,我们要通过在连接上传输数据,我们在连接上发送请求,然后百度服务器在连接上返回一个响应,那我们整个操作其实都是在连接上进行的,这个时候比如我们的数据如何传输,然后传输的速率怎么样,安全性有没有得到保障,可靠性怎么样,会不会丢失,这些都是由传输层来进行一个控制的,所以传输层是非常重要的,它会控制你跟服务器之间的一个通信情况。传输层管理两个节点之间数据的传输负责可靠传输和不可靠传输传输层主要协议有TCP(传输控制协议)、UDP(用户数据报协议)。TCP允许应用把字节流变成多份段,而不是整个字节数据完整的发送出去。传输层通过流量控制来确保传输速度,再加上错误控制来进行数据完整的接收。端口号!!!报文来到传输层,加上端口号,封装成段。
  5. 网络层:网络层里数据的名字对应的是包,网络层负责数据的路由和转发,相当于是在传输层的基础上又多了一层封装,传输层我们只需要知道一个端口就可以进行传递了,但是网络层我们还需要知道一个IP地址。网络层主要协议是IP协议(互联网协议),IP协议负责将数据分割成小的数据包,并通过路由将这些数据包从源主机发送到目标主机,使得数据包可以在网络中进行正确的传输。路由器也是网络层的核心。IP地址是用来唯一标识网络上的设备的地址。IP地址是IP协议的一部分。ICMP(互联网控制报文协议):是一种用于在Internet上发送控制消息的协议,排除网络故障、网络可达性测试,例如,我们常用的ping命令就是基于ICMP协议实现的。ARP(地址解析协议):解析网络层中的IP地址与数据链路层的MAC地址之间的映射关系的协议,是一种很用于将IP地址解析成MAC地址的协议。段来到网络层,加上IP地址,封装成包。
  6. 数据链路层:对应的是帧,它也是网络层再向下的一层封装,它的话就需要我们知道MAC地址,也就是物理地址。数据链路层的数据传输其实就要通过MAC地址来定位的,网卡出厂的时候就有全球唯一的MAC地址。数据链路层除了说在MAC地址上传输之外,它还有一个作用就是做一个简单的流量错误控制,就比如说我们的数据在传输的时候出现了一些丢失或者说受到一些损坏,那我们数据链路层是可以感知到这个情况的。
  7. 物理层:物理层就比较直观一点,说白了就是网络设备,网络设备在整个结构之中传输所有的二进制数据文件(也就是比特,0和1就叫做比特),比如我们的网线:或者是光纤,或者是双绞线,这其实都是物理层的一个东西。物理层为数据链路层屏蔽了各种传输媒体的差异。

传输层协议和网络层协议有什么区别?  

  • 网络层协议负责提供主机间的逻辑通信;传输层协议负责提供进程间的逻辑通信。

2. TCP/IP模型的每一层分别是什么?为什么TCP/IP模型更常用? 

  • OSI七层模型是官方比较标准的一个计算机网络的模型划分 OIS模型它是一个理论模型,我们在实现的时候,或者说在实际应用中,TCP/IP模型才是一个实际应用的模型因为OSI七层参考模型划分的太过繁琐包括我们的Linux系统,它在构建网络模型的时候也采用的是TCP/IP模型。
  • TCP/IP四层网络模型是对OSI七层网络模型的一个简化。
  • TCP/IP模型本身是一个四层的网络协议模型,它把原本的应用层、表示层、会话层统一的用一个应用层来进行了一个代替,合并为应用层,因为表示层、会话层我们很少接触到,这样有助于我们做网络设计,将数据链路层和物理层合并为网络接口层(物理链路层)。简化之后流程变得简单了,也大大减少了资源的消耗。
  1. 应用层:负责处理特定应用程序的通信,例如:HTTP(超文本传输协议)、FTP(文件传输协议)、DNS(域名解析协议)=>将域名转换为对应的IP地址。
  2. 传输层:负责提供端到端的可靠数据传输服务。主要通过TCP(传输控制协议)和UDP(用户数据报协议)来完成。
  3. 网络层:负责进行数据包的路由和转发,将数据包从源主机发送到目标主机,使用IP协议进行寻址和路由选择。IP协议(互联网协议)、ICMP(互联网控制报文协议):排除网络故障、ping网络可达性测试、ARP(地址解析协议):解析网络层中的IP地址与数据链路层的MAC地址之间的映射关系的协议。
  4. 数据链路层(网络接口层):负责将数据包封装成帧,并通过物理介质进行传输,例如以太网。

3. HTTP协议的特点?

  • HTTP协议-超文本传输协议。
  • HTTP运行在应用层,如果从操作系统层面来看,应用层算作操作系统的用户态。
  • 什么是文本,就是带有文字的文档;什么是超文本,说白了就是带有超链接的文档。
  • 超文本:超越了普通文本的限制,比普通文本刚强大,除了文字信息,还可以定义图片、音频、视频等内容。

HTTP协议的三大特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型:一次请求对应一次响应(先请求后响应)
  3. HTTP协议是无状态协议:对于数据/事务处理没有记忆能力,每次请求-响应都是独立的,第一次请求传输的数据并不会携带到第二次请求里导致引申出来的问题:多次请求间不能进行共享数据。比如我们做了一个购物网站:有一个购买的功能,有一个浏览的功能,而浏览的功能它一般都是完全放开的,不管你是登录也好还是未登录也好,都允许去浏览商品;但是购买我们只允许已经登录的用户才去购买,比如我们用户已经登录了,但是登录这次请求处理完毕之后,再到购买这次请求的时候,我们是不知道用户是否已经登录了,就导致购买功能无法正常完成,因为HTTP协议是无状态协议,在两次请求之间是无法进行数据的共享的。解决方案:Web会话技术(Cookie、Session、Token),Cookie和Seesion的思想:额外存储一些信息,让HTTP协议知道状态。Token的思想:不存储数据,时间换空间,本质就是一个加密的字符串。

HTTP协议为什么设计为无状态的?

  • HTTP设计为无状态的话服务端就可以根据需求将请求分发到服务集群的任意节点上,有利于做负载均衡。 

HTTP / 1.1相对于HTTP / 1.0版本多了哪写新特性? 

HTTP的几个版本:HTTP / 0.9、HTTP / 1.0、HTTP / 1.1、HTTP / 2.0、HTTP / 3.0

  1. HTTP / 0.9:第一个公开发布的版本,有了Get请求,有了POST请求,相当于做了一个最基础的一个定义。
  2. HTTP / 1.0:多了一些请求方式,比如:多了PUT请求、多了DELETE请求、多了HEAD 请求,同时对Cookie长度也做了一个比较严格的限制。HTTP / 1.0的时候全部都是短链接,用户发送完请求,并且服务端进行响应之后这个链接就断开了,在HTTP / 1.0中,默认情况下,每次请求和响应都使用短链接,即每次传输结束后都会断开连接。但是你不要忘记了一个Web页面上还会存在有大量的资源,每一次断开连接之后,再次下载资源的时候再建立一次连接,这样的话连接的建立的性能很差(建立连接的时候需要三次握手,断开连接的时候需要四次挥手)。HTTP / 1.0协议可以实现长链接,但是需要客户端和服务端共同完成,通过一个非标准的"Connection:keep-alive"头信息来实现,该字段主要是告诉Web服务器先别关闭,我还来找你要资源呢,但是这个机制可能对一些服务器无效,于是在HTTP / 1.1协议里面就将其长连接作为了标准支持。
  3. HTTP / 1.1:HTTP / 1.1版本解决了数据展示的问题(解决了长连接的设计问题,底层依靠的是TCP协议)。HTTP / 1.0默认每个请求-响应都要建立一个新的连接,而HTTP / 1.1允许多个请求-响应共享同一个连接,减少了连接建立和断开的开销。HTTP / 1.1支持并发连接,这指的是客户端可以同时与服务器端之间建立多个并行的网络连接以便在单个会话当中发送多个请求和接收多个响应,通过并发链接,客户端可以在单个时间点上发起多个请求,而不必等待之前的请求完成,以此来提高整体的效率和性能,有效的利用了资源,然而并发连接也受到了一些限制,例如服务器的带宽还有客户端同时打开的连接数,过多的并发链接可能会导致服务器过载。
  4. HTTP / 2.0:开始进行底层协议上的改进(TCP转为UDP的过渡阶段)。HTTP / 2.0引入了更先进的多路复用技术,允许多个请求和响应在单个TCP连接上同时交错传输,进一步提高了网络性能。HTTP / 2.0支持流量控制,流量控制的目的是限制发送方和接受方发送的数据量,以防止过载。HTTP / 2.0还引入了服务器推送机制,它允许服务器在客户端请求之前,主动将相关资源推送给客户端:常见的HTTP请求都是客户端发送请求,服务器端收到请求之后返回数据,除了WebSocket之外,HTTP / 2.0也能实现这个功能。
  5. HTTP / 3.0:开始正式引入了修改后的UDP协议(QUIC协议登场)
  • 短链接知识普及:用户 / 客户端发送完请求,并且服务端进行响应之后这个链接就断开了。
  • 长链接(持久链接)是指在客户端和服务器之间建立一次连接,然后保持该连接的状态,使得客户端和服务器之间可以进行多次的数据交换,避免了频繁的建立和断开连接的开销,提高性能和效率。

HTTP 1.1和TCP协议有什么弊端?

  • 在进行HTTP / 1.1协议处理的时候,由于使用的是TCP协议作为其底层的实现,因此每一个HTTP客户端都需要独占一个TCP连接(一般来讲服务器上的连接数量是有限的,是不可能无限制的扩充,服务器上支持的连接句柄的数量,只是理论上的可能性,实际之中可能会更少,毕竟做服务端是需要处理业务的),同时所有的数据都采用非压缩的方式传输,头信息的内容是无法进行压缩处理的,而且每次请求-响应都需要携带这些头信息,这样也就意味着每一次请求和响应的时候都需要携带有大量的重复内容(带宽占有率极高)
  • HTTP / 1.1解决了长链接的设计问题,但是HTTP / 1.1是构建在TCP协议上的,于是这里面就会存在一个新的问题:所有的请求是放在一个队列里面去进行处理的,所有的数据通信是按照次序依次进行的服务器只有在处理完一个响应后,才允许处理下一个响应,如果说某一个响应处理很慢就会导致后续响应的排队,这种情况被称为"对头阻塞"。
  • HTTP / 2.0的出现就是为了解决HTTP对头阻塞的问题,HTTP / 2.0引入了更先进的多路复用技术,允许多个请求和响应在单个TCP连接上同时交错传输,即使某个流的响应受到延迟或阻塞,其它流的请求和响应仍然可以继续允许,这样就避免了对头阻塞的问题,进一步提高了网络性能,提高了整体的性能和吞吐量。同时为了提高传输性能,HTTP / 2.0协议里面还支持有头部数据压缩的机制
  • HTTP / 3.0通过使用索引表来减少重复内容的传输,提高性能和效率。

总结:TCP协议会出现对头阻塞的情况,而HTTP / 1.1版本里面头信息无法压缩,会造成无用的带宽资源浪费。

  • HTTP / 1.1协议中数据报文使用文本结构进行数据的传输,这样的处理机制可以直观的查看数据包中的数据内容(于是这个时候就需要进行SSL数据加密传输),但是为了解决数据泄露的安全漏洞,使用HTTPS进行改进(这个时候属于改进,而不是必须),而HTTP / 2.0的时候数据包文采用二进制(流)的传输模式(文本数据的体积很大,但是二进制数据的体积相对较小),计算机处理二进制一定比处理文本速度更快,虽然提高了传输的性能,但是却无法进行数据的直观获取(安全了)。 

HTTP / 2.0为什么不用UDP? 

HTTP / 2.0选择使用TCP而不是UDP作为传输层协议的主要原始是因为:

  1. 为了保证数据的可靠性,TCP提供可靠的数据传输,它使用确认机制、序列号和重传机制来确保数据的可靠性,而UDP则不提供这些机制。在HTTP / 2.0的应用场景中,可靠性是至关重要的,因为它通常用于传输重要数据和敏感信息。
  2.  顺序保证:TCP确保数据以发送的顺序按序到底接收端,而UDP则没有此保证。在HTTP / 2.0中,保持数据传输的顺序是很重要的,因为它涉及到请求和响应之间的对应关系,确保正确处理和解析响应。
  3. 流量控制和拥塞控制:TCP具有流量控制和拥塞控制的机制,这意味着它可以根据网络状况进行适应性调整,避免网络拥塞和数据丢失。对于HTTP / 2.0这样的高效传输协议,流量控制和拥塞控制的特性非常重要。
  • 虽然UDP相对于TCP具有较低的延迟和头部开销,但它在可靠性和顺序保证方面的弱点使其不太适合作为HTTP / 2.0的传输协议。HTTP / 2.0主要关注性能、多路复用和减少延迟等方面的优化,而这些特性在TCP协议上可以更好的实现。

HTTP有加密方式吗?

  • HTTP有加密方式,HTTP默认是明文传输它是不太安全的,为了我们确保安全,我们可以采用加密,就是把我们的内容进行一个加密,收到之后再解密。
  • 常见的两种加密算法:对称加密和非对称加密。

对称加密:就是发送方和接收方使用相同的密钥来进行加密和解密,发送方使用密钥将明文数据转换为密文数据,接收方使用同样的密钥将密文数据解密为明文数据。

  • 此时对称加密有个缺点就是说我们接收方想要知道这个密钥,发送方肯定是要先经过一次无加密的请求把该密钥传输过去,因为一开始接收方是不知道密钥的。因此,对称加密的一个重要问题是在通信双方之间如何安全的共享密钥,如果密钥在传输过程中被攻击者截获,导致密钥被泄露,那么加密的数据将无法保护。
  • 还有一个就是我们客户端比较多的时候,那我们服务器对每个客户端都维护一个密钥,那么服务器要维护特别特别多的密钥,牵扯到一个维护成本的问题。
  • 常见的对称加密算法:DES、AES等算法。

非对称加密:也称为公钥加密

  • 非对称加密算法由两个密钥组成:公钥和私钥。
  • 公钥加密过的数据只有私钥能解开,私钥解密过的数据只有公钥能解开。
  • 公钥可以公开发布,任何人都可以使用它来加密数据,而私钥必须保密,只有持有私钥的人才能解密数据,这样即使公钥在传输过程中被截获,也不会影响加密的安全性,但是对称加密比非对称加密慢的多。
  • 服务器把公钥发送给客户端,客户端发送的数据都通过公钥加密,服务器收到公钥加密过的数据后,通过自己的私钥进行一个解密。非对称加密的一个重要特点是:公钥可以在不保密的情况下共享给任何人,而私钥必须始终保持私密。
  • 常见的非对称加密算法:RSA,ECC等算法。

总结:

  • 对称加密:快速,效率高,但需要安全的共享密钥;
  • 非对称加密:通过公钥和私钥配对,无需共享私钥,虽然保证了安全,但速度很慢,计算复杂度较高。

混合加密

  • TLS使用了"混合加密":在通信刚开始的时候使用非对称加密算法,解决密钥交换的问题,后续全都使用对称加密进行通信。

HTTPS是怎么保证安全性的?

  • HTTPS = HTTP + SSL(TLS)
  • SSL:Secure Sockets Layer - 安全套接层
  • TLS:Transport Layer Security - 传输层安全协议
  • SSL和TLS协议都是保证通讯双方的一个数据传输安全,相当于在通讯双方建立了安全层,它也是实现HTTPS的基础,让HTTPS可以安全的传输数据。

  • HTTPS采用对称和非对称加密混合的一个算法来保证在网络上传输的数据的安全性(因为单纯用非对称加密会非常耗时) => TLS四次握手、CA机构和安全证书、公私钥、对称加密、非对称加密。 

  • HTTPS并不是一个单独的协议,只不过在HTTP的基础上用TLS/SSL安全协议进行加密,使得报文能够加密传输,这样通信就容易受到拦截和攻击。

  • SSL是TLS的前身它们两都是加密安全协议现在绝大部分浏览器都不支持SSL,而是支持TLS。

  • TLS加密,使用的是混合加密,对称和非对称加密这两种都有用上HTTPS规定服务端需要申请SSL证书,SSL证书其实就是保存在源服务器的数据文件,要让SSL证书生效就需要HTTPS协议向CA机构申请数字证书来确保服务器的身份是可信的,CA指的就是Certificate Authority证书授权中心,是第三方的一个机构,这个证书除了表明域名是属于谁的,日期等等信息以外,重要的这个证书还包括了特定的公钥和私钥,私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的证书本身也附带一个证书电子签名, 这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

  • 简单来说服务器安装了SSL证书以后,用户就可以通过HTTPS来访问服务器了,当然浏览器也会把HTTP的默认端口改为HTTPS的默认端口443。

  • 服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。

HTTPS 主要工作流程:

  1. 客户端发起 HTTPS 请求,连接到服务端的 443 端口。
  2. 服务端同样维护有两把钥匙,一把公钥、一把私钥,服务端有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
  3. 服务端将自己的数字证书发送给客户端,即服务端共享公钥到客户端(公钥在证书里面,私钥由服务器持有)。
  4. 客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,并用证书的公钥进行加密。
  5. 客户端将公钥加密后的密钥发送到服务器。
  6. 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥(即获取密钥),然后用客户端密钥对返回数据进行对称加密,使用对称加密保证数据传输的效率,这样子传输的数据都是密文啦。
  7. 服务器将加密后的密文返回到客户端。
  8. 客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据。

客户端怎么去校验证书的合法性?

  • CA机构
  • 假如在 HTTPS 的通信过程中,中间人篡改了证书原文,由于他没有 CA 机构的私钥,
    所以 CA 公钥解密的内容就不一致。

现在浏览器通过HTTPS访问服务器具体会有哪些变化呢?

  • 根据不同的TLS版本会有不同的变化。
  • 以TLS 1.2为例

TLS四次握手讲一讲?

什么是握手(Handshake)?
  • 握手一般是通信的前置动作,即达成某种约定,比如TCP握手是要确定双端的接收、发送能力等;而TLS握手则是为了验证身份、交换信息从而生成密钥,为后续加密通信做准备。
  • HTTPS需要先经过TCP三次握手,而TLS四次握手则是在TCP连接建立之后进行的,因此,HTTPS首先通信需要7次握手。

TLS四次握手过程:
  • 第一次握手:客户端对服务端发起请求,发起一个ClientHello的消息,并且携带使用的协议版本号、生成的随机数1以及客户端支持的加密算法
  • 第二次握手:服务端接收到请求或消息后,确认双方使用的加密算法,反馈给客户端ServerHello的消息,并给出服务器的证书以及服务器生成的随机数2
  • 第三次握手:客户端确认服务器证书有效后,生成一个新的随机数3,并使用数字证书中的公钥,加密这个随机数,然后发给服务器,并且还会提供一个前面所有内容的hash值,用来供服务器检验
  • 第四次握手:服务端使用自己的私钥,来解密客户端发送过来的随机数,并提供前面所有内容的hash值供客户端检验。
客户端和服务器端根据约定的加密算法使用前面的三个随机数,生成对话密钥,以后的对话过程都使用这个密钥来加密信息,最终双方发送finished消息~!
密码组合:
  1. 第一种是握手期间密钥的非对称加密算法,常用的是RSA算法;
  2. 第二种是握手结束以后传输数据所采用的对称加密算法,一般是AES或DES
  3. 第三种是摘要算法:一般比如说证书信息的摘要算法(SHA1、SH256以及MD5算法比较常用)

HTTP和HTTPS有什么区别?

  • HTTP - 超文本传输安全协议:是互联网上应用最为广泛的一种网络通信协议,基于TCP协议,可以使浏览器工作更为高效,减少网络传输。
  • HTTPS - 超文本传输安全协议:是HTTP的加强版,可以认为是HTTP + SSL(Secure Socket Layer),在HTTP的基础上增加了一系列的安全机制,一方面保证数据在网络传输过程中是安全的,另一方面对访问者增加了验证机制,而且HTTPS是目前现行架构下,最为安全的解决方案。

主要区别:

  1. HTTP的连接是简单无状态的,HTTPS的数据传输是经过证书加密的,安全性更高。
  2. HTTP是免费的,没有进行证书验证的机制;而HTTPS需要申请证书,在数据传输之前会进行SSL证书的验证,验证服务器的身份是否可信,这样可以防止第三方攻击和伪造网站的问题,提高通信的安全性,而证书通常是需要收费的,并且费用一般不低。
  3. 它们的传输协议不同,所以它们使用的端口也是不一样的,HTTP使用的是默认的TCP协议是80端口,数据传输是明文的,不经过加密;而HTTPS使用的是默认的SSL/TLS协议加密的TCP - 443端口,使用SSL/TLS协议对HTTP的数据进行加密和解密,使得报文能够加密传输,确保数据的机密性和完整性。
  4. 安全性:HTTP是明文传输协议,数据在传输过程中不经过加密,容易被第三方窃听和篡改。而HTTPS通过使用SSL或TLS协议对数据进行加密,确保数据在传输过程中的安全性。

HTTPS的缺点:

  1. HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的明文传输,而HTTPS在TCP三次握手之后,还需要进行TLS协议的四次握手,才可以进入加密报文传输,比较费时,所以会影响服务的响应速度以及吞吐量。
  2. HTTPS也并不是完全安全的,它的证书体系并不是完全安全的,并且HTTPS在面对DDoS这样的攻击时,几乎起不到任何作用。
  3. 证书需要费钱,并且功能越强大的证书费用越高。

HTTP的缓存机制?

  • HTTP的缓存机制是为了提高网页加载速度和减少网络传输的消耗,降低服务器的负载,通过缓存可以将之前获取的资源暂存在客户端上,以便在后续请求中重用,而不必重新从原始服务器获取资源。
  • 服务器可以在响应中设置Cache-Control头部字段来控制资源的缓存行为 / 缓存策略。 

HTTP的强缓存和弱缓存了解吗?

  • HTTP强缓存就是可以在不发送请求到服务器的情况下直接从缓存中获取资源,以提高性能和降低网络开销。 

  • 弱缓存需要发起请求到服务器进行缓存验证,以确定是否可以使用缓存的副本。

为什么IP协议需要分片? 

前置知识:

  • IP协议的数据来源于传输层,传输层有两个协议,一个是UDP,一个是TCP。
  • 网络层拿到传输层的数据之后,在网络层打上IP协议的报头,传递给数据链路层
  • 而数据链路层对数据传递的数据大小有限制,为MTU:最大报文段长度 => 1500字节;意味着,网络层给数据链路层的数据不能超过MTU!!!

MTU:

  • 最大报文段长度 / 最大传输单元,指的是数据链路层的最大payload负载,由硬件网卡设置MTU,是一个硬性限制。

IP协议什么情况下需要分片?

  • 当IP数据包的总长度大于MTU(1500字节)的时候,就需要分片传输,以满足数据链路层对MTU的要求。

  • 数据链路层对数据传递的数据大小有限制,为MTU:最大报文段长度;意味着,网络层给数据链路层的数据不能超过MTU

IP协议是怎么进行分片的?

只是演示,真实的是TCP协议将数据交给IP协议之后,IP协议一定不用分片传输!
  • 将传输层递交的给IP的数据,分成不同的分片,每个分片都打上IP协议的头部 
  • 每个分片相当于是独立的数据包,在网络当中独立的进行传输
  • 在接收方接收到所有分片之后,进行组合。
  • 因为每个分片在网络当中是独立传输的,那么很有可能早发的分片晚到,晚发的分片早到。

TCP协议和UDP协议

  • TCP协议和UDP协议都工作在传输层,它们的目标都是在程序之间传输数据,数据可以是文本文件,可以是视频,也可以是图片。
  • TCP协议与UDP协议最大的区别就是:一个面向连接,一个面向无连接。
  • TCP传输控制协议和UDP用户数据报协议是在网络传输中常用的基于IP协议的传输层协议。

TCP三次握手和四次挥手(三握四挥)

前置知识
  • 传输层在OSI参考模型中起到承上启下的作用传输层主要就干一件事,建立端到端之间的连接(比如我们的客户端到服务端就是端到端)。

  • HTTPS协议对应的端口号是443

  • IP地址加上端口号就叫做套接字Socket

  • 在使用TCP连接的时候就要进行三次握手TCP报文里面有SYN,ACK和FIN等标识

  • 首先在客户端发送TCP报文的时候,会把SYN开启,SYN标识Synchronization,原意是同步的意思客户端表示想和服务端进行数据的同步在三次握手以后,客户端就可以和服务端互相发送消息

  • SYN = 1表示建立一个连接请求,

  • TCP是全双工的所以可以互发信息

  • 报文里面还有一个重要的字段Sequence序号,为什么还需要添加这个Sequence序列号呢?因为应用程序可能连续发送多个序号和服务器。 Seq表示起始序号

  • ACK表示Ackonwledgment,确认的意思SYN + ACK合起来就是确认同步的意思了。

  • ACK = 1表示确认有效,ACK = 0表示确认无效。

  • ack表示确认序号,确认号 = 序列号 + 1。序列号用来解决乱序问题。

  • FIN:Finsh,结束的意思。 FIN = 1表示要断开连接。

  • SYN-RCVD:确认接收状态  SYN-SEN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GaoSSR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值