一 计算机网络的体现结构

计算机网络相关知识_HTTP

首先,计算机网络的体系结构分为OSI的七层或TCP/IP的四层或五层协议

以五层协议为例:

主要包括:

  • 应用层:通过应用进程间的交互实现网络应用 主要协议包括:http/smtp/ftp
  • 运输层:主要进行主机之间应用进程的连接,传输的是报文 主要协议为:TCP/ UDP
  • 网络层:主要确定目的主机的地址,传输的是IP数据包 协议:IP协议
  • 数据链路层:主要将网络层传递过来的ip数据报封装成帧
  • 物理层:实现数据的比特传输

二 三次握手与四次挥手

三次握手

作用:确认发送端与接收端都有发送和接收的能力

三次握手的目的是建立可靠的通信信道

计算机网络相关知识_HTTP_02

第一次:SYN等于0

第二次:当服务器能够接收到消息时,则SYN= 1,ACK = 0;

第三次:当客户端接收到消息时ACK= 1 最终以此来确认两者具有接收和发送消息的能力

第一次握手:client 发送通信,此时client什么也不能确认;server确认了对方发送正常,自己接收正常。

第二次握手:client 确认了:自己发送正常,对方接收正常,对方发送数据正常,自己接收正常;

第三次握手:client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了;自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可。

四次挥手

作用:告诉对方我要关闭,且知道对方也要关闭了

计算机网络相关知识_HTTP_03

  1. 首先主动关闭放发送FIN告知被动放自己将要关闭,此时主动关闭方处于半关闭状态
  2. 被动关闭方接收到FIN后,会发送ACK 确认对方要关闭
  3. 被动关闭放发送FIN告知主动关闭方自己将要关闭
  4. 主动关闭方接收后,发送ACK,确认被动关闭方关闭

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说、“我说完了”,A 回答“知道了”,这样通话才算结束

三 TCP,UDP协议的区别

||是否面向连接|传输可靠性|传输形式|传输效率|所需资源|应用场景|场景| |-|-|-|-|-|-|-|-| |TCP|是|可靠|字节流|慢|多|要求通信可靠|支付,聊天| |UDP|否|不可靠|数据报文段|快|少|要求传输速率快|直播|

四 TCP如何保证可靠性传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓

冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢

失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)

  1. 拥塞控制: 当网络拥塞时,减少数据的发送。
  2. ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方

确认。在收到确认后再发下一个分组。

  1. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不

能及时收到一个确认,将重发这个报文段

整体流程:首先TCP会将数据分割成合适的数据块,接收端接收数据时会检验数据块端到端的检验和,来判断所发送过来的数据块是否丢失,当检验和出现差错,接收端将不会接收该数据块并丢弃,此时发送端因长时间未接收到接收端所发来的反馈,则发送端会重新发送该报文段,且为了实现可靠传输,发送端发送一块就停止发送,直到接收方接收确认后,再发送下一块

4.2 滑动窗口和流量控制

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

4.3 拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

  • 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
  • 拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1
  • 快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

五 在浏览器输入URL地址,在主页显示的全过程

  1. 通过DNS解析目标服务的IP地址
  2. 建立与目标服务的TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

六 状态码

3xx Redirection(重定向状态码)

  • 301 Moved Permanently : 资源被永久重定向了。比如你的网站的网址更换了。
  • 302 Found :资源被临时重定向了。比如你的网站的某些资源被暂时转移到另外一个网址。

4xx Client Error(客户端错误状态码)

  • 400 Bad Request : 发送的HTTP请求存在问题。比如请求参数不合法、请求方法错误。
  • 401 Unauthorized : 未认证却请求需要认证之后才能访问的资源。
  • 403 Forbidden :直接拒绝HTTP请求,不处理。一般用来针对非法请求。
  • 404 Not Found : 你请求的资源未在服务端找到。比如你请求某个用户的信息,服务端并没有找到指定的用户。
  • 409 Conflict : 表示请求的资源与服务端当前的存状态在冲突,请求无法被处理。

5xx Server Error(服务端错误状态码)

  • 500 Internal Server Error : 服务端出问题了(通常是服务端出Bug了)。比如你服务端处理请求的时候突然抛出异常,但是异常并为在服务端被正确处理。
  • 502 Bad Gateway :我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。

七 HTTP长连接,短链接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

八 HTTP 1.0和HTTP 1.1的主要区别是什么?

  1. HTTP 1.0默认使用短链接,HTTP 1.1使用长连接
  2. HTTP 1.1新增了一些错误状态响应码 如:410 409
  3. 缓存处理
  4. 带宽优化及网络连接的使用

九 URI和URL的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
  • URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径。它是一种具体的URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

例子:localhost:8080/user/adduser

整体就是个URL 而/user/adduser是URI

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

十 HTTP 和 HTTPS 的区别?

  1. 端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
  2. 安全性和资源消耗:HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。

  • 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
  • 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等