计算机网络

一、http状态码

2xx:成功

200:请求成功。一般用于GET与POST请求。

201:已创建。成功请求并创建了新的资源。请求已被实现,而且有一个新的资源已经依据请求的需要而建立(通常是在 POST 或 PUT 请求之后)。

202:已接受。已经接受请求,但未处理完成。最终该请求可能会也可能不会被执行。

3xx:重定向

301:永久重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。未来任何新的请求都应使用新的URI代替。

302:临时重定向。但资源只是临时被移动到新URI,客户端本次使用新的URI。未来的请求客户端应继续使用原有URI。

304 : 未修改。用于缓存控制。客户端发送带条件的 GET 请求(例如 If-Modified-Since)后,如果资源自指定时间以来未被修改,服务器会返回此状态码,告诉客户端直接使用本地缓存版本。

4xx:客户端错误

400:客户端请求的语法错误,服务器无法理解。

401:未授权。请求需要用户认证。客户端必须提供认证信息(如用户名/密码)。通常第一次返回时,会带有 WWW-Authenticate 头,提示客户端如何认证。

403:资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

404:未找到。服务器无法找到请求的资源。这是最常见的错误码之一,通常是因为 URL 拼写错误或资源已被删除。

5xx:服务端错误

500:服务器内部错误,无法完成请求。服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。可能是代码 Bug、数据库连接失败等。

501:服务器不支持请求的功能,无法完成请求。

502:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。

503:服务不可用。服务器当前无法处理请求(由于超载或停机维护)。通常,这是临时状态,可能伴随 Retry-After 头告知客户端何时可以重试。

504:网关超时。作为网关或代理的服务器,未能及时从上游服务器收到响应。

二、HTTP请求报文由3部分组成(请求行+请求头+请求体):

常见的请求头包括:

  • Host:指定请求的服务器的域名和端口号(HTTP/1.1必需字段)。Host: www.example.com

  • User-Agent:告诉服务器客户端的类型(浏览器、操作系统等)。User-Agent: Mozilla/5.0...

  • Accept:声明客户端可以处理的内容类型。Accept: text/html,application/json

  • Content-Type:(通常在请求体中有时才有)声明请求体的媒体类型。Content-Type: application/json

  • Content-Length:声明请求体的长度(以字节为单位)。

  • Authorization:包含用于验证客户端身份的凭证(如Token)。Authorization: Bearer <token>

  • Cookie:将之前服务器通过Set-Cookie发送的cookie返回给服务器。

请求体是报文最后一部分,并不是所有请求都有请求体。它用于携带需要发送给服务器的数据。

  • GETHEADDELETEOPTIONS 等方法通常没有请求体。

  • POSTPUTPATCH 等方法通常请求体,用于提交表单数据、上传文件或发送API参数。

请求体中数据的格式由 Content-Type 头来指定。

  • application/x-www-form-urlencoded:普通的表单数据。key1=value1&key2=value2

  • application/json:JSON格式的数据。{"username": "john", "age": 30}

  • multipart/form-data:用于上传文件。

请注意,在请求头和请求体之间,有一个空行(CRLF),这是必不可少的,因为它用来分隔报文的首部和主体。

三、http和https的区别

Http协议运行在TCP之上,明文传输

Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP

  • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通信需要证书,而证书一般需要向认证机构购买;

四、对称加密和非对称加密

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

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

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

HTTPS采用对称加密+非对称加密

  1. 用非对称加密的安全性来交换一个对称密钥

  2. 用对称加密的高效率来加密实际传输的数据

发送密文的一方使用对方的公钥进行加密处理“对称密钥”,然后对方用自己的私钥解密拿到“对称密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。

五、数字证书

客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密服务端发过来的签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的。

六、https工作流程

javascript - 深入理解HTTPS工作原理 - 前端工匠公众号 - SegmentFault 思否

preview

1.客户端发起一个HTTPS请求,先建立TCP连接,TCP连接成功,双方可以开始进行TLS握手。

