计算机网络复习总结


别问 问就是为了面试豁出了老命

五层体系网络结构

  • 应用层
    • http协议
    • dns协议
    • smtp电子邮件协议
  • 运输层
    • tcp
    • udp
  • 网络层
    • 网络路由之间的数据传输
  • 数据链路层
    • 主机之间的数据传输
  • 物理层
    • 数据到主机之间的最低级传输

TCP

三次握手,四次挥手

三次握手.jpg

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

四次挥手.jpg

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

TCP和UDP的区别

TCP和UDP.jpg

TCP如何保证可靠传送

  • TCP会自动把数据拆分成合适大小的数据块
  • TCP会把切割好的数据块进行编号
  • TCP会自动丢弃重复的数据
  • 超时重传
  • 窗口滑动
  • ARQ协议
  • 拥塞控制:TCP在网络拥塞的时候减少数据发送
  • 校验和: TCP保持它的首部和数据的校验和

窗口滑动

TCP维护了发送端缓存窗口以及接收方缓存窗口,滑动窗口也可以理解为动态窗口,接受的时候接收端只能从接受缓存窗口中的数据去接受,发送方只能把数据发送到发送缓存窗口
在带宽比较好的时候则窗口变大,速度也变大,太短较慢的时候窗口变小,这样子不会造成拥堵

ARQ协议

  • 停止等待ARQ协议

    每当发送一段数据,那么要等对方确认这段数据被接收,才会发送下一段数据;如果发送失败,则会触发超时重传

  • 连续ARQ协议

    发送数据的时候维护一个发送窗口,只要是处于发送窗口,就可以一直发送数据,不需要等接收方确认,每当接收到一个ACK则把窗口移动即可。
    但是会存在回退的问题,如果发送5个分组,第3个丢失了,那么后面的全部都会丢失,只能把后三个重新传输一次

拥塞控制

  • 慢开始

    由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,拥塞窗口cwnd加倍

  • 拥塞避免

    拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1

  • 快重传

    当接收方收到不是按照TCP编号排序的分组,则应当发送重新确认,一旦重新确认次数为3次,则立即重新传输丢失的分组

  • 快恢复

    当收到三个重复确认,确认丢失的时候则将ssthresh门限减半,将cwnd设置为ssthresh的大小,并开始使用拥塞避免算法(因为能连续收到3个确认,则没必要再慢开始)

  • 算法使用条件

    • 当cwnd<ssthresh时,使用慢开始算法。
    • 当cwnd>ssthresh时,改用拥塞避免算法。
    • 当cwnd=ssthresh时,慢开始与拥塞避免算法任意

time_wait 和 time_close

time_close分析.png
在图中的情况,由于SEQ=3被丢弃了,本质上这段tcp链接是不能复用了,但是第二次的时候,这段错误的TCP还是被使用,这样会导致错误不断的延续下去,同时数据也会发生错误。

  • time_Wait存在的原因
    1. 为了保证tcp连接不会被重用,导致错误延续
      • TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
      • TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间
        • 等待2MSL是为了保证链接的上数据要么一定处理完成,要么别直接丢弃。不会干扰第二个链接的建立
        • 如果没有time_wait比较短,或者没有time_wait则会直接进入上图的那种错误情况
      • CLOSE_WAIT 是被动关闭连接是形成的。
    2. 为了保证连接的正常关闭
      • 如果接收方发送fin之后,发送方发送的ack意外丢失
      • 导致接收方会继续发送fin,使得接收方产生RST(复位标识,重建连接)

从输入Url到底发生了什么

url到前端.jpg

url -> 浏览器缓存 -> dns -> tcp -> 服务端 -> 返回请求 -> 浏览器渲染

Http

http1.0 和 http1.1

  • http1.1把http1.0默认的短连接改为长连接
  • http1.1新增状态码,比如410表示资源从服务器上删除
  • http1.1头部引入range,http1.0一旦发送请求会把所有的内容都请求过来,通过range可以请求到自己需要的数据就好
  • 缓存处理,引入了更多的缓存策略

http 和 https

  • http默认使用80,https则默认使用443
  • HTTPS协议需要到CA申请证书
  • https运行再ssl之上
    https和http

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

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

ssl过程

  1. 客户端发送请求
    • 发送版本号
    • 客户端生成一个随机数(第一个)
    • 支持的加密方式
  2. 服务器回应请求
    • 确认版本号
    • 服务端生成一个随机数(第二个)
    • 确认使用的加密方式
    • 发送证书
  3. 客户端回应请求
    • 客户端生成一个随机数(第三个)
    • 将随机数用公匙加密,
  4. 服务端最后回应请求
    • 服务端收到三个随机数后生成会话密匙