网络

作者: 6a91e15c5cde | 来源:发表于2018-04-22 21:59 被阅读9次

    网络传输要解决的问题

    • alice想要可靠的发送信息给bob,但是在网络的传输过程可能是不可靠的,网络可能中断,可能信息被黑客窃听,那么解决这些问题就变得很重要。
    net01.png

    为什么要有4层网络架构

    net02.png

    网络不可靠不安全体现在哪些方面,对应的解决方法

    • 丢包,重复包
    • 出错
    • 乱序
    • 中间人攻击
    • 窃取
    • 篡改

    滑动窗口

    • 维持发送方和接收方缓冲区,用来解决传输不可靠的问题
    • 如何确认对方接收到包?


      net03.png

      问题: 这解决了正确传输包的问题,但是效率较低,于是有了改进方法,一次传输多个包。


      net04.png

    问题: 上图中发送的效率得到了提高,但是同时发送的多个包中,可能会出现丢包的情况,如何解决丢包的问题,这里就用到了滑动窗口的概念。


    net05.png
    • 灰色:代表已经收到对方确认的包
    • 黄色: 代表已经发送给对方,等待对方确认
    • 绿色: 代表新划入滑动窗口缓冲区的包,待发送未确认的包。

    正常的流程:
    (1)先发送的包1 2 3收到了对方的确认
    (2)滑动缓冲区中的4,5,6,7号包已经发送,对方还没有确认
    (3)滑动缓冲区中的8,9,10号包是新加入缓冲区包,保持缓冲区7个包的大小
    (4)这时候如果收到了4号包的确认,那么滑动窗口向前移动一个包的位置,整个窗口的大小不变仍然保持7个包的大小。
    (5)以此类推,确认了几个包,滑动窗口就移动几个包的位置,同时保持7个包缓冲区的大小不变。

    出错的流程:


    net06.png

    (1) 假设5号包丢掉了,那么此时可能6,7,8,9,10,11都已经到达了对方,但是由于要按顺序确认,所以即使6,7,8,9,10都正确的收到了,也没有办法回复给发送方ack。
    (2) 此时需要重传。 重传后对方正确收到了5号包,这时候可能一起回复了5,6,7,8号包的确认,看到上图中的5,6,7,8包变成灰色。这是后恢复了正常传输过程。

    三次握手,四次挥手

    工程思路

    • 网络是不可靠的,任何包都有可能丢失
    • 遇见问题,解决问题,不断迭代
    • 能用就好


      net08.png

      (1) 首先服务器处于Listen状态
      (2) 客户端发送SYN给服务端,同时自己的状态置为SYN_SENT状态
      (3) 服务器端收到syn包后,将自己的状态置为SYN_RECEIVED状态
      (4) 此时为了告诉客户端,我收到了你的包,所以回复了SYN ACK包
      (5) 此时客户端收到了服务器端发送的SYN ACK包,表示已经可以建立连接了,所以将自己的状态置为ESTABLISHED
      (6) 客户端为了告诉服务器我收到了你的SYN ACK包,所以回复了一个ACK包给服务器端,此时服务器端的状态置为ESTABLISHED
      (7) 开始正常的传输数据

    基本的逻辑就是:如何让对方知道自己的状态,所以要多次的确认,但是确认总要有个尽头,所以大家觉着经过这样的三次就可以了。

    net10.png

    (0) 由于服务端和客户端都可以发起断开连接,所以这里双方是发起方和接收方的
    (1) 发起方,发送FIN表示要断开连接,并将自己的状态设置为FIN_WAIT_1
    (2) 接收方,收到后发送ACK给接收方,并将自己的状态设置为CLOSE_WAIT。(这里为什么不是发送ACK,FIN而只是发送了ACK?)
    (3) 发起方,接收到ACK后将自己的状态设置为FIN_WAIT_2
    (4) 接收方发送FIN给发起方,同时将自己的状态设置为LAST_ACK
    (5) 发起方,接收到FIN后,发送ACK给接收方,同时将自己的状态设置为TIME_WAIT
    (6) 接收方,接收到ACK后,将自己的状态设置为CLOSE
    (7) 发起方,过了TIME_WAIT时间后,自己的状态变为CLOSE

    问题:
    为什么断开连接是4次?
    为什么回复FIN,只有ACK 而不像三次握手一样是FIN,ACK?
    为什么会有一个TIME_WAIT的状态

    比喻:


    net09.png

    TCP及滑动窗口的常见问题

    • 谈谈TCP协议及滑动窗口的常见问题
      保证包传输的正确性
      流量控制
      拥塞控制
      滑动窗口解决了什么问题

    相关文章

      网友评论

          本文标题:网络

          本文链接:https://www.haomeiwen.com/subject/fuzclftx.html