网络七层体系结构图

1. TCP 三次握手和四次挥手

TCP三次握手
简单示意图:

  • 客户端-发送带有SYN标志的数据包 一次握手-服务端
  • 服务端-发送带有SYN/ACK标志的数据包 二次握手-客户端
  • 客户端-发送带有ACK标志的数据包 三次握手-服务端

SYN(Synchronize Sequence Numbers)同步序列编号,是TCP/IP建立连接时使用的握手信号。
在客户端和服务端之间建立正常的TCP网络连接时,客户端首先发出一个SYN信息,服务端使用SYN-ACK应答表示接收到了这个消息,最后客户端再以ACK(Acknowledgement)消息响应。
这样在客户端和服务端之间才能建立起可靠的TCP连接。

1.1. 三次握手的原因

三次握手的目的是建立可靠的通信信道,让发送方和接收方确定自己与对方的发送和接收是正常的

  • 第一次握手:Client什么都不能确认;Server确定了自己接收正常,对方发送正常
  • 第二次握手:Client确认了自己发送、接收正常,对方发送、接收也正常;Server确认了自己接收正常,对方发送正常
  • 第三次握手:Client确认了自己发送、接收正常,对方发送、接受也正常;Server确认了自己发送、接受正常,对方发送、接受也正常

1.2. 第二次握手传回了ACK,为什么还要传回SYN

ACK是为了告诉客户端,我接收到的信息确实是你所发的信号,这表明客户端到服务端通信正常;而回传SYN是为了建立服务端到客户端的通信

1.3. 四次挥手的原因

断开一个TCP连接需要四次挥手

  • 客户端-发送一个FIN,用来关闭客户端到服务端的数据传送
  • 服务端-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
  • 服务端-关闭与客户端的连接,发送一个FIN给客户端
  • 客户端-发回ACK报文确认,并将确认序号设置为收到序号加1

    例如打电话,A和B通话,A告诉B:我说完了,你还有要说的吗;B说:好的,我也没啥要说,你可以挂了。
    A先告诉B 我准备挂了,B收到后再告诉A 你可以挂了,B挂了,A断开

TCP,UDP协议的区别

连接类型 传输可靠性 传输形式 传输效率 所需资源 首部字节 应用场景
TCP 面向连接 可靠 字节流 20-60字节 对通信数据可靠(文件传输、邮件传输)
UDP 无连接 不可靠 数据报文段 8个字节 对通信速度高(视频通话)

UDP在传送数据之前不需要先建立连接,服务端在收到UDP报文后,不需要任何确认。特别适合即时通信,如视频通话、语音、直播

TCP在传送数据之前必须要先建立连接,数据传送完成之后要释放连接,在数据传送时,有确认、窗口、重传、拥塞控制机制,增加了开销和效率,提高了可靠性。

TCP协议如何保证可靠传输

  1. 应用数据被分割成TCP认为最适合发送的数据块
  2. TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层
  3. 校验和:TCP将保持它首部数据的校验和,目的是检测数据在传输的过程中的任何变化,如果收到段的检验和有差错,TCP将丢弃这个报文段,不确认收到此报文段
  4. TCP的接收端会丢弃重复的数据
  5. 流量控制(滑动窗口协议实现):TCP连接的每一方都有固定大小的缓存空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方数据,能提示发送方降低发送的速率,防止丢包。
  6. 拥塞控制:当网络拥塞时,减少数据的发送
  7. 超时重传:当TCP发出一个段后,它启动一个定时器,等待接收端确认收到这个报文段。如果未收到确认,将重发这个报文段

ARQ协议

**自动重传请求(Automatic Repeat-reQuest)**:是OSI模型中数据链路层和传输层的错误纠正协议之一,它通过使用确认和超时这个两个机制,在不可靠服务的基础上实现可靠的信息传输,如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送,ARQ包括 停止等待ARQ协议连续ARQ协议

