5.1 运输层协议


运输层向上面的应用层提供通信服务,为两个主机进程间提供端到端的逻辑通信。

运输层的复用与常见端口

  • 运输层的复用/分用技术靠端口号实现;
  • 运输层向下屏蔽了网络层的核心;
  • TCP:逻辑信道相当于一条全双工可靠信道;
  • UDP:相当于一跳不可靠信道;

常用端口

FTP		TCP		21		文件传输
SSH		TCP		22		加密传输
TELNET	TCP		23		远程终端接入
SMTP	TCP		25		邮件
HTTP	TCP		80		超文本传输
HTTPS	TCP		443
====================================
DNS		UDP		53		名字转换
RIP		UDP		520		路由选择
DHCP	UDP		67		IP地址配置
IGMP	UDP		?		多播
TFTP	UDP		69		简单文件传输
……

端口号分类:

  1. 服务器使用的端口号:
    • 系统端口号: 0 ~ 3FF
    • 登记端口号: 400 ~ BFFF
  2. 客户端使用的端口号: C000 ~ FFFF

UDP协议

特点

  • 无连接的
  • 尽最大努力交付
  • 面向报文的
  • 无拥塞控制(允许丢失一些数据,但不允许数据有大的延迟)
    • 可能会造成更严重的拥塞问题;
  • 一对一、多对多交互通信
  • 首部开销小(8字节)

UDP帧格式

  • IP的伪首部用于校验和(12字节)
  • 8字节首部
伪首部		源IP地址4B		目的IP地址4B		1B		类型1B		UDP长度2B
											 0		 17

首部		源端口		目的端口		长度		校验和
				2			 2		 2			  2B

UDP校验和计算需要加上伪首部,类似IP的计算方式(16bit求和取反)

TCP协议

特点

  • 面向连接的运输层协议
  • 端到端的通信
  • 可靠的通信
  • 全双工的通信
  • 面向字节流的(将程序交付下来的数据看成无结构的字节流)

socket套接字

TCP把连接作为最基本的抽象。
TCP连接的端点叫做套接字(IP地址:端口号)

可靠传输工作原理

理想传输特点:

  • 信道不产生差错;
  • 无论发送方速率多快,接收方总是来得及接收;

可靠传输流程:

  • 停止等待协议
    • 无差错情况
    • 出现差错
    • 确认丢失与迟到
    • 信道利用率
  • 无差错ARQ协议:对最后一个到的分组发送确认
    • 124到,发2的确认;
    • 5到,发2的确认;
    • 2、7到,发5的确认;
    • 每到一个,必须发确认。

需要注意情况(无差错):

  1. 暂存已发送分组副本至收到确认信号;
  2. 发送分组、确认分组都必须编号;
  3. 重传时间比RTT时间要稍微长一些;

TCP帧首部

TCP报文
TCP检验和也要添加伪首部

重要字段

  • 序号(seq):发送每一个字节都要编号;
    • 假如本次发送了100有效字节,下一次发送编号+100;
  • 确认号(ack):期望对方下一个报文段的第一个数据字节的序号;
  • 紧急URG:若为1则紧急字段有效;
  • 确认ACK:ACK=1时确认字段有效;
  • 同步SYN:SYN=1,ACK=0时表示请求连接的报文;
  • 终止FIN:FIN=1表示终止请求;
  • 校验和:同UDP;
  • 时间戳:计算RTT等

TCP可靠传输

以字节为单位的滑动窗口

依次发送窗口内的数据,收到回复确认后移动窗口、修改窗口大小;超时后重新发送需要发送的字节

选择超时重传时间

R T O = R T T S + 4 ⋅ R T T D RTO = RTT_S + 4{\cdot}RTT_D RTO=RTTS+4RTTD

n e w R T T S = ( 1 − α ) ⋅ o l d R T T S + α ⋅ R T T , α = 1 8 newRTT_S = (1-\alpha) \cdot old RTT_S + \alpha\cdot RTT,\alpha = \frac{1}{8} newRTTS=(1α)oldRTTS+αRTTα=81

n e w R T T D = ( 1 − β ) ⋅ o l d R T T D + β ⋅ ∣ R T T S − R T T ∣ , β = 1 4 newRTT_D = (1-\beta) \cdot old RTT_D + \beta\cdot |RTT_S - RTT|,\beta = \frac{1}{4} newRTTD=(1β)oldRTTD+βRTTSRTTβ=41

  • 第一次测量时, R T T D RTT_D RTTD取测量到的RTT样本的一半;
  • 重传报文不计算RTT;
  • 每次重传RTO应适度增大;

选择确认SACK(未经常使用P227)

TCP流量控制

让发送方的发送速率不要太快,要让接收方来得及接受;

  • 接收方来不及处理数据时,可以先将窗口设置为0,等缓存空间空闲大于一半时,再通知对方。

TCP拥塞控制

拥塞:网络中对资源的需求超过了该资源所能提供的可用部分。

拥塞控制:防止过多的数据注入到路网络中,使路由器或链路不至于过载

  • 流量控制时端到端的问题;
  • 拥塞控制是全局性的问题;
  • 拥塞控制用一些信息通知端,网络出现麻烦,需要降低放松速率;

TCP拥塞控制办法:慢开始、拥塞避免、快重传、快恢复

指数上升,线性增长,乘法减小,快速恢复;

AIMD:加法增大乘法减小

拥塞控制效果图:
TCP拥塞控制

拥塞控制关键词:

  • cwnd:拥塞窗口,计算单位;
  • SMSS:发送方最大报文段,计算cwnd的字节数;
  • ssthresh:慢开始门限;

慢开始与拥塞避免

  • 先发送1个cwnd的数据;
  • 接收到确认报文段后,每个传输轮次,cwnd数量指数增长;
  • 当cwnd > ssthresh时,进入拥塞避免阶段;
  • 拥塞避免阶段,每个传输轮次,cwnd + 1;

出现超时:

  • ssthesh变为原先一半;
  • cwnd从1重新指数增长;

快重传与快恢复

接收方对失序的报文段必须立即回复,连续三次重复确认回复,发送方重新发送。
此时发送的拥塞创空与慢开始门限如下:

  • ssthesh:变为之前一半(误认为超时之前);
  • cwnd:变为与ssthesh一样,直接进入线性增长阶段。

eg:

  • A发送123456;
  • B收到13,回复2;
  • 收到4,5,6分别回复2,2,2;
  • A收到连续三次回复2,立刻重新发送2,并跳过慢开始阶段,直接进入拥塞避免阶段。

TCP连接建立与断开:

连接建立、数据传送、连接释放:

TCP连接建立

TCP三次握手

注意:

  • 1、2次握手,不能携带数据,必须消耗序号seq;
  • 3次握手,可以携带数据,不带数据不消耗序号seq;

2次握手为什么不行

  • 若第二次握手消息包丢失,则服务器进入无限等待客户机数据状态;
  • 若第一次握手的请求包延迟(多发了一个,前一个延迟到达,到达时前一次传输已经结束),服务器回复同意连接,陷入无限等待数据阶段。

TCP连接释放

TCP四次挥手

  • FIN不携带数据也需要消耗一个序列
  • 客户机(最先发送释放连接请求的),最后需要等待两个MSL(最长报文段寿命)

为什么要等待两个MSL

  • 保证最后的ACK报文段能够到达服务器(可能因网络问题被丢弃)
  • 保证网络中所有连接请求报文段都已失效。

保活计时器

TCP有限状态机

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值