【计算机网络】知识积累

TCP协议、IP协议、HTTP协议分别在哪一层?

  • TCP:运输层
  • IP:网络层
  • HTTP:应用层

网络七层模型和网络五层模型
对比
TCP协议的三次握手:

  • 建立连接时,客户端发送SYN包(syn=x)到服务器,进入SYN_SEN状态,等待服务器确认
  • 服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送了一个SYN包(syn=y,即SYN+ACK包),进入SYN_RECV状态
  • 服务端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),包发送完毕,客户端和服务器进入ESTABLISHED状态(TCP连接成功),完成三次握手。

TCP协议的四次握手:

  • 由于TCP协议是全双工的,因此每个方向都必须单独进行关闭。
    • 全双工(Full Duplex)通信允许数据在两个方向上同时传输。能力上相当于两个单工通信的结合。
    • 半双工(Hals Duplex)数据传输指可以在一个信号载体的两个方向上传输,但是不能同时传输。[同一时间仅允许一个方向,实际上是一种切换方向的单工通信;同一时间只有一方接受或发送信息,如对讲机]
  • 单独关闭的原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
  • TCP的连接的拆除需要发送四个包,因此称为四次握手(four-way handshake)。服务端或刘拉你端均可主动发起挥手动作,在sokert编程中,任何一方执行close()操作即可产生挥手操作。
  • 四次握手过程:
  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
  2. 服务器B收到这个FIN,它发送一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A
  4. 客户端A发送ACK报文确认,并将确认序号设置为收到序号加1。
    在这里插入图片描述
TCP 状态
SYN 建立连接
FIN 关闭连接
ACK 响应
PSH 有DATA数据传输
RST 连接重置
  • ACK可能是与SYN,FIN等同时使用的,如SYN和ACK,可能同时为1,他表示的就是建立之后的响应
  • 如果只是单个SYN,表示的只是建立连接。

为什么连接时候三次握手,关闭的时候四次握手?

  • 连接时,当Server端收到Client端的SYN请求后报文后,可以直接发送SYN+ACK报文。ACK报文是用来应答的,SYN报文是用来同步的。
  • 关闭时,当Server端收到FIN报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端。当Server端所有的报文都发送完后,才能发送FIN报文,因此不能一起发送,所以需要四次握手。

为什么TCP要建立连接?

  • 保证可靠传输

TCP为什么可靠一些?

  • 三次握手、超时重传、滑动窗口、拥塞控制

哪种应用场景会使用TCP协议,使用它的意义?

  • 当对网络通信质量有要求时:整个数据都要准确无误的传输给对方,这往往用于一些可靠的应用。如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTO等邮件传输的协议

TCP连接和释放过程,描述:

  • 三次握手:

    • 主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始***seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)
    • 主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,表示位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始***seq(B)=y,以及主机B对主机A初始***的确认号ack(b)=seq(a)+1=x+1)
    • 第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个***seq(A)=x+1;确认号为ack(A)=y+1的报文;
      在这里插入图片描述
  • 四次握手:假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:

    • 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,***seq=u;
    • 服务器收到这个FIN,它发送回一个ACK,确认号ack为收到的序号加1.(此时服务器还未关闭,当所有服务器端所有报文都发送完毕后再回进入下一步)
    • 关闭服务器到客户端的连接:也是发送一个FIN给客户端
    • 客户端收到FIN后,会发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
      在这里插入图片描述

解释,http请求中304状态码的含义

  • 304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
  • 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为if-Modified-Since HTTP标头)。服务器可以告诉Googlebot自从上次抓取网页没有变更,进而节省带宽和开销。

请你说明一下,SSL四次握手的过程

  1. 客户端发送请求
  • 首先,客户端(通常是浏览器)先向服务器发送加密通信的请求,这叫做ClientHello请求
  1. 服务器回应
  • 服务器收到客户端请求后,向客户端发出回应,这叫做ServerHello
  1. 客户端回应
  • 客户端收到服务器回应以后,首先验证服务器证书,如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
  1. 服务器的最后回应
  • 服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所有的“会话秘钥”。然后,向客户端最后发送下面信息。
    1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和秘钥发送。
    2. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用“会话秘钥”加密内容。

请你讲讲http1.1和1.0的区别

  • 缓存处理:
    • 在HTTP1.0中主要是用header里的if-Modified-Since,Expires作为缓存判断的标准。
    • HTTP1.1则引入了更更多缓存控制策略例如Entity tag,If-Unmodified-Sine,If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
  • 带宽优化及网络连接的使用:
    • HTTP1.0中,存在一些浪费带宽的现象,如客户端需要对象一部分,而服务器将整个对象送过来,并且不支持端点续传功能。
    • HTTP1.1在请求头中引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便开发者自由选择以便于充分利用带宽和连接。
  • 错误的通知管理:
    • 在HTTP1.1中新增了24个错误状态响应吗,409(Confilict)表示请求的资源与资源发生冲突,410(Gone)表示服务器上的某个资源被永久性删除。