停止等待ARQ协议

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分割就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到ACK确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组

  • 优点:简单
  • 缺点:信道利用率低,等待时间长
  1. 无差错情况
    发送方发送分组 接收方在规定时间之内收到并且回复确认 发送方再次发送
  2. 出现差错情况(超时重传)
    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组认为刚才发送过的分组丢失了。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式称为 自动重传请求ARQ
    在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。
  3. 确认丢失和确认迟到
  • 确认丢失:确认消息在传输过程丢失。当A发送M1消息,B收到后,B向A发送一个M1确认消息,但却在传输过程中丢失,而A并不知道于是在超时计时过后重传M1消息,B再次收到该消息后采取以下两点措施:1.丢弃这个重复的M1消息,不向上层交付;2.向A发送确认消息。
  • 确认迟到:确认消息在传输过程中迟到。A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息。

连续ARQ协议

可提高信道利用率,发送维持一个发送,凡是位于发送窗口之内的分组可连续发送出去,而不需要等待对方确认,接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了

游览器URL访问流程

状态码

类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

HTTP长连接、短连接

在HTTP/1.0中默认使用短连接。客户端和服务器每进行一个Http操作,就建立一次连接,任务结束就中断连接。
而从Http/1.1起默认使用长连接,用以保存连接特性。使用长连接的Http协议,会在响应头加入这行代码Connection:keep-alive
在使用长连接的情况下。当一个网页打开完成之后,客户端和服务端直接用于传输Http数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,他有一个保持时间,可以在不同的服务器软件中设定这个时间。实现长连接需要客户端和服务端都支持长连接。Http协议的长连接和短连接,实质上是TCP协议的长连接和短连接

Http是不保存状态的协议,如何保持用户状态

Http是一种无状态协议,也就是说Http协议自身不对请求和响应直接的通信状态进行保存。Session的主要作用就是通过服务端记录用户的状态。服务端保存Session的方法(内存和数据库)。通过在Cookie中附加一个Session ID来实现跟踪

Cookie被禁用怎么办? 最常用的就是利用URL重写把Session ID直接附加在URL路径的后面

Cookie和Session的区别

Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但两者的应用场景不一样。Cookie数据保存在客户端,Session数据保存在服务端
Cookie一般用来保存用户信息,场景:在Cookie中保存已经登录过的用户信息,将Token放入Cookie中,下次登录的时候根据Token值来确认用户
Session主要作用就是通过服务端记录用户的状态

Http1.0和Http1.1的主要区别

Http1.0 Http1.1
连接方式 默认使用短连接,每次请求都要重新建立一次连接(Http是基于TCP/IP协议的,每一次建立或断开连接都需要三次握手四次挥手的开销) 默认使用长连接,默认开启Connection:keep-alive(Http1.1的持续连接有非流水线方式和流水线方式。流水线方式就是客户端在收到Http响应报文之前就能接着发送新的请求报文。非流水线方式则是客户端在收到前一个响应后才能发送下一个请求)
缓存处理策略 主要使用header里的If-Modified-Since,Expires来做缓存判断的标准 引入更多的缓存控制策略Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
带宽优化及网络连接 客户端请求对象的一部分,服务器会将整个对象响应,并且不支持断点续传功能(浪费带宽) 在请求头引入range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)(充分利用带宽和连接)
错误状态响应码 - 新增了24个错误状态响应码

URI和URL的区别

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

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

Http和Https的区别

  1. 端口:http的url由 http://起始且默认使用80端口;https的url由 https://起始且默认使用443端口
  2. 安全性和资源消耗:http基于TCP/IP协议,所有的传输内容都是明文,客户端和服务端都无法验证对方的身份;https是运行在SSL/TLS之上的TCP/IP协议,所有传输内容都经过加密

    Http安全性没有Https高,但Https比Http耗费更多的服务器资源
    Https的加密为对称加密,但是对称加密的秘钥是用服务器方的证书进行了非对称加密

原文地址