2.客户端向服务器发送一条消息,内容包括TLS协议版本、客户端生成的随机数、支持的密码套件列表等。

3.服务器端响应客户端,内容包括TLS协议版本、服务端生成的随机数、从客户端列表中选择的一个密码套件、服务器的 SSL 证书

3.客户端验证SSL证书:比如是否在有效期内,是否由可信的证书颁发机构(CA) 签发,域名是否与访问的域名一致,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。

4.客户端使用伪随机数生成器生成对称密钥,然后用SSL证书的公钥加密这个对称密钥,发送给服务器端。

5.服务器端使用自己的私钥解密这个消息,得到对称密钥。至此,客户端和服务器端r双方都持有了相同的对称密钥。

6.服务器端使用对称密钥加密“明文内容A”,发送给Client。7.客户端使用对称密钥解密响应的密文,得到“明文内容A”。

8.客户端再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后服务器端使用对称密钥解密密文,得到“明文内容B”。

七、TCP与UDP的区别

特性TCP (传输控制协议)UDP (用户数据报协议)
连接性面向连接的
传输数据前必须三次握手建立连接
无连接的
无需建立连接,直接发送数据
可靠性可靠的
通过确认应答、重传机制、流量控制、拥塞控制确保数据不丢失、不重复、无差错、按序到达
不可靠的
尽最大努力交付,不保证数据一定到达,可能丢失、乱序
首部开销 (20-60字节)
包含大量控制信息(序列号、确认号、窗口大小等)
 (8字节)
只有源端口、目的端口、长度、校验和
传输速度
由于建立连接、确认、重传等机制,延迟较高

没有控制开销,延迟低,实时性好
数据顺序保证顺序
通过序列号和排序机制,接收方收到的数据是有序的
不保证顺序
即使发送有序,也可能乱序到达
拥塞控制
复杂的算法(慢启动、拥塞避免等)来适应网络状况,避免网络瘫痪

无论网络是否拥堵,都以恒定速率发送数据
通信模式点对点
一条TCP连接只能有两个端点(一对一)
支持一对一、一对多、多对多
支持广播和多播

八、TCP三次握手与四次挥手

(1). 三次握手(我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功):

首先,是三次握手,它的目的是在通信双方之间同步序列号建立一条可靠的连接

  • 第一步:客户端发送一个 SYN 包SYN=1)到服务器,并选择一个初始序列号 seq = J(随机)。此时客户端进入 SYN-SENT 状态。

  • 第二步:服务器收到SYN包后,如果同意连接,会回复一个 SYN+ACK 包SYN=1, ACK=1)。这个包包含两个信息:一是服务器自己的初始序列号 seq = K(随机),二是对客户端SYN的确认 ack = J + 1。此时服务器进入 SYN-RCVD 状态。

  • 第三步:客户端收到服务器的SYN+ACK包后,会再发送一个 ACK 包ACK=1)进行最终确认。包中的确认号 ack = K + 1。服务器收到这个ACK后,双方就都进入 ESTABLISHED 状态,连接建立成功,可以开始数据传输。

为什么TCP链接需要三次握手,两次不可以么,为什么

为了防止 已失效的链接请求报文突然又传送到了服务端,导致错误和资源浪费。

  假设只有两次握手。客户端发送了一个SYN请求,但这个包在网络中滞留了(旧SYN包)。客户端超时后重发了一个新的SYN包并成功建立连接。传输完成后,连接关闭。此时,那个旧SYN包终于到达了服务器,服务器会认为这是一个新的连接请求,于是回复SYN-ACK并分配资源等待客户端数据传输。但客户端并不会理会这个回应,导致服务器的资源被白白浪费,一直空等。

