0
点赞
收藏
分享

微信扫一扫

网络基础知识问答

常用的状态码

  • ​1XX​​ - 临时消息。服务器收到请求,需要请求者继续操作。
  • ​2XX​​ - 请求成功。请求成功收到,理解并处理。
  • ​3XX​​ - 重定向。需要进一步的操作以完成请求。
  • ​4XX​​ - 客户端错误。请求包含语法错误或无法完成请求。
  • ​5XX​​ - 服务器错误。服务器在处理请求的过程中发生了错误。

常见状态码:

​200 OK​​​ - 客户端请求成功
​​​301​​​ - 资源(网页等)被永久转移到其它URL
​​​302​​​ - 临时跳转
​​​400 Bad Request​​​ - 客户端请求有语法错误,不能被服务器所理解
​​​404 - 请求资源不存在​​​,错误的URL。
​​​500​​​ - 服务器内部发生了不可预期的错误。
​​​503 Server Unavailable​​ - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

讲一下TCP协议和UDP协议的区别和场景

我先说两个场景,大家可能就比较能理解了。

1) 第一个场景,​​浏览网页​​。(TCP场景)

  • 我们访问网页,网页肯定要把所有数据都正确的显示出来吧,如果这个过程中丢包了,那么肯定也会重新传包,不可能只显示一部分网页(保证数据正确性)
  • 同样,网页中的内容肯定也需要是​​顺序​​的。比如我一个抽奖,不可能还没抽就把奖给你了。(保证数据的顺序)
  • 再来,在这个对数据要求严格的过程中,我们肯定需要两方建立起一个​​可靠​​的连接,也就是我们上述说到的要经过三次握手才开始传输数据,并且每次发数据包都需要回执(面向连接的)
  • 而这种连接中传输数据就是用的​​字节流​​,也就是有根管道,你想怎么传数据都行,想怎么接受数据也都可以,只要在这一根管道里面。

所以这种需要​​数据准确、顺序不能错、要求稳定可靠​​的场景就需要用到TCP。

2)第二个场景,打游戏。(UDP场景)

打游戏最最重要的就是即时,不然我这个技能发出去了你那边还没被打中,这就玩不了了。

  • 所以​​UDP​​​是需要保证数据的​​即时性​​,而不保证每个数据包都正确接收到,即使丢包了,也不会去找丢的那个是什么包,因为要显示当前时间的当前数据包。(不保证数据正确性和数据顺序,可能会丢包)
  • 同样,为了数据的即时性,​​UDP​​也就不会去建立连接了,不需要什么三次握手,每次你还要确认收没收到。管你收没收到,我只要快速把每个数据包丢给你就行了。(面向无连接的)
  • 因为是​​无连接​​​的,所以就不需要用到字节流,直接每次丢一个​​数据报​​给你,接收方也只能接受一个数据报(不能和其他发送方的数据报混淆)。(基于数据报的)

如果你还是有点晕,可以看看这篇文章(亚当和夏娃),很形象的比喻:
​​​https://www.zhihu.com/question/51388497?sort=created​​

socket和WebSocket

虽然这两个货名字类似,但其实不是一个层级的概念。

  • ​socket​​,套接字。上文说过了,在TCP建立连接的过程中,是调用了Socket的相关API,建立了这个连接通道。所以它只是一个接口,一个类。
  • ​WebSocket​​,是和HTTP同等级,属于应用层协议。它是为了解决长时间通信的问题,由HTML5规范引出,是一种建立在TCP协议基础上的全双工通信的协议,同样下层也需要TCP建立连接,所以也需要socket。

科普:WebSocket在TCP连接建立后,还要通过Http进行一次握手,也就是通过Http发送一条GET请求消息给服务器,告诉服务器我要建立WebSocket连接了,你准备好哦,具体做法就是在头部信息中添加相关参数。然后服务器响应我知道了,并且将连接协议改成WebSocket,开始建立长连接。

如果硬要说这两者有关系,那就是​​WebSocket​​​协议也用到了​​TCP连接​​​,而TCP连接用到了​​Socket​​的API。

Https的连接建立过程

说完了HTTP和TCP/IP,再说说​​HTTPS​​。

上一篇文章说了HTTPS是怎么保证数据安全传输,​​链接🔗​​​:​​https://mp.weixin.qq.com/s/dbmwBVxHkvQ0fzWaSdtPYg​​

其中主要就是用到了​​数字证书​​。

现在完整看看​​Https连接建立(也叫TLS握手流程)​​:

  • 1、客户端发送 Client Hello 数据包消息。

这个消息内容包括一个​​随机数(randomC)​​​,​​加密族​​​(密钥交换算法也就是非对称加密算法、对称加密算法、哈希算法),​​Session ID​​(用作恢复回话)。

客户端要建立通信,在TCP握手之后,会发送第一个消息,也叫​​Client Hello​​消息。这个消息主要发了以上的一些内容,其中密文族就是把客户端这边支持的一些算法发给服务器,然后服务器拿来和服务器支持的算法一比较,就能得出双方都支持的最优算法了。

  • 2、服务器回复三个数据包消息: Server Hello,Certificate,Server Hello Done。

​Server Hello​​消息内容包括一个随机数(randomS),比较后得出的加密族,Session ID(用作恢复回话)。

到现在,双方已经有两个随机数了,待会再看看这两个随机数是干嘛的。然后加密算法刚才说过了,服务器协商出了三种算法并发回给客户端。

​Certificate​​消息就是发送数字证书了。这里就不细说了。

​Server Hello Done​​消息就是个结束标志,表示已经把该发的消息都发给你了。

  • 3、对称密钥生成过程

1)首先,客户端会对发来的证书进行​​验证​​​,比如数字签名、证书链、证书有效期、证书状态。
2)证书校验完毕后,然后客户端会用证书里的服务器公钥加密发送一个​​​随机数 pre—master secret​​​ ,服务器收到之后用自己的私钥解密。
3)到此,客户端和服务器就都有三个随机数了:​​​randomC、randomS、pre—master secret。​​​4)然后客户端和服务器端分别按照固定的算法,用三个随机数生成​​对称密钥​​。

  • 4、生成Session ID

这一步和开始两个hello消息中的​​Session ID​​对应起来了。

会生成会话的id,如果后续会话断开了,那么通过这个​​Session ID​​就可以恢复对话,不需要重新进行发送证书、生成密钥过程了。

  • 5、用对称密钥传输数据

拿到对称密钥后,双方就可以使用对称密钥加密解密数据,进行正常通信了。

网络基础知识问答_客户端

​扩展​​:为什么要使用非对称加密算法协商出对称加密这种方法?

首先,网络传输数据对传输的速度要求比较高,在保证安全的前提下,所以采用了对称加密的方法,而不用耗时较多的非对称加密算法。
其次,在确定对称加密传输数据的前提下,如果传输对称加密的密钥是个涉及到安全的问题,所以就采用了安全性更高的非对称加密算法,加上证书链机制,保证了传输​​​对称密钥相关数据​​的安全性。

学而不思则罔,思而不学则殆



举报

相关推荐

0 条评论