[八股大全]计网操作系统篇

计网

计网基础知识

1.解释一下IP地址、子网掩码、网络地址。

IP 地址

IP地址是用来唯一标识互联网上每台设备的数字地址。IPv4地址是一个32位的二进制数,通常表示为四个十进制数(每个数在0到255之间),中间用点号分隔开,如192.168.1.1。而IPv6地址则是一个128位的二进制数,通常表示为八组四位十六进制数,中间用冒号分隔,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334

子网掩码

子网掩码用于确定IP地址中的哪部分代表网络地址,哪部分代表主机地址。通过与IP地址进行按位与运算,子网掩码可以帮助计算出设备所属的具体子网。对于IPv4,子网掩码也是一个32位的二进制数,通常以点分十进制形式表示,例如255.255.255.0。不同的子网掩码可以创建不同大小的子网。

网络地址

IP地址和子网掩码进行按位与(bitwise AND)运算可以得到网络地址,也就是该IP地址所在的网络部分。

2.如何在Linux上配置一个IP地址,如果给定端口号如何解析出域名?

  • 配置Linux系统的IP地址的方法,主要有以下三种: -ifconfig ifconfig 命令主要是用来查看网卡的配置信息,因为用它来配置网卡的IP地址时,只会临时生效 (Linux服务器重启后就会失效)setup setup 命令是 redhat 系列的linux系统(如CentOS)中专有的命令工具。可以使用 setup 命令, 来对网络配置中的IP地址、子网掩码、默认网关、DNS服务器进行设置。而且,setup 网络配置工 具设置的IP地址会永久生效。 修改网卡的配置文件 直接修改网卡的配置文件,设置方法有两种: 自动获取动态IP地址 手工配置静态的IP地址使用dig命令解析域名

3.客户端发送给服务器的请求,怎么确定具体的协议?

4. 谈谈单工、双工、半双工的通信方式。

0.OSI和TCP/IP 网络分层模型

1.OSI 七层模型

2.TCP/IP模型

由以下 4 层组成:

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

1.应用层

应用层位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输。 我们把应用层交互的数据单元称为报文。

应用层常见协议

HTTP(Hypertext Transfer Protocol,超文本传输协议):基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。

SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):基于 TCP 协议,是一种用于发送电子邮件的协议。注意 ⚠️:SMTP 协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用 POP3 或 IMAP 协议。

POP3/IMAP(邮件接收协议):基于 TCP 协议,两者都是负责邮件接收的协议。IMAP 协议是比 POP3 更新的协议,它在功能和性能上都更加强大。IMAP 支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支持 IMAP。

FTP(File Transfer Protocol,文件传输协议) : 基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意 ⚠️:FTP 是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如 SFTP。

Telnet(远程登陆协议):基于 TCP 协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用 Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。

SSH(Secure Shell Protocol,安全的网络传输协议):基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务

RTP(Real-time Transport Protocol,实时传输协议):通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由 WebRTC 实现。

DNS(Domain Name System,域名管理系统): 基于 UDP 协议,用于解决域名和 IP 地址的映射问题。

2.传输层

传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。 应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。

传输层常见协议

  • TCP(Transmission Control Protocol,传输控制协议 ):提供 面向连接 的,可靠 的数据传输服务。
  • UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。

3.网络层

网络层负责为分组交换网上的不同主机提供通信服务。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。

网络层常见协议

IP(Internet Protocol,网际协议):TCP/IP 协议中最重要的协议之一,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前 IP 协议主要分为两种,一种是过去的 IPv4,另一种是较新的 IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。

ARP(Address Resolution Protocol,地址解析协议):ARP 协议解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。

ICMP(Internet Control Message Protocol,互联网控制报文协议):一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping 工具就使用了 ICMP 协议来测试网络连通性。

NAT(Network Address Translation,网络地址转换协议):NAT 协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。

OSPF(Open Shortest Path First,开放式最短路径优先) ):一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。

RIP(Routing Information Protocol,路由信息协议):一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。

BGP(Border Gateway Protocol,边界网关协议):一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议,具有高度的灵活性和可扩展性。

4.网络接口层

