开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情 这也是第28篇文章
计算机网络模型概述
注:OSI(open system interconnect)
各层的PDU(protocol data unit
数据链路层
滑动窗口
在滑动窗口这个概念之下,延伸出了三个协议:
- 滑动窗口协议(停等协议) 针对数据收发过程中出现错误要进行处理的问题:
- 回退n帧协议
- 选择性重传
上述三类协议的比较
- 滑动窗口协议(停等): 发送方和接收方窗口大小均为1
| 类型 | 回退n帧 | 选择性重传 |
|---|---|---|
| Ws | <最大序列号(2^n-1) | <Wr |
| Wr | 1 | (最大序列号+1)/2 |
| 缓冲区 | 发送方 | 接收方 |
| 适用情况 | 错误率低 | 错误率高 |
UDP
头部:
Q:UDP length最大能多大?
A:65515(由于IP分组长度限制比2^16略小)
伪首部:
- protocol: UDP:17
TCP:6
- 伪首部如何用?
- 发送方:将每两个字节按位求和,最后取得校验和,并写入校验和字段
- 接收方:伪首部+datagram,按位求和并取反算出和
- 当无差错时结果全为1
UDP应用——RPC(remote procedure call)
- 指针不能传过去,但是可以通过传旧值,在server端用指针把值改了,把新值(地址也已经不同)传回来。但这种方法不适合复杂的数据结构,如 图 。
- 装箱编号时无法确定参数大小
- 有时无法确定参数类型
- 若被调用的进程被搬至新的远程主机,全局变量就不能用了 一些注意事项:
- 超时重传,要有一个计时器timer
- 不需要分别对每条请求回应
- 当传递的参数或返回的结果大于UDP分组大小时,应借助一些协议
- 如果多个请求和应答可重叠,应有标识符(id)来匹配它们
- 对于非幂等(即重复不一定安全)的操作,需要强语义保证它不会被执行多次,这时候TCP比UDP更合适
Q:为什么会有非幂等?
A:比如有自增计数器