计算机网络传输层
端到端的连接
网络层:提供主机之间的逻辑通信
传输层:提供应用进程之间的逻辑通信
位于网络层之上、依赖网络层服务、对网络层服务进行可能的增强
接收端:多路分用
相同目的地址目的端口号的UDP会被导向同一个socket
每个srcIp srcPort DestIp DestPort 导向自己独有的socket(创建多个socket)
(服务器也可以让一个进程创建多个线程与tcp连接绑定)
发送端:多路复用
什么是可靠? 不错、不乱、不丢
可靠数据传输协议
GBN
1.发送方 分组头部包含k-bit序列号
窗口尺寸为N,最多允许N个分组未确认
序列号 :表示本报文段所发送数据的第一个字节的编号。而不是报文段的编号(这里防止被攻击混入其他的段难以检测的问题)。
建立TCP连接时,双方随即选择序列号
ACKs 表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
累计确认:该序列号之前所有的字节均已被正确接收到(GBN)
TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
流水线机制
累积确认
TCP使用单一重传定时器
触发重传的事件
超时
收到重复ACK
渐进式
暂不考虑重复ACK
暂不考虑流量控制
暂不考虑拥塞控制
1.点对点 一个sender 一个 reciever
2.可靠的、按序的字节流
3.流水线机制
案例:
何时应该指数性增长切换为线性增长(拥塞避免)?
当CongWin达到Loss事件前值的1/2时.
实现方法:利用一个变量 Threshold, Loss事件发生时, Threshold被设为Loss事件前CongWin值的1/2。
Loss事件处理办法
3个重复ACKs:CongWin切到一半然后线性增长
Timeout事件:CongWin直接设为1个MSS,然后指数增长,达到threshold后, 再线性增长(拥塞更严重了)
TCP拥塞控制算法
4.接收方/发送方缓存
5.全双工:同一连接中能传输双数据流
6.面向连接(连接管理)
TCP连接包括:两台主机上的缓存、连接状态变量、socket等
客户端初始化的序列号是随机的
7.流量控制机制:发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)
8.复用/分用
1.基于“尽力而为”的网络层,没有做(可靠性)
丢失
非按序到达
2.基于Internet IP协议
复用/分用
简单的错误校验
3.无连接
UDP发送方和接收方之间不需要握手
每个UDP段的处理独立于其他段
UPD优点:
1.无需建立连接(减少延迟)-DNS
2.实现简单,无需维护连接状态
3.头部开销小(8byte)
4.没有拥塞控制:应用可更好的控制发送时间和速率
常用于流媒体应用
1.容忍丢失
2.速率敏感
DNS/SNMP
在UDP上实现可靠数据传输
UDP校验和:检测UDP段在传输过程中是否发生错误