我们可以把网络接口层看作是数据链路层和物理层的合体。

  1. 数据链路层(data link layer)通常简称为链路层( 两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
  2. 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

3.网络为什么要分层?

我觉得主要有 3 方面的原因:

  1. 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
  2. 提高了整体灵活性:每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
  3. 大问题化小:分层可以将复杂的网络问题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。 这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。

1.TCP和UDP

0.udp

1.tcp的单播和udp的多播和广播

  1. 单播:两个主机间单对单的通信
  2. 广播:一个主机对整个局域网上所有主机上的数据通信(网络地址全1)

单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网的主机进行通信

​ 3.多播:实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机

2.udp怎么解决数据包顺序错乱和丢包的问题/怎么保证可靠传输?

UDP(用户数据报协议)是一种无连接的传输层协议,它提供了不可靠的数据报服务。这意味着UDP本身并不保证数据包的顺序或防止数据包丢失。然而,可以在应用层上实现一些机制来解决这些问题。以下是一些常用的方法:

解决数据包顺序错乱的问题

  1. 序列号机制: 给每个发送的数据包分配一个唯一的序列号。接收端可以根据序列号重新排序接收到的数据包,确保它们按照正确的顺序处理。
  2. 确认应答(ACK)机制: 发送方为每个数据包设置一个定时器,并等待接收方的确认。如果在定时器超时前没有收到确认,则可以假设数据包已丢失,并重新发送该数据包。接收方在接收到数据包后,会根据序列号发送确认信息给发送方,以告知哪些数据包已经正确接收。
  3. 滑动窗口协议: 滑动窗口协议允许发送方连续发送多个数据包而不需要为每一个数据包等待确认。接收方可以使用序列号来识别乱序到达的数据包,并通过累积确认告诉发送方哪些数据包已经被成功接收。

解决数据包丢失的问题

  1. 超时重传: 结合上述的序列号和确认机制,如果发送方在一定时间内未收到确认,则认为数据包丢失并进行重传。
  2. 冗余编码: 在发送数据时加入一定的冗余信息(如前向纠错码FEC),这样即使某些数据包丢失,接收端也可以利用剩余的数据包和冗余信息恢复原始数据。
  3. 混合ARQ(自动重传请求): 结合前向纠错(FEC)与传统的ARQ技术,允许接收方在检测到丢失或错误时尝试自行纠正错误,同时对于无法纠正的情况请求重传。

这些方法都需要在应用程序层面实现,因为UDP本身并没有提供这样的功能。实际上,许多实时通信系统,比如VoIP和视频流媒体服务,都会在其协议栈中包含类似的机制来应对UDP的不可靠性。

0.为什么需要TCP?

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

1.TCP和UDP的区别?

TCP:传输控制协议,UDP:用户数据报协议。

区别:

1.TCP面向连接,即使用TCP通信双方传输前要三次握手来简历TCP连接;UDP是无连接的,即发送数据之前不需要建立连接,可以随时发送数据。

2.TCP仅支持单播(即一对一通信);UDP支持单播、多播和广播;

3.TCP提供可靠的服务(即不会出现无码、丢失等传输差错);UDP提供不可靠服务。因此,TCP适用于要求可靠传输且对实时性要求不高的应用,如文件传输和电子邮件;而UDP适合视频会议等实时应用。

4.TCP面向字节流,即把应用报文看成一连串无结构的字节流;UDP是面向报文的,即对应用保温既不合并也不拆分而是保留报文的边界。

5.TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如实时视频会议等)。

6.TCP首部开销20字节;UDP的首部开销小,只有8个字节。

2.使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?

基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH

  • HTTP:HyperText Transfer Protocol(超文本传输协议),默认端口80
  • FTP: File Transfer Protocol (文件传输协议), 默认端口(20用于传输数据,21用于传输控制信息)
  • SMTP: Simple Mail Transfer Protocol (简单邮件传输协议) ,默认端口25
  • TELNET: Teletype over the Network (网络电传), 默认端口23
  • SSH:Secure Shell(安全外壳协议),默认端口 22

基于UDP的应用层协议:DNS、TFTP、SNMP

  • DNS : Domain Name Service (域名服务),默认端口 53
  • TFTP: Trivial File Transfer Protocol (简单文件传输协议),默认端口69
  • SNMP:Simple Network Management Protocol(简单网络管理协议),通过UDP端口161接收,只有Trap信息采用UDP端口162。

3.TCP 协议是如何保证可靠传输的?

  1. 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时 TCP 发送数据端超时后会重发数据;
  2. 对失序数据包重排序:既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报文段的到达也可能会失序。TCP 将对失序数据进行重新排序,然后才交给应用层;
  3. 丢弃重复数据:对于重复数据,能够丢弃重复数据;
  4. 应答机制:当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
  5. 超时重传:TCP在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。
  6. 流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
  7. 拥塞控制 : 当网络拥塞时,减少数据的发送。TCP 在发送数据的时候,需要考虑两个因素:一是接收方的接收能力,二是网络的拥塞程度。接收方的接收能力由滑动窗口表示,表示接收方还有多少缓冲区可以用来接收数据。网络的拥塞程度由拥塞窗口表示,它是发送方根据网络状况自己维护的一个值,表示发送方认为可以在网络中传输的数据量。发送方发送数据的大小是滑动窗口和拥塞窗口的最小值,这样可以保证发送方既不会超过接收方的接收能力,也不会造成网络的过度拥塞。

