计算机网络

60 阅读7分钟

状态码

服务器返回给客户端http响应包的状态码有哪几大类?

  • 信息性状态码(Informational),表示请求已被接受,需要继续处理。码值范围:1xx
  • 成功状态码(Success),表示请求已成功被服务器接收、理解、并接受。码值范围:2xx
  • 重定向状态码 (Redirection) 。表示需要客户端采取进一步的操作才能完成请求。码值范围:3xx
  • 客户端错误状态码 (Client Error)。表示请求语法错误或者请求无法完成。码值范围:4xx
  • 服务器端错误状态码(Server Error)。表示服务器处理请求过程中发生错误或者无法执行。码值范围:5xx

常见的状态码有哪些,是什么意思?

状态码英文名说明
100Continue表示迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
101Switching Protocol表示服务器正在切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议。
200OK请求已成功,请求所希望的响应头或数据体将随此响应返回。
202Accepted服务器已接受请求,但尚未完成。最终该请求可能会也可能不会被执行,并且可能在处理发生时被禁止。
301Moved Permanently永久性重定向。被请求的资源已永久移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址
302Moved Temporarily暂时性重定向。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的URI下。
304Not Modified表示资源在由请求头中的 If-Modified-Since 或 If-None-Match 参数指定的这一版本之后,未曾被修改。表示客户端不用请求该资源,直接使用本地的资源即可。
400Bad Request通常有两种情况:一是语义有误,当前请求无法被服务器理解;二是请求参数有误。
401Unauthorized请求要求身份验证。 该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么 401 响应代表着服务器验证已经拒绝了那些证书。对于需要登录的网页,服务器可能返回此响应。
403Forbidden服务器已经理解请求,但是拒绝执行它。
404Not Found服务器找不到请求的资源
405Method Not Allowed禁用请求中指定的方法
500Internal Server Error服务器内部错误,不知道如何处理;
502Bad Gateway前面的网关代理服务器联系不到后端的服务器
503Service Unavailable服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机
504Gateway Timeout前面的网关代理服务器能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应

连接过程

三次握手的过程是怎样的?

  • 第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

SYN:同步序列编号(Synchronize Sequence Numbers)

  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

select和epoll的区别?

  • select对于socket连接数组的大小有监听上线,一般是1024,限制了单机连接上线;
  • select循环遍历轮训查找真正有信号的socket连接,浪费计算能力;
  • epoll去除了1024数组个数的限制,socket连接会植入一个回调函数,如果socket连接产生了信号,则会调用回调函数,通知服务端处理;
  • nginx之所以成为互联网研发领域最常用的应用服务器,很大程度归功于epoll模型的使用;

https加密是怎么实现的?

  • 浏览器发起往服务器的 443 端口发起请求,请求携带了浏览器支持的加密算法和哈希算法;

  • 服务器收到请求,选择浏览器支持的加密算法和哈希算法;

  • 服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的;(注释:证书包括以下这些内容:1. 证书序列号。2. 证书过期时间。3. 站点组织名。4. 站点DNS主机名。5. 站点公钥。6. 证书颁发者名。7. 证书签名。因为证书就是要给大家用的,所以不需要加密传输)

    签名是指利用上一层证书的私钥,加密一些元信息(证书所有者的信息,包括基本信息,公钥,证书生效域名等)。这样,当收到签名证书时,只需要根据CA提供的公钥对签名解密,验证元信息是否一致,就可以判断当前证书是否合法。一句话来说就是,每个证书会对下一层的证书合法性做担保 。

  • 浏览器进入数字证书认证环节,这一部分是浏览器内置的 TSL 完成的;

    首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。

    用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性(验证过程类似上面 Bob 和 Susan 的通信)。

    签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。

    浏览器生成一个随机数 R,并使用网站公钥对 R 进行加密。

  • 浏览器将加密的 R 传送给服务器;

  • 服务器用自己的私钥解密得到 R;

  • 服务器以 R 为密钥使用了对称加密算法加密网页内容并传输给浏览器;

  • 浏览器以 R 为密钥使用之前约定好的解密算法获取网页内容。

HTTP协议

你对http2.0有什么了解?

  • http2.0有三个核心能力,分别为二进制传输、多路复用、服务端推送;

  • 二进制传输提高了网络带宽的利用率,加大了传输的速率;

  • http请求是串行化的,例如需要加载完html再加载css,http2.0通过包头加包体的形式,用包头存储信息的位置;

    包1-4html包5-8css | html数据 | css数据 |

  • http2.0基于长连接实现了服务端推送,可以在服务端进行配置,实现包结果的额外相应;

    例如客户端请求index.html,服务端可以额外返回index.css和index.js;

    传统的http需要一个个请求资源;

优化

如何解决网络瓶颈?

  • 公网:带宽,出口调用量;
  • 内网:带宽,出口调用量;

    扩容:扩容带宽

    分散:分散数据

    压缩:压缩数据