之前学习的知识点都是很零碎的所以我这里边复习、边整理会一直持续更新。计算机网络HTTP是什么常见的状态码有哪些常见的字段有哪些HTTP(1.1)的优点有哪些HTTP(1.1)的缺点有哪些HTTP/1.1的性能如何HTTP缓存有哪些实现方式如何避免发送http请求HTTP 与 HTTPS 有哪些区别HTTP/1.1 相比 HTTP/1.0 提高了哪些性能HTTP/2 做了什么优化HTTP/3 做了什么优化为什么有了HTTP还需要RPC既然有了HTTP为什么还要有Websocket拓展为啥有了HTTP、RPC这些还需要TCP什么是TCP简单说一下 TCP 三次握手简单说一下四次挥手的整个过程TCP建立连接为什么是三次握手断开为什么是四次挥手三次握手能不能改成两次为什么TIME_WAIT 状态是什么为什么需要等待 2MSL什么是 SYN 洪水攻击原理是什么怎么防护Go 开发中遇到大量TIME_WAIT 导致端口占用怎么解决。HTTP是什么是超文本传输协议。协议大家共同遵守的。传输两点之间数据进行交互。超文本不是普通的文本可以携带文字、图片、音频、超链接等…常见的状态码有哪些1XX: 代表中间信息不常用2XX: 回复成功3XX: 需要重定向4XX: 源于客户端的错误。如400一个笼统的错误、403没权限、404没资源5XX 源于服务器的错误。如500也是一个笼统错误、501暂时没功能、502服务器出错但是网关没问题、503服务繁忙常见的字段有哪些content-length表示发送的请求体/响应体的具体大小让接收方知道消息边界connection用来建立长连接Keep-Alivecontent-type代表发过去的是数据类型如 application/json…等等HTTP(1.1)的优点有哪些简单headbody头部身体简单容易理解。可拓展传输协议并没有被顶死可以根据需求对头部进行自定义新增。应用广泛大家几乎都支持这套协议。HTTP(1.1)的缺点有哪些无状态虽然无记忆携带的东西减少从而服务器的压力就少了一点。但是也正因为无记忆导致很难进行连贯性操作。明文传输可能被截取、监听、篡改等风险。队头阻塞在一条长连接里后续的http请求必须等待前方的http请求结束。Header冗余每次都必须带上全量Header。HTTP/1.1的性能如何因为HTTP是基于TCP/IP协议做的并且是请求-响应模式所以性能也就体现在他们身上。HTTP/1.1 支持长连接也就意味着不需要频繁的三次握手与四次挥手。所以大家可以复用这条连接。HTTP缓存有哪些实现方式如何避免发送http请求HTTP 缓存分为强缓存和协商缓存。强缓存是在缓存未过期时直接使用本地缓存不请求服务器协商缓存是在缓存过期后向服务器确认资源是否发生变化。如果没变服务器返回 304浏览器继续使用本地缓存如果变了服务器返回 200 和新的资源内容。第一种协商是last_modified先问服务器最后一次修改资源的时间边了没。第二种协商采用的Etag指纹通过唯一的资源标识如果Etag没变返回时返回304就行了。HTTP 与 HTTPS 有哪些区别1、HTTP是明文传输不安全HTTPS经SSL/TLS进行加密传输更安全。2、HTTP只需要经TCP三次握手后就能通信了。HTTPS在三次握手后还需要经过TLS四次握手进行加密。3、HTTPS需要向CA权威证书机构申请证书。HTTPS 解决了 HTTP 哪些问题解决了窃听风险、篡改风险、冒充风险。HTTPS 是如何建立连接的我用的是 tls1.2 中的 RSA 密钥交换的流程进行解释。HTTPS会在 TCP 三次握手之后。进行TLS4次握手。中间涉及了对称加密算法和非对称加密算法。详细过程是1、客户端会先对服务器发送一个随机数、他的tls版本号 与 支持的密码列表。2、服务器收到后会返回一个随机数、确定的tls版本号、所需的加密算法 与 服务器证书。3、客户端收到后会先验证服务器证书是否是伪造的然后在生成一个随机数生成预主密钥用证书中的公钥进行加密发回服务器。4、服务器接收之后先对密文解密然后前将两次随机数与预主密钥一同算出密钥。客户端进行同样操作。之后就可以进行http传输了但内容是被对称加密算法加密过的。HTTP/1.1 相比 HTTP/1.0 提高了哪些性能1、可以建立长连接避免了频繁的tcp握手挥手2、可以建立管道并发发送http但是仍没有解决1、发送的请求头仍会冗余2、头部仍然用的文本格式而非二进制。3、并发时可能会发生队头阻塞这种事4、请求只能从客户端发往服务器HTTP/2 做了什么优化1、头部压缩通过HPACK机制服务器/客户端共同维护一张信息表然后通过索引号来代替某些重复的字段之后只要用这个索引号就知道是某个字段从而减少了冗余。2、将报文拆分成二进制帧比如拆成头帧与数据帧这样可以降低文本解析成本。3、并发传输在复用一个TCP连接的前提下可以承载多个stream流每个stream的帧之间可以交错传输。解决了http/1在应用层的队头阻塞问题但在TCP层因为丢包导致的队头阻塞问题却无法解决。4、http/2 允许客户端请求后主动推送资源。但是不能替代业务上的实时推送。因为这不是双全工。帧可以了解为计算机网络中 一个标准的数据包。HTTP/3 做了什么优化干脆直接抛弃了TCP选择拥抱UDP。为了解决UDP的不可靠性所以采用了QUIC协议。因为 QUIC 无队头阻塞、建立连接更快。为什么有了HTTP还需要RPC其实rpc出现的比http要早在70年代的时候就有了TCP但是当时还没有http协议所以就有各种rpc。rpc它本身并不是一种协议而是一种函数调用。像grpc这种才是具体实现他的协议。早期http主要用于b/s架构、rpc主要用于c/s架构但是后来因为b/s和c/s慢慢融合很多软件同时支持多端所以一般对外一致用http协议rpc则退居幕后微服务之间则更多采用rpc协议进行通信。并且http与rpc并不是竞争关系像一些rpc直接就是基于http实现的因为rpc更多的是一种函数调用思想。既然有了HTTP为什么还要有Websocket这是两种不同的东西websocket是双全工。是一种保持双向通信的协议。一般会在建立http通信后再次握手升级为websocket通信。拓展为啥有了HTTP、RPC这些还需要TCP虽然TCP可以收发消息但因为TCP是无边界的数据流。所以需要http、tcp这种上层协议去划分边界。什么是TCP面向连接的可靠的字节流。所谓面向连接他是由四元组造就的源端口源ip目标端口目标ip。所以他是一对一没法像UDP那样广播。可靠则是他通过序列号ack、超时重传…等机制尽量确保可以安全传输否则就明确表示失败。简单说一下 TCP 三次握手TCP是面向连接的双全工协议其本意是建立确定双方的收发能力防止无效连接干扰。1、第一次握手是客户端到服务端发送一个syn的同步报文与一个随机数告诉服务器说我要建立连接。然后将状态从关闭态变为同步已发送状态。2、之后进入第二次握手是服务器到客户端发送一个syn同步报文与ack报文seqyackk1并将自身状态从监听置为同步已接收状态。3、最后一次是客户端到服务器收到之后回复一个确定ack报文并将状态置为连接就绪状态同时服务器收到ack报文后也置为连接就绪状态。简单说一下四次挥手的整个过程TCP四次挥手是为了保证双方将消息全部传输完毕。第一次挥手客户端给服务器发送一个fin结束报文然后将状态置为终止等待态。第二次挥手服务器给客户端发送一个ack报文然后将自己的状态置为关闭等待态。可以继续发送剩余数据。第三次挥手服务器给客户端等剩余数据传输完毕之后发送一个fin结束报文。第四次挥手客户端给服务器收到fin报文之后返回服务器一个ACK报文再经过2个最大报文生存时间2MSL后关闭。TCP建立连接为什么是三次握手断开为什么是四次挥手建立三次握手为了确保两者彼此确定在建立通道避免建立无效连接从而导致资源浪费。四次挥手是为了让服务器可以将剩余信息发送完毕。三次握手能不能改成两次为什么不行若改为两次当服务器发送的synack报文因为网络原因丢失后客户端无法接收到消息最终导致服务器白白维持这个连接。假如此时客户端又重新发送了一次因为一个端口可以建立多条连接所以之前的那个仍会白白维持。直到超时结束TIME_WAIT 状态是什么为什么需要等待 2MSL服务器与客户端两者都可以主动结束而time_wait是在结束的一方。2MSL自动关闭因为需要确保被通知的一方有足够的时间接收到ACK报文若没有接收到消息则服务器有足够的时间在发送一个fin报文。MSL 全称是Maximum Segment Lifetime 报文最大生存时间什么是 SYN 洪水攻击原理是什么怎么防护其实就是一场针对传输层的攻击。攻击者通过一大堆伪造的ip进行synack一次握手而不进行ACK回复从而让服务器的一直处于syn_recv同步已接收态。造成资源耗尽。可以调大backlog队列长度也可以通过防火墙限制ip的请求频率。Go 开发中遇到大量TIME_WAIT 导致端口占用怎么解决。time_wait太多就是因为频繁的连接与断开。1、可以考虑用长连接代替短连接。2、可以考虑用连接池避免频繁建立与断开连接。但是不建议把time_wait调小的方式因为这本身就是一种保护行为。