4.TCP怎么实现流量控制(滑动窗口)

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

以下是TCP滑动窗口流量控制的基本工作原理:

  1. 窗口大小:在TCP连接建立时,双方会协商一个初始窗口大小。这个窗口大小是以字节为单位的,并且在数据传输过程中可以动态调整。接收方会在每个ACK(确认)报文中包含当前可用窗口大小的信息。
  2. 累积确认:当接收方收到数据段后,它不会立即对每一个数据段都发送一个确认,而是等待一段时间看是否能接收到后续的数据段,然后一次性确认所有已经正确到达的数据。这种方式提高了效率,减少了网络上的确认报文数量。
  3. 流量控制:发送方根据接收到的接收方的窗口大小来决定接下来可以发送多少数据。如果接收方处理不过来,它可以减小窗口大小,甚至设置为0来暂停发送方的数据发送。当接收方处理完一些数据后,它可以再次增加窗口大小,允许发送方继续发送数据。
  4. 选择性确认(SACK):除了基本的累积确认外,TCP还支持选择性确认。这意味着接收方可以告诉发送方哪些特定的数据块已经成功接收,这样发送方就只需要重传那些确实丢失的数据段,而不是从最后一个确认的序列号开始重传所有数据。
  5. 快速重传与恢复:当发送方检测到数据包丢失时,它不需要等到超时重传计时器到期就可以重传丢失的数据包。这是通过接收到三个重复的ACK来触发的,表明接收方正在等待某个特定的数据包。发送方会立即重传丢失的数据包,并进入快速恢复算法以调整其拥塞窗口大小。

其他流量控制方法(令牌桶和漏桶)

令牌桶和漏桶是两种流量控制算法,它们各自有不同的特性和适用场景。具体来说:

  • 令牌桶:令牌桶通过以固定的速率向桶中添加令牌来控制流量,每个请求都需要消耗一个令牌。如果桶中有可用的令牌,则请求被允许通过;如果桶中没有令牌,则请求会被限制或拒绝。令牌桶能够应对一定程度的突发流量,因为它可以累积令牌,从而在短时间内处理更多的请求。
  • 漏桶:漏桶则是以固定容量的桶来控制流量,请求像水流一样以一定的速率流入桶中,超过桶的容量部分会被丢弃。漏桶算法能够平滑地限制请求的速率,但不适合应对突发流量,因为它的容量是固定的,无法临时处理超过平均速率的请求。

在实际应用中,选择使用令牌桶还是漏桶取决于具体的业务需求和流量特性:

  • 对于需要限制平均速率的场景:可以选择漏桶,因为它能够确保请求的处理速度不会超过预设的速率。
  • 对于需要处理突发流量的场景:令牌桶更为合适,因为它允许在短时间内处理更多的请求,只要这些请求在之前的时间窗口内有足够的令牌积累。

总结来说,令牌桶更适合处理突发流量,而漏桶更适合平滑限制流量。在实际应用中,应根据系统的承受能力和业务需求来选择合适的流量控制算法。

5.TCP的重传机制是什么?

TCP在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。

6.TCP 的拥塞控制是怎么实现的?

拥塞控制是为了防止过多的数据注入到网络中让网络过载

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP 的拥塞控制采用了四种算法,即 慢开始拥塞避免快重传快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

  • 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。
  • 拥塞避免: 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1.
  • 快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

7.说说TCP的三次握手

(序号字段seq:本TCP报文段数据载荷的第一个字节的序号;

确认号字段ack:指出希望受到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的数据的确认;

确认标志位ACK:值为1表示确认号字段有效;

同步标志位SYN:SYN=1且ACK=0表示是个TCP连接请求报文段;SYN=1且ACK=1表示同意连接请求报文段)

假设发送端为客户端,接收端为服务端。开始时客户端和服务端的状态都是CLOSED

  1. 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送连接请求报文,其中包含标志位SYN=1,序列号seq=x。第一次握手前客户端的状态为CLOSE,第一次握手后客户端的状态为SYN-SENT。此时服务端的状态为LISTEN
  2. 第二次握手:服务端在收到客户端发来的连接请求报文后,会随机生成一个服务端的起始序列号y,然后给客户端回复确认报文段,其中包括标志位SYN=1,确认标志位ACK=1(表示这是个TCP连接请求确认报文段),序列号seq=y,确认号ack=x+1。第二次握手前服务端的状态为LISTEN,第二次握手后服务端的状态为SYN-RCVD,此时客户端的状态为SYN-SENT
  3. 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送确认报文段,其中包含确认标志位ACK=1,序列号seq=x+1,确认号ack=y+1。第三次握手前客户端的状态为SYN-SENT,第三次握手后客户端和服务端的状态都为ESTABLISHED。此时连接建立完成。

