传输层总结

传输层作用

传输层实现应用进程间的端到端(end-to-end)通信
向应用层提供通信服务

多路分解与复用

定义
所有应用进程的数据通过传输层传输到IP层,即多路复用;
传输层收到的数据交付给相应的应用进程,即多路分解。

端口
1.熟知(系统)端口号(0~1023)
常用端口号
2.登记端口号(1024~49151):供服务提供商使用,需要在IANA登记,防止重复
3.客户端端口号(49152~65535):供客户端使用,动态选择

UDP传输由<主机IP,端口号>二元组唯一标识
TCP连接由<源端口号,源主机IP,目的端口号,目的主机IP>四元组唯一标识

用户数据报协议UDP

端到端的、尽力而为的、无连接的数据报传输服务
1.无连接的
2.尽最大努力交付,即不保证可靠交付
3.面向报文的(在IP的功能上简单扩展了端到端)
4.没有拥塞控制
5.支持一对一、一对多、多对一和多对多的交互通信(需要组播的通信都是建立在UDP之上)
UDP首部

传输控制协议TCP

端到端的、可靠的、面向连接的字节流服务
1.面向连接:先建立逻辑连接,进行双向数据流传输,通信结束后撤销连接
2.面向字节流
3.点对点的全双工通信
4.可靠传输:对一个连接上传输的每个字节编号,通过接收确认和重传来保证可靠传输
5.流量控制:防止发送方发出的数据超出接收方的接收能力
6.拥塞控制:防止过多数据注入网络造成网络结点或链路超载
TCP首部
多路复用:源、目的端口
连接管理:序号、确认号、SYN、FIN
可靠传输:序号、确认号
流量控制:接收窗口
拥塞控制:未在TCP首部中体现(序号、确认号、接收窗口)

1.连接管理

每条TCP连接是一对点到点的字节流
每条TCP连接者两个端点,即套接字(sokect)={IP : port}
每条TCP连接由两个端点唯一标识,TCP连接={socket1, socket2} = {{IP1 : port1}, {IP2 : port2}}
TCP连接有3个阶段:连接建立、数据传输、连接释放

1)TCP连接建立的目的
①使通信双方确知对方的存在
②双方确定自己的初始序列号,并通知对方
③允许双方协商一些参数(最大报文长度、窗口大小等)
④对传输实体资源进行分配

2)TCP连接建立的方式
采用客户端服务器方式(C/S),主动发起连接建立的应用进程叫做客户端,被动等待连接建立的叫服务器端。

3)连接建立(三次握手)
①服务器进程B被动打开连接,进入LISTEN(收听)状态,等待客户端发出请求
②客户进程A主动打开连接,向B发送连接请求报文段(报文段不挟带数据),SYN=1,序号=x,进入SYN-SENT(同步已发送)状态
③服务器进程B收到请求后,向A发送确认报文段(报文段不挟带数据),SYN=1,ACK=1,确认号=x+1,序号=y,进入SYN-RCVD(同步收到)状态
④客户进程A收到确认后,向B发送确认报文段(报文段可以携带数据,不携带数据时不消耗序号,下一个序号依然是x+1),ACK=1,确认号=y+1,序号=x+1,进入ESTABLISHED(已建立连接)状态,B收到确认后,也进入ESTABLISHED状态
这里写图片描述
为什么A需要向B发送最后一个确认报文段:为了防止“已失效的连接请求报文段”突然又传到B发生错误,以至于B一直等待A发送数据,B的资源被浪费。

4)连接释放(四次挥手)
①A,B都处于ESTABLISHED状态;
②客户进程A主动关闭连接,向B发送连接释放请求报文段(报文段不挟带数据),FIN=1,序列号=u,进入FIN-WAIT-1(终止等待1)状态;
③B收到A的连接释放报文段后,应答确认,ACK=1,确认号=u+1,序号=v,进入CLOSE-WAIT (关闭等待)状态,B仍然可以向A发送数据,A进入FIN-WAIT-2(终止等待2)状态;
④若B已经没有向A的数据,其应用进程通知TCP连接释放,B向A发送连接释放报文段,FIN=1,ACK=1,确认号=u+1,序号=w,进入LAST-ACK(最后确认)状态;
⑤A收到B的链接释放报文段后,应答确认,ACK=1,确认号=w+1,序号=u+1,进入TIME-TIME-WAIT(时间等待)状态,B收到A的确认后,进入CLOSED状态
这里写图片描述
A必须经过时间等待计时器设置的时间2MSL(默认2分钟)后,进入CLOSED状态:确保A发送的最后一个ACK报文段能够到达B;防止“已失效的连接请求报文段”出现在本连接中。

