终陌

文章 评论 浏览 686

终陌 2022-05-04 13:57:36

tcp三次握手:

三次握手

  1. 客户端想要建立连接,发起一个syn=1 seq=x的tcp包,表示想要建立连接
  2. 服务端收到包,表示可以建立连接,回复一个 ack=1 syn=1 seq=y ACKnum=x+1的包同意连接
  3. 客户端收到确认包之后,了解到可以建立连接;再次发送包 ac1 syn=0 ACKnum=y+1确认建立连接;客户端进入连接状态,服务器收到包之后也进入连接状态 tcp连接建立

数据传输

传输过程中,tcp连接会一次性发送若干个包测试连接速度,根据连接速度调整tcp包的发送频率

四次挥手

  1. 客户端需要断开连接,发起一个fin=1 seq=x的包,请求断开连接
  2. 服务端收到请求断开的包,发送一个ack=1 ACKnum=x+1的包表示请求已确认,但是这期间可能有剩余数据需要发送,将剩余的数据发送完毕
  3. 服务端检查所有数据都已发送完毕,发送一个find=1 seq=y的包表示同意断开请求
  4. 客户端收到同意断开请求的包,发送ack=1 ACKnum=y+1的表示确认断开连接
  5. 最后阶段,服务端收到最后一个包之后,断开连接,客户端在发送最后一个包之后,等待两个最大生命周期,然后也断开连接 tpc连接断开

第 16 题:谈谈你对 TCP 三次握手和四次挥手的理解

终陌 2022-05-04 13:56:27

看了前几个写的,随机生成的数组都是有重复值的,去重会减少数组长度不可取

const list = randInt(20, 10); // 1-20随机生成10个不重复的整数
group(list);

function randInt(max, num) {
  const map = [];
  for (let i = 1; i <= max; i++) {
    map.push(i);
  }

  const res = [];
  for (let i = 0; i < num; i++) {
    const randIndex = Math.random() * (map.length - 1) + 1;
    res.push(map.splice(~~randIndex, 1)[0]);
  }

  return res;
}

function group(arr) {
  arr.sort(function (a, b) {
    return a - b;
  });

  const res = [];
  for (const item of arr) {
    const index = ~~(item / 10);
    if (!res[index]) {
      res.push([]);
    }

    res[index].push(item);
  }

  return res;
}

第 67 题:随机生成一个长度为 10 的整数类型的数组

终陌 2022-05-04 13:55:49

dfs

const fn = (data, value) => {
  let res = []
  const dfs = (arr, temp = []) => {
    for (const node of arr) {
      if (node.children) {
        dfs(node.children, temp.concat(node.id))
      } else {
        if (node.id === value) {
          res = temp
        }
        return
      }
    }
  }
  dfs(data)
  return res
}

为什么运行结果不对

第 92 题:已知数据格式,实现一个函数 fn 找出链条中所有的父级 id

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文