一、传输层概述
一、基本概念
传输层是端到端的协议。
因特网的两种不同的传输层协议:
TCP:面向连接
UDP:无连接
我们在学习的过程中,只需要关注传输层之间的通信,不需要关注传输层协议数据是经过路由器转发至目的网络,如果经过数据链路层和物理层在目的网络中传递的。只需要关注两主机之间产生的关系即可。
二、传输控制协议TCP
一、TCP和UDP的对比
TCP(transmission control protocol):传输控制协议
UDP(user datagram protocol):用户数据报协议
一、数据传输方式
TCP是面向连接的可靠传输
UDP是无连接的不可靠传输
二、单播、多播、广播的支持
三、对应用报文的处理
UDP是面向应用报文的,既不合并也不拆分,从应用层来的报文直接封装,发送。
TCP是面向字节流的,并且发送方和接收方不一定使用同样大小的数据块,只需确保字节流是一样的即可,TCP是全双工通信的。
四、为上层提供的服务
UDP由于提供的是无连接不可靠传输服务,适用于实时应用。
五、数据报首部
UDP数据报;TCP段文报
二、TCP的流量控制
TCP以报文段为单位传输,两主机建立连接,A有发送窗口,B有接收窗口。
累积确认,超时重传。
注意,在接收到确认帧之后,就会按规则移动发送窗口,调整发送窗口大小。
三、TCP的拥塞控制
实际上的发送窗口大小=min{拥塞窗口大小,接收方的窗口大小}。
实际上就是刚开始拥塞窗口大小为1,然后按照慢启动算法和拥塞避免算法计算拥塞窗口大小,如果出现“拥塞”:
两种情况:
①超时:则将慢启动阈值减半,拥塞窗口从1开始
②收到三个重复确认:将慢启动阈值减半,拥塞窗口=阈值 ;
注意:慢启动算法按指数增加,即1->2->4->8->16->32....
拥塞避免算法按线性增加,即ssthresh->ssthresh+1->ssthresh+2->ssthresh+3....
四、TCP超时重传时间的选择
直接按停等协议考虑了==
注意是每发送一个报文段都会重新计算一个超时重传时间,具体表现为,收到一个确认报文则计算(此时同时发送一个TCP报文段),超时重传的时候也会发送一个报文段,这个时候也会重新计算。
每一步都需要记住的值:RTTs(平滑往返时间smooth),RTTD,RTO
只有第一步进行特殊处理,之后的每一步都按照公式计算。
并且除了重传的ROT使用原来的ROT计算,其余的ROT都是用本次RTTS和RTTD计算的
重传时,原来的RTTs和RTTD不变,ROT变为原来的两倍。
五、TCP的可靠传输
TCP将上层的字节流,封装在TCP报文段中,TCP报文段增加了一个TCP首部,我们考虑的是实际传输的数据载荷部分。
注意TCP的滑动窗口协议与选择重传协议的区别:
TCP滑动窗口,是累积确认的,而且会进行流量控制,确认时自己的窗口大小给发送方;确认的窗口号是接下来想要接收的,而SR是最后一个接受到的。
其他的很像,比如乱序接收,按序发送,超时重传。
六、TCP的运输连接管理
一、TCP的连接建立
A首先发送的是一个序号为seq=x(消耗一个序号),B发送一个ack=x+1的确认,并且对于B来说这个确认报文段的序号是任意的,A随即回礼ack=y+1,seq=x+1(之前消耗了一个)。
二、TCP的连接释放
七、TCP首部格式
我们会发现一个TCP报文段中包含了本次要传给接收方的数据,以及数据的序号,同时包含了对接收方发来的数据的一个确认!(全双工嘛)
数据偏移字段指的是首部的大小,以四字节为单位取值。
序号字段是指本次TCP报文段数据载荷部分的首字节流的序号。
窗口 是指 控制发送方的窗口大小!
URG和PSH都是接受到了就将报文段直接向上交付。
同步SYN是三报文握手时需要用到的,
终止FIN是四报文挥手时需要用到的,发送方想断开连接,接收方用FIN表示自己已经发送完毕,继续进一步释放连接。
三、总结