运输层
湖科大计算机网络
参考笔记,如有侵权联系删除
概述
运输层的任务:如何为运行在不同主机上的应用进程提供直接的通信服务
运输层协议又称端到端协议
运输层使应用进程看见的好像是在两个运输层实体之间有一条端到端的逻辑通信信道
运输层为应用层提供了两种不同的协议:
- 面向连接的
TCP
- 无连接的
UDP
端口号、复用与分用
TCP/IP
体系的运输层使用端口号
来区分应用层的不同应用进程(为了使运行不同操作系统的计算机应用进程能够实现网络通信):
- 端口号用
16比特表示
,取值范围0-65535
: - 熟知端口号:0-1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如FTP使用21/20,HTTP使用80,DNS使用53
- 登记端口号:1024-49151,为没有熟知端口号的应用程序使用。
- 短暂端口号:49152-65535,留给客户进程暂时使用。
端口号只具有本地意义,端口号只是为了标识本计算机应用层中各进程,不同计算机的相同端口号没有联系
UDP与TCP的对比
注意:实际网络中,两端都可发送接收;一个TCP包含上千个报文段是很常见的
TCP的流量控制
滑动窗口机制:
- TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小
- TCP发送方收到接收方的零窗口通知后,启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文
TCP的拥塞控制
拥塞:对网络中某一资源的需求超过了所能提供的可用部分,网络性能变坏
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传
- 要求接收方不要等待自己发送数据才捎带确认,而是要立即发送确认
- 收到了失序的报文段也要立即发送对已收到报文段的重复确认
- 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
发送方一旦收到3个重复确认,就知道只是丢失了个别报文段,于是执行快恢复算法
- 发送方将慢开始门限
ssthresh
值和拥塞窗口cwnd
值调整为当前窗口的一半,开始执行拥塞避免算法 - 也有的快恢复门限
ssthresh
值和拥塞窗口cwnd
值再增大一些,等于新的ssthresh+3
TCP超时重传时间的选择
不能直接利用某次测量得到的
RTT
样本来计算超时重传时间RTO
利用每次测量的
RTT
样本,计算加权平均往返时间RTTs
(又称平滑的往返时间)显然,超时重传时间
RTO
应略大于加权平均往返时间RTTs
Karn
算法:在计算加权平均往返时间RTTs
时,只要报文段重传了,就不采用其往返时间RTT
样本。问题:报文段时延突然增大很多,并且保存很长一段时间。根据算法导致重传时间无法更新。
修正:报文段每重传依次,就把超时重传时间
RTO
增大一些,典型做法取为旧的2倍
TCP可靠传输的实现
发送方的发送窗口并不总是和接收方的接收窗口一样大
TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
TCP要求接收方必须有累积确认和捎带确认机制
- 接收方不应该过分退迟发送确认
- 捎带确认并不经常发生
TCP的通信是全双工通信
TCP基于以字节为单位的滑动窗口实现可靠传输
TCP连接建立
三次握手:
TCP连接释放
四次挥手:
是否需要时间等待?
如果没有,如果第四次挥手丢失,服务器会一直发送第三次挥手
TCP报文段的首部格式
TCP报文段等于首部加数据载荷
序号:占32比特,取值范围[0,2^32-1],序号增加到最后一个,下一个序号又回到0。
指出本TCP报文段数据载荷的第一个字节的序号
··
确认号:占32比特,取值范围[0,2^32-1],序号增加到最后一个,下一个序号又回到0。
指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认
若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据
确认标志位ACK:=1确认号字段有效;=0确认号字段无效
TCP规定,在连接建立后所有传送的TCP报文都必须把ACK置1。
数据偏移:占4比特,并以4字节为单位。
指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远(实际上指出了TCP报文段的首部长度)
首部固定长度20字节,因此数据偏移字段最小值为(0101)(二进制)
首部最大长度60字节,因此数据偏移字段最大值为(1111)(二进制)
保留:占6比特,保留为今后使用,目前应置为0。
窗口:占16比特,以字节为单位。
指出发送本报文段的一方的接收窗口
流量控制
校验和:占16比特,检查TCP报文段的首部和数据载荷。计算时,加上伪首部。
同步标志位SYN:在TCP连接建立时同步序号。
终止标志位FIN:用来释放TCP连接。
复位标志位RST:用来复位TCP连接。=1表明出现了异常,需要重新建立连接。
推送标志位PSH:=1尽快上交应用进程。
紧急标志位URG:=1紧急指针有效,=0无效。
紧急指针:占16比特,以字节为单位,用来指明紧急数据长度。
当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送
选项:
- 最大报文长度MSS选项:TCP报文段数据载荷部分最大长度
- 窗口扩大选项:提高吞吐率
- 时间戳选项:计算往返时间RTT;防止序号绕回PAWS
- 选择确认选项
填充:确保报文段首部被4整除
指明紧急数据长度。
当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送
选项:
- 最大报文长度MSS选项:TCP报文段数据载荷部分最大长度
- 窗口扩大选项:提高吞吐率
- 时间戳选项:计算往返时间RTT;防止序号绕回PAWS
- 选择确认选项
填充:确保报文段首部被4整除
408日快乐