计算机网络传输层

2020-03-04  本文已影响0人  GGBond_8488

基本理论和基本机制

端到端的连接

传输层vs网络层

网络层:提供主机之间的逻辑通信
传输层:提供应用进程之间的逻辑通信
位于网络层之上、依赖网络层服务、对网络层服务进行可能的增强

1.多路复用和多路分用:

接收端:多路分用
相同目的地址目的端口号的UDP会被导向同一个socket
每个srcIp srcPort DestIp DestPort 导向自己独有的socket(创建多个socket)
(服务器也可以让一个进程创建多个线程与tcp连接绑定)
发送端:多路复用

2.可靠数据传输机制

什么是可靠?不错、不乱、不丢

可靠数据传输协议

滑动窗口协议

GBN
1.发送方 分组头部包含k-bit序列号
窗口尺寸为N,最多允许N个分组未确认

滑动窗口协议
ACK(n):确认到序列号n包含n的分组均以被正确接收(可能收到重复ACK)
为空中的分组设计计时器
超时时间:重传序列号大于等于n,还未收到ACK的所有分组
3.流量控制机制
4.拥塞控制机制

Internet的传输层协议:(TCP/UDP均不保障延迟/带宽)

TCP(可靠的、按序交付服务):

TCP报文段结构

序列号:表示本报文段所发送数据的第一个字节的编号。而不是报文段的编号(这里防止被攻击混入其他的段难以检测的问题)。
建立TCP连接时,双方随即选择序列号

ACKs表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
累计确认:该序列号之前所有的字节均已被正确接收到(GBN)

简单telnet

TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
流水线机制
累积确认
TCP使用单一重传定时器
触发重传的事件
超时
收到重复ACK
渐进式
暂不考虑重复ACK
暂不考虑流量控制
暂不考虑拥塞控制

1.点对点 一个sender 一个 reciever

2.可靠的、按序的字节流

3.流水线机制

TCP拥塞控制
拥塞原因
拥塞控制方法(为什么选在传输层做拥塞控制)

案例:


image.png
TCP拥塞控制原理

何时应该指数性增长切换为线性增长(拥塞避免)?
当CongWin达到Loss事件前值的1/2时.
实现方法:利用一个变量 Threshold, Loss事件发生时, Threshold被设为Loss事件前CongWin值的1/2。

Loss事件处理办法
3个重复ACKs:CongWin切到一半然后线性增长
Timeout事件:CongWin直接设为1个MSS,然后指数增长,达到threshold后, 再线性增长(拥塞更严重了)

TCP拥塞控制算法

Th = ?
CongWin = 1 MSS
/* slow start or exponential increase */
While (No Packet Loss and CongWin < Th) {
send CongWin TCP segments
for each ACK increase CongWin by 1
}
/* congestion avoidance or linear increase */
While (No Packet Loss) {
send CongWin TCP segments
for CongWin ACKs, increase CongWin by 1
}
Th = CongWin/2
If (3 Dup ACKs) CongWin = Th;
If (timeout) Cong

4.接收方/发送方缓存

5.全双工:同一连接中能传输双数据流

6.面向连接(连接管理)

通信双发在发送数据之前必须建立连接
连接状态只在连接的两端中维护,在沿途节点并不维护状态

TCP连接包括:两台主机上的缓存、连接状态变量、socket等
客户端初始化的序列号是随机的

三次握手 三次握手 四次握手关闭连接

7.流量控制机制:发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)

image.png
接收方为TCP连接分配buffer
上层应用可能处理buffer中数据的速度较慢
速度匹配机制
Receiver通过在Segment的头部字段将RcvWindow 告诉Sender
Sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow尺寸
Receiver告知SenderRcvWindow=0时,即使=0发送方也可以发送一个很小的段,防止接收不到接下来的RecvWindow

8.复用/分用

UDP(不可靠的交付任务):

1.基于“尽力而为”的网络层,没有做(可靠性)
丢失
非按序到达

2.基于Internet IP协议
复用/分用
简单的错误校验

3.无连接
UDP发送方和接收方之间不需要握手
每个UDP段的处理独立于其他段

UPD优点:
1.无需建立连接(减少延迟)-DNS
2.实现简单,无需维护连接状态
3.头部开销小(8byte)
4.没有拥塞控制:应用可更好的控制发送时间和速率

常用于流媒体应用
1.容忍丢失
2.速率敏感

DNS/SNMP

在UDP上实现可靠数据传输

UDP校验和:检测UDP段在传输过程中是否发生错误

上一篇 下一篇

猜你喜欢

热点阅读