http://taowusheng.cn/2020/08/03/20200803%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86_%E7%BD%91%E7%BB%9C/

https://blog.nowcoder.net/jiangwenbo

网络基础

  1. 说说计算机网络有哪两种通信方式?⭐⭐⭐
  2. 什么是分组交换?优缺点?⭐⭐⭐
  3. 请说说OSI七层协议模型?⭐⭐⭐⭐
  4. 请说说TCP/IP四层分层模型?⭐⭐⭐⭐
  5. 请说说TCP/IP四层分层模型,每个分层说两个协议。⭐⭐⭐⭐⭐
  6. TCP与UDP的区别?⭐⭐⭐⭐⭐
  7. TCP头部包含哪些内容?⭐⭐⭐⭐

TCP挥手和握手

  1. TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐
  2. TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐
  3. 说说TCP三次握手的过程。⭐⭐⭐⭐⭐
  4. 说说TCP四次挥手的过程。⭐⭐⭐⭐⭐
  5. 为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐
  6. 什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐
  7. 如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐
  8. 说说TCP的可靠机制。⭐⭐⭐⭐⭐
  9. 请说说TCP的ACK机制,有什么好处?⭐⭐⭐⭐⭐
  10. 如何让UDP也变得可靠?⭐⭐⭐⭐⭐
  11. 一台服务器到底能够支持多少TCP并发连接呢?
  12. TCP重传机制有哪些?

socket编程

  1. 请说说socket网络编程的步骤。⭐⭐⭐⭐
  2. 请说说socket网络编程的接口。⭐⭐⭐⭐
  3. 什么是TCP粘包现象?⭐⭐⭐⭐⭐
  4. 为什么会出现粘包现象?如何解决?⭐⭐⭐⭐⭐
    https://zhuanlan.zhihu.com/p/359177898
  5. 为什么UDP不粘包⭐⭐⭐⭐⭐
  6. 什么是封包和解包?⭐⭐⭐⭐⭐

Http和Https

https://zhuanlan.zhihu.com/p/72616216

1.请说说HTTP的工作原理。⭐⭐⭐⭐⭐

当用户在浏览器的地址栏里输入所要访问web页面的URL以后,HTTP的处理即会开始。HTTP中默认使用80端口。

它的工作机制是:首先是客户端向服务器的80端口建立一个TCP连接,然后在这个TCP连接上进行请求和应答以及数据报文的发送

在浏览器地址栏键入URL,按下回车之后会经历哪些流程?⭐⭐⭐⭐⭐

http://www.dailichun.com/2018/03/12/whenyouenteraurl.html

https://blog.nowcoder.net/n/e1fd9e5ae5a549c39d46f79599dad5c9

请你说说HTTP请求包含哪些内容?⭐⭐⭐⭐⭐

HTTP请求报文由3部分组成,

请求行

①请求方式:GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。

②请求对应的URL地址:它和报文头的Host属性组成完整的请求URL。

③协议名称和版本号。

请求头:

④报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。

与缓存相关的规则信息,均包含在header中

请求体:

⑤http报文体,它将一个页面表单中的组件值通过编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

HTTP请求报文头属性

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e3eb639a-d6f9-4b37-a28c-b9dafd8a52f0/Untitled.png

请说说有哪些请求方法?⭐⭐⭐⭐⭐

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

请求方法

get和post的区别是什么?⭐⭐⭐⭐⭐

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/096b4de6-8053-4bfc-8755-ef4f114fa37b/Untitled.png

从标准上来看,GET 和 POST 的区别如下:

  • GET 用于获取信息,是无副作用的,是幂等的,且可缓存
  • POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存

请你说说HTTP状态码⭐⭐⭐⭐⭐

1xx

(Informational) 信息性状态码,表示正在处理。

2xx

(Success) 成功状态码,表示请求正常。

  • 200 ok 请求被成功处理。
  • 204 No Content 该状态码表示服务器接收到的请求已经处理完毕,但是服务器不需要返回响应体。
  • 206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

3xx

(Redirection) 重定向状态码,表示客户端需要进行附加操作。

  • 301 Moved Permanently 永久性重定向。
  • 302 Found 临时性重定向。

4xx