(2). 四次挥手(我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧):

  • 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。

  • 第二次挥手:服务器端收到FIN后,发送一个ACK确认包给客户端,服务器端进入CLOSE_WAIT状态,客户端收到ACK后进入 FIN-WAIT-2 状态。此时TCP链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务器端若发送数据,则客户端仍要接收。

  • 第三次挥手:服务器端发送一个FIN,用来关闭服务器端到客户端的数据传送服务器端进入LAST_ACK状态。

  • 第四次挥手:客户端收到服务器的FIN包后,发送一个 ACK 包 进行确认,然后进入 TIME-WAIT 状态。服务器收到这个ACK后,就立即关闭连接。客户端会等待 2MSL(两倍报文最大生存时间)后,才最终关闭连接。

为什么客户端最后要等待2MSL

MSL 的定义:MSL (Maximum Segment Lifetime) 是报文最大生存时间。任何IP数据包在网络中存活的时间都不能超过这个值,超过的报文都会被网络设备丢弃。

  • 服务器重传的FIN报文(最多经过1MSL到达客户端)。
  • 客户端重传的ACK报文(最多经过1MSL到达服务器)。
  1. 保证连接可靠关闭:最后这个ACK包可能会丢失。如果客户端直接关闭,服务器会因收不到ACK而超时重传FIN包。处于 TIME-WAIT 状态的客户端收到重传的FIN后,可以重发ACK,确保服务器能正常关闭。

  2. 让旧报文在网络中消散:在网络状况复杂的情况下,一个连接中发送的报文可能会被延迟,假设我们关闭了一个连接(源IP、源端口、目的IP、目的端口这个四元组完全相同),然后又立即在原地址和原端口上建立了一个全新的连接。那个迟到的、属于旧连接的报文可能会被新连接接收,并被错误地解释为属于新连接的数据,造成数据混乱。等待2MSL时间,足以保证两个方向上的报文都已经完全消逝。

十、TCP协议如何来保证传输的可靠性

       消除重复数据:接收方可以根据序列号丢弃重复的数据包。

       保证数据有序:接收方可以根据序列号将乱序到达的数据包重新排序,再提交给应用层。

       确认应答 (ACK):接收方收到数据后,必须向发送方发送一个确认报文(ACK包)。这个             ACK包中带有一个确认号,其值为 “期望收到的下一个字节的序列号”。通过这种方式,发送           方可以明确知道哪些数据已经被对方成功接收。

  • 序列号与确认应答机制:

    序列号 (Seq Number):TCP为每一个发送的字节都分配一个唯一的序列号。

  • 超时重传机制:

    发送方在发送一个数据包后,会启动一个定时器 (Timer)

            1.如果在定时器超时 (Timeout) 之前,收到了对应数据的ACK,则定时器取消。

            2.如果直到定时器超时,还没有收到ACK,发送方就认为数据包已经丢失,会重新发送这个数据包

    智能的超时时间:TCP的超时时间(RTO, Retransmission Timeout)不是固定的,而是动态计算的。它根据数据包往返时间(RTT, Round-Trip Time)来自适应调整。如果网络延迟大,RTO就变大;如果网络畅通,RTO就变小,从而优化了重传效率。

  • 连接管理机制:在传输数据之前,TCP必须通过三次握手建立可靠的连接,传输结束后通过四次挥手来可靠地断开连接。这确保了通信双方都做好了传输和接收的准备,并且所有数据都已经处理完毕。

  • 流量控制机制:

    这是为了解决发送方接收方之间速度不匹配的问题,防止发送过快导致接收方缓冲区溢出。

    实现方式:滑动窗口 (Sliding Window)

    接收方在每次发送ACK时,都会在TCP首部中的窗口大小 (Window Size) 字段告知发送方自己当前接收缓冲区的剩余空间大小(即接收能力)。

    发送方会根据这个窗口值,动态调整自己发送数据的速度和数量,确保不会发送超过接收方处理能力的数据。

  • 拥塞控制机制:通过慢启动、拥塞避免、快速重传和快速恢复算法,动态探测并适应网络带宽,防止发送过快导致网络拥堵。

十一、TCP的拥塞处理