为什么不是两次握手?

之所以需要第三次握手,主要为了防止已失效的连接请求报文段突然又传输到了服务端,导致产生问题。

  • 比如客户端A发出连接请求,可能因为网络阻塞原因,A没有收到确认报文,于是A再重传一次连接请求。
  • 然后连接成功,等待数据传输完毕后,就释放了连接。
  • A发出的第一个连接请求等到连接释放以后的某个时间才到达服务端B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段。
  • 如果不采用三次握手,只要B发出确认,就建立新的连接了,此时A不会响应B的确认且A不发送数据,这时候B处于SYN-RECV状态一直等待A发送数据,浪费资源。

8.TCP的4次挥手

客户端先向其TCP发出连接释放报文段FIN=1,seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待服务端的确认。

服务端收到连接释放报文段后即发出确认报文段ACK=1,ack=u+1,seq=v),服务端进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。

A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

B发送完数据,就会发出连接释放报文段(FIN=1,ACK=1,seq=w,ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。

A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL(最大报文段生存时间)后,A才进入CLOSED状态。B收到A发出的确认报文段后关闭连接,若没收到A发出的确认报文段,B就会重传连接释放报文段。

第四次挥手为什么客户端要等待2MSL才进入Closed状态?

保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,B收不到这个确认报文,就会超时重传连接释放报文段,然后A可以在2MSL时间内收到这个重传的连接释放报文段,接着A重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态,若A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后直接进入Closed状态,则A无法收到B重传的连接释放报文段,然后B就会反复重传连接释放报文段而不会进入Closed状态。

为什么是四次挥手?

在关闭连接时,当Server端收到Client端发出的连接释放报文时,很可能并不会立即关闭SOCKET,即服务端的报文还没有发完,所以Server端先回复一个ACK确认报文,告诉Client端我收到你的连接释放报文了。只有等到Server端所有的报文都发送完了,这时Server端才能发送连接释放报文,之后两边才会真正的断开连接。故需要四次挥手。

9.TIME-WAIT

为什么出现TIME-WAIT?

主动关闭连接的一方在发送最后一个ACK后进入的一个临时状态,持续2MSL(1MSL是报文的存活时间)的时间长度

当两个系统通过 TCP 协议进行通信,并且一方决定关闭连接时,会经过一个四次挥手的过程来完成连接的终止。在最后一次确认(ACK)发送之后,主动关闭连接的一方并不会立即释放端口并允许新的连接使用该端口,而是将该连接标记为 TIME_WAIT 状态,并等待一段时间(通常是两倍的最大段生存时间,即 2MSL),以确保最后一个 ACK 已经被被动关闭连接的一方正确接收。这段时间过后,连接才会被完全关闭,并且端口号可以被重新分配给其他服务。

1.TIME_WAIT 状态会导致什么问题

从网络资源的角度看,该状态下的TCP连接占用了本地端口,无法立即释放。由于端口资源有限,大量处于TIME_WAIT状态的连接可能会导致端口资源枯竭,从而影响新的连接建立。尤其是在高并发、短连接的场景下,这个问题尤为显著。例如,服务器可能会因为大量的TIME_WAIT状态而导致新的客户端无法连接。

2.有很多 TIME-WAIT 状态如何解决

当系统中有大量连接进入 TIME_WAIT 状态时,可以通过多种方法来减轻这种状态带来的负面影响。以下是一些常见的解决方案:

  1. 优化应用逻辑: 减少短连接:尽可能将短连接转换成长连接。例如,Web 应用可以使用 HTTP/1.1 的 keep-alive 特性,这样客户端和服务器之间可以保持一个长期的连接,多次请求复用同一个连接,减少了连接建立和关闭的次数。批量处理请求:在客户端,可以尝试将多个请求打包成一个较大的请求,从而减少连接建立和关闭的次数。
  2. 调整内核参数: 增大端口范围:在 Linux 中,可以增加 ephemeral port(临时端口)的范围,这样可以有更多的端口可用于新的连接。通过修改 /proc/sys/net/ipv4/ip_local_port_range 文件来实现这一点。减小 TIME_WAIT 超时时间:可以尝试减小 TIME_WAIT 的超时时间。虽然这可以更快地回收端口,但也增加了旧数据包干扰新连接的风险。可以通过调整 /proc/sys/net/ipv4/tcp_fin_timeout 参数来设置 TIME_WAIT 的超时时间。启用 TIME_WAIT sockets 快速回收:Linux 内核提供了一个选项 net.ipv4.tcp_tw_reuse,当设置为 1 时,可以启用 TIME_WAIT sockets 的快速回收。这可以让服务器更快地复用本地地址,但同样需要注意旧数据包干扰的风险。
  3. 使用 SO_REUSEADDR 或 SO_REUSEPORT: 服务器可以设置 SO_REUSEADDR 套接字选项来通知内核,如果端口被占用,但 TCP 连接位于 TIME_WAIT 状态时可以重用端口。

10.SIN/FIN不包含数据却要消耗序列号

凡是需要对端确认的,一定消耗TCP报文的序列号。SYN和FIN需要对端的确认,因此需要消耗一个序列号。

SYN作为三次握手的确认。FIN作为四次挥手的确认。如果没有序列号,会导致SYN请求多次重发,服务端多次处理,造成资源浪费

11.TCP报文首部有哪些字段,其作用又分别是什么?

16位端口号:源端口号,主机该报文段是来自哪里;目标端口号,要传给哪个上层协议或应用程序

32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。

32位确认号:用作对另一方发送的tcp报文段的响应。其值是收到的TCP报文段的序号值加1。

4位头部长度:表示tcp头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。

6位标志位:URG(紧急指针是否有效),ACk(表示确认号是否有效),PSH(缓冲区尚未填满),RST(表示要求对方重新建立连接),SYN(建立连接消息标志接),FIN(表示告知对方本端要关闭连接了)

16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

16位校验和:由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。

16位紧急指针:一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法

12.TCP的粘包和拆包问题及其解决方案

TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。

为什么会产生粘包和拆包呢?

  • 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;
  • 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;
  • 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;
  • 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。即TCP报文长度-TCP头部长度>MSS。

解决方案:

  • 发送端将每个数据包封装为固定长度
  • 在数据尾部增加特殊字符进行分割
  • 将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小

13.什么是SYN攻击

我们都知道 TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到 一个 SYN 报文,就进入 SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知 IP 主机的ACK 应答,久而久之就会占满服务端的 SYN 接收队列(未连接队列),使得服务器不能为正常用户服务。

14.如何唯一确定一个TCP连接呢?

TCP 四元组可以唯一的确定一个连接,四元组包括如下: 源地址 源端口 目的地址 目的端口。

源地址和目的地址的字段(32位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。

源端口和目的端口的字段(16位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。

2.IP

0.什么是ip地址?

IP地址为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址在网络通信中起关键作用,类似于现实生活中的住址。每个设备在加入网络时都会被分配一个唯一的IP地址,以确保数据包能够准确地送达目的地。

1.说一说你对IP分类的了解。

IP(Internet Protocol)地址是用于在网络中唯一标识设备的一串数字,它允许设备在互联网上进行通信。IP地址有两种主要版本:IPv4和IPv6。

IPv4使用32位地址,通常表示为四个十进制数(每个数介于0到255之间),中间用点号隔开(例如192.0.2.1)。IPv4地址可以分为五类(A、B、C、D、E),每类具有不同的特点:

2.IP为什么要分类?

根据IP地址访问终端是通过路由器,路由设备当中有一张路由表,该路由表记录了所有IP地址的位 置,这样就可以进行包的转发了,如果我们不区分网络地址,那么这张路由表当中就要保存有所有IP地 址的方向,这张路由表就会很大,就像下面说的那样:如果不分网络位和主机位,路由器的路由表就是 都是32位的地址,那所有的路由器维护的路由表会很大,转发速度会变慢(因为查询变慢)。而且所有 的路由器都要有全Internet的地址,所有人的路由器都要有足够的性能来存下全网地址。估计建造这样 的Internet成本是现在的几万倍,甚至更高。

有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护这个 网络地址的方向,就可以找到相应的终端了。

3.为什么有了ipv4后还要ipv6?

IPv4和IPv6是互联网使用的两种重要IP地址协议,它们在地址空间、地址分配以及网络配置等方面有显著差异。下面将深入探讨为什么在已有IPv4的情况下还需要发展IPv6:

  1. 地址空间问题 有限地址空间:IPv4使用32位地址,仅能提供约43亿个唯一地址,这一数量在互联网设备迅速增加的今天已经显得远远不够。地址耗尽:根据统计,剩余的IPv4地址池正在快速消耗,许多地区已经用尽了IPv4地址。
  2. 技术局限性 子网划分问题:IPv4的子网划分和地址分配方式有时不够灵活,容易造成资源浪费或不足。NAT技术局限:虽然网络地址转换(NAT)技术在一定程度上缓解了IPv4地址短缺问题,但它依然存在诸多限制,例如无法支持某些特定的网络应用。

4.IPV4和IPV6有什么区别?

IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是互联网协议的两个版本,它们之间存在几个重要的区别:

地址格式

  • IPv4 使用32位地址,表示为四个十进制数(每个数介于0到255之间),中间用点号隔开(如192.0.2.1)。
  • IPv6 使用128位地址,表示为八组由冒号隔开的四位十六进制数(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6地址通常会省略前导零,并且可以用双冒号::来表示一个或多个全零字段。

地址数量

  • IPv4 提供大约43亿个地址(2^32 - 1),这个数量已经不足以满足全球不断增长的网络设备需求。
  • IPv6 则提供了几乎无限的地址空间(2^128),理论上可以提供比地球上所有原子还多的地址数量。

头部结构

  • IPv4 的头部固定为20字节,并且包括一个可选字段区域。
  • IPv6 的头部简化并固定为40字节,没有可变长度的选项字段,而是使用扩展头部来携带选项信息。

安全性

  • IPv4 在协议层面没有内置安全性功能,安全机制通常依赖于其他协议或设备。
  • IPv6 设计时考虑到了安全性,IPv6中包含了对IPsec(Internet Protocol Security)的支持,这使得端到端的安全通信更加容易实现。

自动配置

  • IPv4 需要手工配置或使用DHCP(动态主机配置协议)来自动分配IP地址。
  • IPv6 支持无状态地址自动配置(SLAAC),设备可以自行生成自己的IP地址,而不需要专门的服务器来分配地址。

组播

  • IPv4 支持组播,但并不是所有设备都支持。
  • IPv6 将组播作为标准特性之一,更加强调其重要性。

路由效率

  • IPv4 路由表随着网络的增长变得越来越大,增加了路由器处理的负担。
  • IPv6 通过地址前缀聚合可以减小路由表的大小,提高路由效率。

私有地址

  • IPv4 中有特定的私有地址段(如10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16),用于内部网络,不会出现在互联网上。
  • IPv6 也有私有地址段,称为唯一本地地址(ULA, Unique Local Address),格式为fc00::/7。

2.HTTP

0.什么是HTTP协议

HTTP(Hypertext Transfer Protocol,超文本传输协议):基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。

什么是超文本?

就是超链接

1.2种HTTP报文结构

客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端。

HTTP 请求报文由请求行请求头空行请求体(body)组成。

请求报文结构:

  • 请求行:由请求方法(GET/POST/PUT)、请求URL(不包括域名 | 、HTTP协议版本组成
  • 请求头部 Header:请求头部由关键字/值对组成,每行一对**;主要包含Content-Length标头:实体的长度,Content-Tyep标头:实体的媒体类型
  • 空行:一个空行用来分隔首部和内容主体 Body
  • 请求体body为空

响应报文结构:

  • 状态行:包含http协议版本、状态码和状态描述,最常见的是 200 OK 表示请求成功了
  • 响应头部
  • 空行:一个空行分隔首部和内容主体
  • 响应体body

2.URI 和 URL 的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
  • URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。URL是URI的子集,它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 定位这个资源。

3.HTTP状态码

101 切换请求协议,从 HTTP 切换到 WebSocket

200 请求成功,有响应体

什么是重定向?

重定向(Redirect)是指通过各种方式将网络请求重新定义,使其转向其他位置的过程。这种机制在互联网中广泛应用,例如:

  1. 网页重定向:当用户访问的URL已经不再使用或内容已迁移至新的URL时,服务器会返回一个重定向状态码(如301永久重定向或302临时重定向),并告知浏览器新的URL,浏览器会自动跳转到新地址。
  2. 域名重定向:当一个域名被设置为另一个域名的别名时,所有对该域名的请求都会被自动转发到主域名。
  3. 路由重定向:在网络路由中,数据包的路径选择变化也可以视为一种重定向,即数据包被重新导向至新的路径以到达目的地。

302和304有什么区别?

302和304是网页请求的两个不同的响应状态码。302 (临时移动)表示 服务器目前从不同位置的网 页响应请求,但请求者应继续使用原有位置来进行以后的请求。 304 (未修改)表示 自从上次请求 后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

4.HTTP方法

1.有哪些HTTP方法

1

GET

请求指定的页面信息,并返回实体主体。

2

HEAD

类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头

3

POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。

4

PUT

从客户端向服务器传送的数据取代指定的文档的内容。

5

DELETE

请求服务器删除指定的页面。

6

CONNECT

HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

7

OPTIONS

允许客户端查看服务器的性能。

8

TRACE

回显服务器收到的请求,主要用于测试或诊断。

9

PATCH

是对 PUT 方法的补充,用来对已知资源进行局部更新 。

2.POST和GET有哪些区别?各自应用场景?

1.使用场景:GET 用于获取资源,而 POST 用于传输实体主体。

2.参数:GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。

3.安全性:安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

4.幂等性:幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。所有的安全方法也都是幂等的。即GET幂等,POST不幂等。

5.HTTP头部header

有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。

通用首部字段

Cache-Control

控制缓存的行为

Connection

控制不再转发给代理的首部字段、管理持久连接

Date

创建报文的日期时间

Pragma

报文指令

Trailer

报文末端的首部一览

Transfer-Encoding

指定报文主体的传输编码方式

Upgrade

升级为其他协议

Via

代理服务器的相关信息

Warning

错误通知

6.HTTP各版本的比较

1.HTTP/1.0 和 HTTP/1.1 有什么区别?

  • 连接方式 : HTTP/1.0 为短连接,HTTP/1.1 支持长连接。
  • 状态响应码 : HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。
  • 缓存机制 : 在 HTTP/1.0 中主要使用 Header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP/1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  • 带宽:HTTP/1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP/1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • Host 头(Host Header)处理 :HTTP/1.1 引入了 Host 头字段,允许在同一 IP 地址上托管多个域名,从而支持虚拟主机的功能。而 HTTP/1.0 没有 Host 头字段,无法实现虚拟主机。

长连接和短连接的区别

HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。

1.什么是长连接和短连接

长连接:客户端与服务端先建立连接,连接建立后不断开,然后再进行报文交易。适用于操作频繁、点对点通讯,如数据库的连接。

短连接:客户端与服务端每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯,如web网站的http服务·。

2.操作步骤区别:

短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接长连接的操作步骤是:建立连接——数据传输…(保持连接)…数据传输——关闭连接

3.使用场景区别:

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个 TCP 连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就 OK 了,不用建立 TCP 连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成 socket 错误,而且频繁的 socket 创建也是对资源的浪费。

而像 WEB 网站的 http 服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像 WEB 网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

2.HTTP/1.1 和 HTTP/2.0 有什么区别?

HTTP/1.0 和 HTTP/1.1 对比

  • 多路复用(Multiplexing):HTTP/2.0 在同一连接上可以同时传输多个请求和响应(可以看作是 HTTP/1.1 中长链接的升级版本),互不干扰。HTTP/1.1 则使用串行方式,每个请求和响应都需要独立的连接,而浏览器为了控制资源会有 6-8 个 TCP 连接都限制。。这使得 HTTP/2.0 在处理多个请求时更加高效,减少了网络延迟和提高了性能。
  • 二进制帧(Binary Frames):HTTP/2.0 使用二进制帧进行数据传输,而 HTTP/1.1 则使用文本格式的报文。二进制帧更加紧凑和高效,减少了传输的数据量和带宽消耗。
  • 头部压缩(Header Compression):HTTP/1.1 支持Body压缩,Header不支持压缩。HTTP/2.0 支持对Header压缩,使用了专门为Header压缩而设计的 HPACK 算法,减少了网络开销。
  • 服务器推送(Server Push):HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数和延迟。而 HTTP/1.1 需要客户端自己发送请求来获取相关资源。

3.HTTP/2.0 和 HTTP/3.0 有什么区别?

HTTP/2.0 和 HTTP/3.0 对比

  • 传输协议:HTTP/2.0 是基于 TCP 协议实现的,HTTP/3.0 新增了 QUIC(Quick UDP Internet Connections) 协议来实现可靠的传输,提供与 TLS/SSL 相当的安全性,具有较低的连接和传输延迟。你可以将 QUIC 看作是 UDP 的升级版本,在其基础上新增了很多功能比如加密、重传等等。HTTP/3.0 之前名为 HTTP-over-QUIC,从这个名字中我们也可以发现,HTTP/3 最大的改造就是使用了 QUIC。
  • 连接建立:HTTP/2.0 需要经过经典的 TCP 三次握手过程(由于安全的 HTTPS 连接建立还需要 TLS 握手,共需要大约 3 个 RTT)。由于 QUIC 协议的特性(TLS 1.3,TLS 1.3 除了支持 1 个 RTT 的握手,还支持 0 个 RTT 的握手)连接建立仅需 0-RTT 或者 1-RTT。这意味着 QUIC 在最佳情况下不需要任何的额外往返时间就可以建立新连接。
  • 队头阻塞:HTTP/2.0 多请求复用一个 TCP 连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求。由于 QUIC 协议的特性,HTTP/3.0 在一定程度上解决了队头阻塞(Head-of-Line blocking, 简写:HOL blocking)问题,一个连接建立多个不同的数据流,这些数据流之间独立互不影响,某个数据流发生丢包了,其数据流不受影响(本质上是多路复用+轮询)。错误恢复:HTTP/3.0 具有更好的错误恢复机制,当出现丢包、延迟等网络问题时,可以更快地进行恢复和重传。而 HTTP/2.0 则需要依赖于 TCP 的错误恢复机制。安全性:HTTP/2.0 和 HTTP/3.0 在安全性上都有较高的要求,支持加密通信,但在实现上有所不同。HTTP/2.0 使用 TLS 协议进行加密,而 HTTP/3.0 基于 QUIC 协议,包含了内置的加密和身份验证机制,可以提供更强的安全性。

7.在浏览器中输入 URL 地址到显示主页的过程?

  • DNS 解析:浏览器查询DNS把域名解析成 IP 地址
  • TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手
  • 发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
  • 浏览器解析渲染页面
  • 断开连接:TCP 四次挥手断开连接

在浏览器中输入 https的URL 地址到显示主页的过程?

当在浏览器中输入一个以https开头的URL地址后,会经过以下一系列过程才会显示主页:

  1. DNS解析:浏览器首先会对输入的URL进行解析,然后通过DNS(域名系统)将域名解析成对应的IP地址。这一过程确定了将要访问的服务器的具体位置。
  2. 建立TCP连接:浏览器与服务器之间建立一个TCP连接,这个过程通常被称为TCP三次握手。这个连接确保了数据能够安全地在用户和服务器之间传输。
  3. SSL/TLS协议:由于是https连接,所以在数据传输前会进行SSL/TLS握手,以确保通信加密和服务器身份验证。这是为了保障用户信息的安全,防止数据在传输过程中被窃取或篡改。
  4. 发送HTTP请求:一旦安全连接建立,浏览器会向服务器发送一个HTTP请求,请求中包含了想要获取的资源(如HTML页面、图片、脚本文件等)。
  5. 服务器处理请求:服务器接收到请求后,根据请求的内容进行处理,并返回相应的HTTP响应,这通常包括了请求的网页内容以及可能关联的资源文件。
  6. 浏览器解析渲染:浏览器接收到从服务器返回的数据后,开始解析这些数据,并将其渲染成用户可见的页面。这包括了解析HTML、CSS以及执行JavaScript代码等。
  7. 断开连接:页面渲染完成后,浏览器和服务器之间的TCP连接不会立即关闭,而是会在一段时间无活动后通过TCP四次挥手来断开连接。

8.HTTPS

0.简单说下 HTTPS 和 HTTP 的区别

Http协议运行在TCP之上,明文传输(不安全),客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:

1、端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443;

2、资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;

3、开销:Https通信需要SSL证书,而证书一般需要向认证机构购买; 4、安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TLS+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全

1.什么是HTTPS?

HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

1.加密(对称加密和非对称加密)

加密分为对称密匙加密和非对称密匙加密2种。

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。

优点: 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

缺点: 没有非对称加密安全.

用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。

常见的对称加密算法有: AES、HS256

非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

**优点: ** 非对称加密与对称加密相比,其安全性更好;

缺点: 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或者签名的解密或者校验使用.

常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用SHA-256 的 RSA 签名)

HTTPS

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

抽象带蓝子的八股大全专栏 文章被收录于专栏

我的笔记专栏,内有自己整理的八股知识笔记和算法刷题笔记,我会不断通过他人和自己的面经来更新和完善自己的八股笔记。专栏每增加一篇文章费用就会上涨一点,如果你喜欢的话建议你尽早订阅。内有超详细苍穹外卖话术!后续还会更新其他项目和我的实习经历的话术!敬请期待!

全部评论
大佬牛逼
1 回复 分享
发布于 2024-01-31 19:23 北京
不愧是带篮子哥,真佬
1 回复 分享
发布于 2024-02-02 09:58 辽宁
本文已收录进我的八股笔记专栏,欢迎大家订阅。
1 回复 分享
发布于 2024-02-03 14:51 湖北
11.9日已更新,订阅我专栏后可进入我的专栏里用md格式侧边栏看该笔记体验感更好!
1 回复 分享
发布于 2024-11-09 11:23 湖南
点赞 回复 分享
发布于 2024-01-30 00:34 四川
谢谢你,篮子
点赞 回复 分享
发布于 2024-03-18 12:59 北京
nb
点赞 回复 分享
发布于 2024-03-19 01:23 北京
支持篮子哥
点赞 回复 分享
发布于 2024-11-10 12:34 广东
篮子哥nb
点赞 回复 分享
发布于 2024-11-11 19:04 广东

相关推荐

2024-11-16 11:50
已编辑
门头沟学院 golang
点赞 评论 收藏
分享
评论
48
264
分享
牛客网
牛客企业服务