(Client Error) 客户端错误状态码,表示服务器无法处理请求。

  • 400 Bad Request 指出客户端请求中的语法错误。
  • 401 Unauthorized 该状态码表示发送的请求需要有认证。
  • 403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
  • 404 Not Found 该状态码表明服务器上无法找到指定的资源。

5xx

(Server Error) 服务器错误状态码,表示服务器处理请求出错。

  • 500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。
  • 502 Bad Gateway 该状态码表明服务器网关错误。
  • 503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

https://zhuanlan.zhihu.com/p/31771158

请说说HTTP响应头有哪些内容?⭐⭐⭐⭐⭐

服务端响应客户端格式:

  • 状态行
  • 响应头
  • 响应体

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2c12d4d1-e318-47ac-a7f3-7c7ca830038a/Untitled.png

请说说HTTP协议的特点⭐⭐⭐⭐⭐

1)支持客户/服务器模式。

2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP的无连接是什么意思?⭐⭐⭐⭐

1
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

HTTP的无状态是什么意思?⭐⭐⭐⭐

1
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP1.0、HTTP1.1的区别⭐⭐⭐⭐

https://zhuanlan.zhihu.com/p/85093818

什么是长连接?⭐⭐⭐⭐⭐

https://zhuanlan.zhihu.com/p/26868716

HTTP2.0有哪些改动?⭐⭐⭐

一、多路复用的单一长连接

1.单一长连接

在HTTP/2中,客户端向某个域名的服务器请求页面的过程中,只会创建一条TCP连接,即使这页面可能包含上百个资源。 单一的连接应该是HTTP2的主要优势,单一的连接能减少TCP握手带来的时延 。HTTP2中用一条单一的长连接,避免了创建多个TCP连接带来的网络开销,提高了吞吐量。

2.多路复用

HTTP2虽然只有一条TCP连接,但是在逻辑上分成了很多stream。

HTTP2把要传输的信息分割成一个个二进制帧,首部信息会被封装到HEADER Frame,相应的request body就放到DATA Frame,一个帧你可以看成路上的一辆车,只要给这些车编号,让1号车都走1号门出,2号车都走2号门出,就把不同的http请求或者响应区分开来了。但是,这里要求同一个请求或者响应的帧必须是有有序的,要保证FIFO的,但是不同的请求或者响应帧可以互相穿插。这就是HTTP2的多路复用,是不是充分利用了网络带宽,是不是提高了并发度?

二、头部压缩和二进制格式

http1.x一直都是plain text,对此我只能想到一个优点,便于阅读和debug。但是,现在很多都走https,SSL也把plain text变成了二进制,那这个优点也没了。

于是HTTP2搞了个HPACK压缩来压缩头部,减少报文大小(调试这样的协议将需要curl这样的工具,要进一步地分析网络数据流需要类似Wireshark的http2解析器)。

三、服务端推动Sever Push

这个功能通常被称作“缓存推送”。主要的思想是:当一个客户端请求资源z,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。

这个功能帮助客户端将Z放进缓存以备将来之需。

HTTPS的加密原理⭐⭐⭐⭐⭐

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/61ce1f5d-44b2-4426-9c3c-ddd0e3f89d92/QQ20210406150035.jpg

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b7181624-5032-4e4e-a379-090f4871c0f9/Untitled.png

1、客户端发起HTTPS请求

这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

2、服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。

这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3、传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4、客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5、传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6、服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7、传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

8、客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。

什么是对称加密?什么是非对称加密?两者区别?⭐⭐⭐⭐

对称加密:对称加密是指加密,解密使用同一把秘钥。(秘钥容易泄露)

非对称加密:客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以对外暴露,而私有密匙只有自己可见。使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。这样客户端在发送消息前,先用服务器的公匙对消息进行加密,服务器收到后再用自己的私匙进行解密。

优点

  1. 非对称加密采用公有密匙和私有密匙的方式,解决了http中消息保密性问题,而且使得私有密匙泄露的风险降低。
  2. 因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性。非对称加密的缺点:
  3. 非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不是保密的,任何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以在客户端与服务器交换公匙的时候,将客户端的公匙替换成自己的。这样服务器拿到的公匙将不是客户端的,而是中间人的。服务器也无法判断公匙来源的正确性。第二件是中间人可以不替换公匙,但是他可以截获客户端发来的消息,然后篡改,然后用服务器的公匙加密再发往服务器,服务器将收到错误的消息。
  4. 非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。