一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++
传输层
概述和传输层服务
概述
- 传输层在端系统实现,交换机路由器没有传输层
- 信息到传输层封装成段(segment)
- 接收段,再组合成信息
- 传输层功能的实现依赖并受限于网络层服务
- TCP
- 面相连接,可靠,流量控制
- UDP
- 无连接,多路复用
- try my best
- 多路复用/多路分解
- 扩展网络层主机通信为传输层进程通讯
- 发送端(复用)
- 收集message
- 封装头部成段,将段发给网络层
- 接收端(分解)
- 收到段,分解交给正确的socket
- 简介
- Socket唯一标识
- segment填写source ,dest端口号
- UDP socket 使用二元组标识
- <dest.address,dest.port>
- 同一Segment源ip地址和端口号可以不同
- 面相连接的多路复用/多路分解
- TCP socket 使用四元组标识
- 一个进程多个socket
- 因为四元组
无连接传输层协议
- UDP 无连接 不可靠
- 更精细控制何时发送
- 头部开销小
- 无需事先连接
- UDP segment
- 一行32bits
- source &dest port
- length
- 最长65536字节
- checksum校验合
- UDP checksum
- 将segment看作16bits的序列
- 两两相加
- 还剩8bits用0补齐
- 进位要回卷
- 取反码
- 接收方运算前两步,再加checksum理应得到全1。
- 还是可能有偶数个错
- 可靠传输的原理
- rdt_send()
- packet = make_pkt(data)
- udt_send(packet)
- rdt_rcv(packet)
- extract(packet ,data)
- deliver_data(data)
- a
- getting started
- 有限状态机(FSM)定义发送/接收协议实体
- 某事件发生会引起状态迁移,产生确定动作
- 任意时刻只能处于某一确定状态
- 完全可靠
- 完全可靠的可靠数据传输rdt1.0
- Sender发送方
- 发生rdt_sent(data)事件时
- 动作
- 创建分组make_pkt(data)
- 发送分组udt_send(packet)
- Receiver
- rdt_rcv(packet)
- 动作
- 接收分组中的数据(拆封)extract(packet, data)
- 交给上层aeliver_data(data)

- 不可靠,没有丢失,可能出现错误rdt2.0
- 自动重传请求
- ARQ
- 错误检测
- 反馈
- ACK收到对
- NAK收到错
- 反馈receiver→sender

看课本p134
- 限制重传次数避免死锁
- rdt2.1ACK/NAK错误
- sequence number
- 错误的ACK,NAK重传
- 2.2FSM有限状态机
流水线可靠数据传输协议
- 错误恢复机制
- 回退N步GBN
- Sender
- 分组头部K-bit
- 等待ACK的分组最大为N
- 选择性重传
GBN
- 只启用一个定时器
- 重传全部
SR
- 都启用定时器
- 只重传错误
面向连接的传输
简介
- TCP连接是点到点、全双工连接
- 可靠按序的字节流
- 流水。拥塞控制,流量控制设定窗口尺寸
TCP连接
面相连接的
超时
- 重传还未确认的、序号最小的Segment.
- 序号为SendBase的Segment
- 超时间隔加倍
- 设置超时间隔增大一倍
- 一种有限的拥塞控制机制
- 拥塞时降低发送速率是一种负责任的行为
快速重传
收到三个重复的ACK
流量控制
避免发送方相对于接收方过快导致溢出
TCP连接管理
连接拆除
拥塞控制
端到端拥塞控制
- 只有端系统观察判断网络行为,推断是否拥堵
网络辅助的拥塞控制
- 直接反馈
- 间接反馈
TCP的拥塞控制
吞吐率(W)=cwnd/RTT
Prev
应用层
Next
网络层数据层面
Loading...