这是为了解决发送方网络之间速度不匹配的问题,防止发送过快导致网络链路拥堵甚至瘫痪。它是TCP最复杂的部分之一,主要包括四个算法:

  • 1). 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;

    2). 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。   

    3). 快速重传:如果发送方连续收到3个重复的ACK,就推断某个数据包丢失了,而不必继续等待设置的重传计时器时间到期。

    4). 快速恢复:在快速重传之后,不会像超时重传那样将cwnd直接重置为1,而是执行“乘法减小”,将cwnd设置为新的阈值(通常是当前值的一半),然后直接进入拥塞避免阶段,让性能恢复得更平滑。

十三、Get与POST的区别

特性GETPOST
语义 (Semantics)获取(Safe, Idempotent)提交/处理(Non-Idempotent)
参数位置URL 的查询字符串 (Query String)请求体 (Request Body)
数据大小限制有(受限于URL长度,通常几KB)理论上无限制
安全性参数在URL中明文显示,不安全参数在请求体中,相对安全(但仍需HTTPS加密)
缓存与书签可被缓存可收藏为书签默认不被缓存、不可收藏为书签
幂等性 (Idempotent)幂等(多次请求效果相同)非幂等(多次请求可能产生不同效果)
浏览器历史参数保留在浏览器历史中参数不会保存在浏览器历史中
TCP 数据包只产生一个 TCP 数据包(Header和Data一并发送)产生两个 TCP 数据包(先发 Header,再发 Data)

十四、Session 与 Cookie 的对比

特性CookieSession
存储位置客户端(浏览器)服务器端(内存、数据库、文件等)
安全性较低。数据存储在客户端,可能被查看、篡改或禁用。较高。敏感数据存储在服务器,客户端只看到无意义的ID。
生命周期可设置为浏览器会话级(关闭浏览器即失效)或持久化(通过 Expires 或 Max-Age 设置过期时间)通常依赖于客户端的Cookie(Session ID)生命周期,也可在服务器端设置过期时间(如用户一段时间无活动则失效)
存储容量(通常每个域名下最多4KB,且数量有限制,约50个)(理论上只受服务器内存限制,但过大会影响性能)
数据类型只支持字符串(key-value形式)支持任意数据类型(对象、数组等)
性能影响不占用服务器资源。但每次HTTP请求都会自动携带,增加带宽占用服务器内存或CPU(查询数据库)。服务器资源开销大,尤其用户量多时。
跨域支持可设置 Domain 和 Path 属性在一定范围内共享默认不支持跨域,因为Session ID的Cookie通常受同源策略限制

十五、DDoS攻击

DDoS攻击是一种通过海量恶意流量耗尽目标资源,使其无法提供正常服务的网络攻击。它的核心特点是‘分布式’,来源难以追踪和屏蔽。

常见的类型有三类:一是流量型攻击,如UDP Flood,目的是打满带宽;二是协议型攻击,如SYN Flood,目的是耗尽服务器连接资源;三是更高级的应用层攻击,如HTTP Flood,模拟用户行为,消耗CPU和数据库资源。

关于防御,我认为需要一个综合的方案:
首先,在架构上要做好基础工作,比如使用CDN、负载均衡来分散流量,并隐藏源站IP。
其次,技术上是核心,对于大流量攻击,最主要的方式是使用云端高防服务进行流量清洗。对于应用层攻击,则需要配置WAF速率限制策略。
最后,必须要有完善的监控告警和应急响应流程,以便在攻击发生时能快速发现并启动缓解措施。

“云端高防服务进行流量清洗” 的本质是:

通过DNS解析或IP牵引技术,将所有访问流量先引到具备超强带宽和清洗能力云端防护集群,在那里通过实时分析、智能算法和规则库将恶意攻击流量剥离并丢弃,最后仅将纯净的正常用户流量返回给源站服务器,从而保证业务在遭受海量DDoS攻击时依然稳定可用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值