《计算机网络-系统方法》读书笔记

https://book.systemsapproach.org/

  • 网络设计者需要考虑的三个主要问题:

    • bit层面,可能发生 bit errors。即1变成0,0变成1等等。
    • packet层面,可能产生丢包等等。
    • 网络链路层面,可能发生链路故障,例如光纤被狗咬了。
  • 网络分层: layered network system

    • OSI七层
    • TCP/IP四层
  • API:

    • 首先使用 int socket(int domain, int type, int protocol) 创建一个socket
    • 接下来,如果是服务端:
      • int bind(int socket, struct sockaddr *address, int addr_len)
      • int listen(int socket, int backlog)
      • int accept(int socket, struct sockaddr *address, int *addr_len)
    • 如果是客户端:
      • int connect(int socket, struct sockaddr *address, int addr_len)
    • 建立连接之后,无论是客户端还是服务端,都用这两个函数写入或者读取数据:
      • int send(int socket, char *message, int msg_len, int flags)
      • int recv(int socket, char *buffer, int buf_len, int flags)
    • 最后,使用 close 关闭socket
  • 衡量网络性能的两个指标:带宽(bandwidth/throughput),延迟(latency/delay)。

network performance

  • 网络设计者面临的五个问题:编码/解码,分帧,错误检测,可靠交付,多样性传播(access mediation)

  • 可靠性交付:靠ACK。有两种模式:

    • stop and wait

    stop and wait

    • 滑动窗口

    sliding window


更多文章
  • 解决 macOS 终端hostname一直变化问题
  • KVM 共享 Intel 集成显卡
  • PromQL 备忘
  • 读《格鲁夫给经理人的第一课》
  • 读《打开心智》
  • 为什么要把复杂的联表操作拆成多个单表查询?
  • 红包系统的设计
  • 2022年终总结
  • MySQL Index Condition Pushdown Optimization
  • Go mod 简明教程
  • OpenWRT 使用 Android/iOS USB 网络
  • 搭建旁路由
  • Golang gRPC 错误处理
  • 编写可维护的单元测试代码
  • OAuth 2 详解(六):Authorization Code Flow with PKCE