2.可靠传输

发送方的TCP:维护一个发送缓冲区
维护3个指针:LastByteAcked、LastByteSent、LastByteWritten
发送窗口=min(通知窗口,拥塞窗口)
累积确认(Cumulative ACK) :对按序到达的最后一个报文段进行确认
选择确认(Selective ACK) :确认接收到的不连续的数据块的边界(使用首部的SACK选项,不影响确认号字段的使用)
这里写图片描述

3.流量控制

目的:为了防止发送方给慢接收方发数据造成接受崩溃,缓冲区溢出
原理:接收方通知发送方自己的接受窗口大小,发送方的发送窗口≤接收方的接受窗口

问题:B向A发送了零窗口报文段后,B的接受缓存有了一些存储空间,于是B向A发送了rwnd=400的报文段,然而报文段在传送过程中丢失,这样A一直等待B发送的非零窗口通知,B一直等待A发送数据,从而形成死锁局面。
解决:TCP为每一个连接设置一个持续计时器,只要TCP链接一方收到零窗口通知,就启动持续计时器,计时器到期,发送零窗口探测报文段,而对方就在确认这个探测报文段时给出现在的窗口值,①如果窗口仍然是零,那么重新设置持续计时器;②否则死锁的僵局就可以打破。

4.自适应重传

1)超时重传
报文段的往返时间:RTT
加权平均往返时间:RTTS
RTT的偏差加权平均值:RTTD
超时重传时间:RTO
RTTS = (1 - α) * RTTS + α * 新的RTT样本值 (α一般为1/8)
RTTD = (1 - β) * RTTD + β * | RTTS - 新的RTT样本值 | (β一般为1/4)
RTO = RTTS + 4 * RTTD

Karn算法:
①每次超时重传一个报文段时,停止计算新RTT样本值
②每次超时重传一个报文段时,就把超时重传时间RTO增大y倍(一般为2倍)
③当不发生报文段重传时,才计算RTTS和超时重传时间RTO

2)快速重传
原因:超时重传作为TCP最基本的重传机制,效率较低。
这里写图片描述
超时的粗粒度实现方法导致连接在等待一个定时器超时时,很长一段时间连接无效。

基本思想:
①接收方:当报文段到达,立刻回复ACK,即使该序号已被确认过
②发送方:收到一个重复ACK(同一个确认的再一次重传称为重复确认),就知道接收方必定收到乱序到达的报文段,表明其前面的分组可能丢失。收到3个重复ACK时,立刻触发重传。
这里写图片描述

5.拥塞控制

1)窗口大小
MaxWindow = min (cwnd, AdvertisedWindow)
拥塞窗口cwnd (Congestion Windows):拥塞控制算法决定,可以同时发出的最大字节数以防止造成网络拥塞
通知窗口 (AdvertisedWindow):接收方决定,可以同时发出的最大字节数以防止超出接收方的接收能力

2)拥塞控制算法
①慢启动
把初始拥塞窗口 cwnd 设置为不超过2至4个SMSS(最大报文段长度),在每收到一个对新的报文段的确认后,把cwnd增加1个 SMSS 的数值数(每经过一个传输轮次,cwnd就加倍)
设置一个慢开始门限ssthresh
当cwnd < ssthresh时,使用慢开始算法
当cwnd ≥ ssthresh时,使用拥塞避免算法
这里写图片描述
②拥塞避免(加法增大):每经过一个往返时间RTT把发送方的cwnd加1,使得cwnd慢性增加
③快重传(乘法减小):收到3个重复ACK立即触发重传
④快恢复(在快重传之后)
1. ssthresh减小为当前cwnd的一半:ssthresh = cwnd / 2
2. 新拥塞窗口 cwnd = 新的 ssthresh
3. 执行拥塞避免 (AIMD),使cwnd缓慢线性增大
这里写图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值