计算机网络之传输层
传输层为运行在不同主机上的进程提供了端到端的逻辑通信机制,主要包括UDP、TCP两个协议
一、基本的工作方式:
发送端:将应用层递交的消息分成一个或多个segment(报文段),并向下传输给网络层
接收端:将接收到的segment组装成消息并交给上层应用层
二、TCP、UDP协议
1、TCP特点
提供点对点的通信机制
可靠、按序的字节流机制
流水线机制
发送方、接收方缓存
全双工,同一连接中能够传输双向数据流
累计确认机制,该序列号之前的所有字节均已被正确接收到
2、TCP段结构
序列号:是指segment中第一个字节的编号,建立TCP连接时双方随机选择序列号
ACKs:希望接收到的下一个字节的序列号
3、UDP
基本是对IP协议简单封装的基础上加上以下两个功能:
UDP多路复用、多路分用
传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程;
从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层;
UDP检验和(checksum)
三、可靠数据传输(rdt)原理
何为可靠:数据包不错、不丢、不乱
1. 流水线机制
流水线机制即同时发送多个packet。
2. 滑动窗口
管理空中的packet(未经确认),即序列号的范围。随着协议的运行,窗口在序列号空间内向前滑动。主要包括:GBN,SR。
GBN 处理乱序时,由于接收方没有缓存,因此重发的packet较多,造成一定的浪费
SR 接收方对每个packet单独进行确认,设置缓存机制,缓存乱序到达的packet 发送方只重传没收到ACK的分组(每个packet有单独的计时器)
3. 可靠数据传输
TCP RTT和超时 大于RTT,过短会造成不必要的重传,过长会对段丢失时间反应慢
如何估计RTT?
SampleRTT:测量从段发出去到收到ACK的时间,求平均值EstimatedRTT。移动加权平均: EstimatedRTT = (1-⍺)EstimatedRTT + ⍺sampleRTT
DevRTT = (1- β)DevRTT + β|SampleRTT-EstimatedRTT|
超时时间TimeoutInterval = EstimatedRTT + 4*DevRTT
TCP发送方发送数据流程
从应用层接收到数据
创建Segment
序列号是Segment第一个字节的编号
开启计时器
设置超时时间:TimeOutInterval
重传引起超时的Segment
重启定时器
如果确认此前未确认的Segment,更新SendBase,如果窗口中存在未被确认的packet,重新启动计时器
快速重传机制
如果发送方收到对同一数据的3个ACK,则假定该数据之后的段已经丢失,在定时器超时之前即进行重传。
四、流量控制
基本思想:控制发送方传输数据不能太多、太快,以至于淹没接收方(buffer溢出)
方式:
Receiver通过在Segment的头部字段将RcvWindow告诉Sender
Sender限制自己已经发送的但未收到ACK的数据不超过接收方的空闲RcvWindow尺寸
注意:如果Sender接收到RcvWindow=0,会出现什么情况? 在这种情况下,发送方仍然可以发送很小的段,从而可以让接收方回复新的RcvWindow大小。
五、连接管理
发送发和接收方在传输数据之前会建立连接,同时交换Buffer和流量控制信息等。
* 通过三次握手建立连接:
客户主机向服务器发送SYN报文段,初始序列号等,此外不携带其他任何数据
服务器收到SYN报文段,答复SYNACK报文段,服务器分配缓存,选择初始序列号并答复客户机
客户机收到服务器SYNACK报文段后,会答复一个ACK报文段
为什么需要三次握手?两次是否可行?
* 通过四次握手断开连接:
客户端和服务端都可以主动发起断开
客户端socket调用关闭的函数,发送FIN报文段
服务器收到后,答复ACK
服务器发送FIN报文段
客户端收到FIN后,答复ACK,并等待一段时间(一般30s),如果这段时间内再次收到FIN,会再次发送ACK。
六、拥塞控制
太多发送主机发送了太多数据或者发送速度太快,导致网络无法处理。
主要表现:packet丢失(路由器缓存溢出)、分组延迟过大(在路由器缓存中排队)
代价:时延变大,上游传输能力被浪费。
那么如何进行拥塞控制呢?管制发送方发送速率
端到端拥塞控制 网络层不需要显式的提供支持,端系统通过观察loss,delay等网络行为判断是否发生拥塞(TCP采用此种方式)
网络辅助的拥塞控制 路由器向发送方显式地反馈网络拥塞信息,简单的拥塞指示(1bit)
ATM ABR(available bit rate)拥塞控制
发送发发送RM cells,交换机设置RM cell位:NI bit:rate不许增长,CI bit:拥塞指示。RM cell由接收方返回给发送方。
TCP如何控制网络速率:
加性增-乘性减:AIMD
逐渐增加发送速率,谨慎探测可用带宽,直到发生loss。每个RTT将congwin增大一个MSS,发生loss后将CongWin减半。
慢启动:SS
当连接开始时,指数性增长。TCP连接建立时,CongWin=1,例:MSS=500 byte,RTT=200msec,初始速率=20k bps。初始速率很慢,但是快速攀升。
Threshold变量
该变量控制指数增切换到加性增。loss事件发生时,Threshold被设为Loss事件前CongWin值的1/2。
Loss事件的处理
如果是3个重复的ACK,CongWin将为原来的1/2,如果是超时造成的loss,CongWin降为1。
- 点赞
- 收藏
- 关注作者
评论(0)