《计算机网络-系统方法》读书笔记
网络设计者需要考虑的三个主要问题:
- bit层面,可能发生 bit errors。即1变成0,0变成1等等。
- packet层面,可能产生丢包等等。
- 网络链路层面,可能发生链路故障,例如光纤被狗咬了。
网络分层:
- 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)。
网络设计者面临的五个问题:编码/解码,分帧,错误检测,可靠交付,多样性传播(access mediation)
可靠性交付:靠ACK。有两种模式:
- stop and wait
- 滑动窗口
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(二):shim, docker-init和docker-proxy
- Docker组件介绍(一):runc和containerd
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程