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

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


更多文章
  • 错误处理实践
  • 权限模型(RBAC/ABAC)
  • OIDC(OpenID Connect) 简介
  • 任务队列简介
  • 使用Drone CI构建CI/CD系统
  • PostgreSQL 操作笔记
  • Golang migrate 做数据库变更管理
  • 使用PostgreSQL做搜索引擎
  • Nginx 源码阅读(三): 连接池、内存池
  • Nginx 源码阅读(二): 请求处理
  • Nginx 源码阅读(一): 启动流程
  • Go 泛型简明教程
  • KVM 显卡穿透给 Windows
  • 使用 HTTP Router 处理 Telegram Bot 按钮回调
  • 使用反射(reflect)对结构体赋值