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

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


微信公众号
关注公众号,获得及时更新

更多文章
  • APUEv3 - 重读笔记
  • Mock源码阅读与分析
  • Thinking in Python
  • 我的代码进CPython标准库啦
  • Python零碎小知识
  • Python和单元测试
  • 工作一年的总结
  • Python 的继承
  • MongoDB 的一些坑
  • Python的yield关键字有什么作用?
  • 借助coroutine用同步的语法写异步
  • Python3函数参数中的星号
  • 使用Git Hooks
  • Token Bucket 算法
  • nginx配置笔记