TCP/IP体系架构之运输层

运输层协议概述

进程间的通信
运输层向它上面的应用层提供通信服务,通信的端点是主机中的应用进程
复用:不同应用进程可以使用同一个运输层协议传输数据
分用:接收方的运输层在剥去报文首部后能把这些数据正确交付到目的应用程序

运输层的两个主要协议
UDP
(1)无连接的,发送数据不需要先建立连接
(2)尽最大努力交付,不保证可靠交付,因此主机不需要维持复杂的连接状态表
(3)UDP是面向报文的。对应用层交下来的数据报不拆分也不合并。直接添加首部后就交给IP层
(4)UDP的首部开销小
TCP
(1)面向连接
(2)点对点,每条连接只有两个端点
(3)可靠交互(无差错,不丢失,不重复,按序到达)
(4)全双工通信。两端都设有发生请求和接受请求
(5)面向字节流。(报文以字节为单位)

可靠传输的工作原理
停止等待协议 (自动重传请求ARQ协议)
每次发送方发送完一个分组就停止发送,等待对方发送确认。在接到确认后再发下一分组。
超时重传:发送方只要在一段时间内没有收到确认,就重传前面发送过得分组。
连续ARQ协议
连续ARQ请求:滑动窗口,发送窗口中没有发送过的分组。接收方采用累积请求确认,对按序到达的最后一个分组发送确认。发送方接送到确认后,窗口就向前
移动相应个数的分组数

TCP报文段的首部格式

TCP/IP体系架构之运输层_第1张图片
源端口和目的端口:
序号seq: TCP连接中每一字节都按顺序编号。整个要传输的字节流的起始序号要在连接建立时设置。
首部中的序号表示的是本报文段发送的数据第一个字节流的序号
确认号ack:期望收到对方下一个报文段第一个数据字节的序号
确认ACK:仅当ACK=1时确认号字段ack才有效。TCP规定建立连接后所有传送的报文段都必须把ACK指1
同步SYN: 在建立连接时用来同步序号
终止FIN:用来释放一个连接。当FIN=1时,表示此报文发送方的数据已经发送完毕,并要求释放连接
窗口rwnd:允许发送方发送的数据量
TCP连接三次握手:
TCP/IP体系架构之运输层_第2张图片
为什么要第三次握手
    假设A发送的第一个连接请求报文段,在某一网络节点长时间滞留,没有丢失,以致于延误到连接释放以后的某个时刻到达B.本来这是一个早就失效的连接请求报文段。但B收到后以为是新的连接请求。于是向A发送确认报文段,同意建立连接。假设不采用三次握手,那么B发出确认后连接就建立了。
    由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B以为新的连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了
    采用三次握手可以避免这种情况的发生。例如在上述情况了,A不会向B的确认发出确认。由于B没有收到A的确认,就知道A并没有发出连接请求
TCP连接释放四次握手:
TCP/IP体系架构之运输层_第3张图片
为什么要2MSL的TIME-WAIT等待时间
MSL:最长报文段寿命
第一,保证A最后的一个ACK报文段能够成功到达B。LAST-ACK状态的B收不到已发送的ACK+FIN报文段的确认,会在超时后重传FIN+ACK报文。
第二,可以使本次连接持续时间内所产生的所有报文段都从网络中消失。这样就可以在=使下一个连接中不会出现这种旧连接请求报文段

TCP可靠传输的实现
以字节为单位的滑动窗口
TCP/IP体系架构之运输层_第4张图片
B接收窗口在收到序号31的数据后,会把31~33交付给主机,然后删除这些数据,对A给出确认,确认号为34。
A收到34确认号后,把窗口向前移动3个序号,P2保持不动
当P2与P3重合,发送窗口内的序号已经用完,但还没收到确认。由于可用窗口为0,因此发送必须停止,
A在经过一段时间后就重传这部分的数据,重新设置超时计时器,直到收到B的确认为止。
超时重传时间选择
报文段往返时间RTT
加权往返时间RTTs
新RTTs=(1-a)*旧的RTTs+a*新的RTT样本
RTTD是RTT的偏差加权平均值
RTTD=(1-B)*旧的RTTD+B*(RTTs-新的RTT样本)
超时重传时间RTO=RTTs+4*RTTD

TCP流量控制
通过rwnd字段控制发送窗口的大小,来控制发送方的发送速率
发送方窗口的上限值=Min[rwnd,cwnd]
TCP拥塞控制
1.慢开始
RTT:一次传输的往返时间(一次传输全部发送到收到全部确认的时间)
慢开始:慢指的是开始发送报文段时先设置cwnd(拥挤窗口)=1,慢开始阶段每过个RTTcwnd翻倍增长
ssthresh慢开始门限值
当cwnd
当cwnd>ssrthresh 时,停止使用慢开始算法,改用拥塞控制算法
拥塞避免算法的思路是,每经过一个RTT时间cwnd就加1.
无论在慢开始阶段,还是在拥塞避免阶段,只要判断网络发生拥塞就把ssrthresh设置为发生拥挤时窗口值的一半(乘法减小),把cwnd设置为1,执行慢开始算法

2.快重传,快恢复
快重传:要求接受方收到一个失序的报文后就立即发出重复确认(让发送方尽早知道有报文没有到达对方),当发送方一连收到三个重复的确认后,立即重传丢失的报文段。
快恢复:结合快重传,当收到三个重复的确认后,ssrthresh就执行乘法减小,把cwnd的值设为乘法减小后的ssrthresh值

TCP/IP体系架构之运输层_第5张图片

慢开始:实际生活中,下载东西的时候,下载速度不会一下子达到最大的速度,就是因为慢开始的原因
 




你可能感兴趣的:(计算机网络,计算机网络)