计算机网络——运输层

计算机网络——运输层
摘要由CSDN通过智能技术生成

计算机网络——运输层

计网学习笔记整理



一、运输层概述

举例类比:
A、B酒店分别位于重庆和深圳,两个酒店的住户总是会相互寄邮件,A酒店101住户想寄一封邮件给B酒店202房间的朋友,操作流程是将信封放在房间门口,酒店服务人员会收集各个住户门口的待寄邮件,然后送到酒店大门口,然后政府邮政系统会将所有的邮件从重庆寄到深圳的B酒店,B酒店也会有一个酒店服务人员,负责收集或者分发邮件,将邮件放到B酒店202房间门口,最后住户收到邮件。
A、B酒店等同两个通信的端系统,住户就是不同的应用程序,酒店地址就是IP地址,101、202房间号就是端系统上不同进程的端口值,房间门口就是应用层和运输层之间的接口(即套接字),酒店服务人员就是运输层协议,政府邮政系统是网络层协议。

运输层位于应用层和网络层之间,协议包括TCP和UDP运输层协议;
运输层为不同端系统上运行的进程提供逻辑通信的服务;
运输层协议只工作在端系统中;
网络层只“尽最大努力”交付报文段,不做任何保证,运输层的TCP协议会提供可靠的数据传输服务;
网络层的责任是提供两个端系统间的数据交付服务,运输层将服务扩展为端系统上不同进程间的数据交付服务,这种扩展称为运输层的多路复用;

二、运输层的原理

运输层最基本的两项服务是报文交付和差错检查,TCP提供的两项额外服务:可靠数据传输和拥塞控制

1.可靠数据传输机制的原理

如果采用严格的按顺序发送和接收,发送方发出一个报文段后,等待接收方反馈一个肯定确认(ACK),然后再选择重发或者发送下一个序号的报文段,这样会导致信道的利用率极低。
GBN协议(回退N步)中解决了此问题,该协议允许发送方尚未收到ACK便发送多个报文段,当然不能超过最大允许数N,让多个报文段填充到一条流水线中,N是窗口的长度(包含了序号为k到(k+N)的报文段),当序号k的报文段发送并确认后,窗口才能向后移动,所以GBN协议也叫滑动窗口协议。如果发送方没有收到序号k的报文段的ACK,则发送方将会重新发送k及k之后的报文段,即使接受方可能已经接收到后面的某些报文段,这些不必要重发的报文段会产生浪费。GBN包括的技术有使用序号、累计确认(即确认了k,表示k之前的报文段全部确认完成)、检验和、超时重发等。
在SR协议(选择重传)中可以解决这种浪费,接收方不需要严格的按顺序接收,可以将乱序的报文段缓存,由于没有收到序号k的ACK反馈,所以在发送方窗口不能滑动,在这个窗口中,发送方会将没有收到ACK的报文段重发,这样就避免了不必要的重发浪费。当k重发并确认后,窗口再继续向下滑动,以便继续发送。需要注意的是,为了防止发送方和接收方窗口的不同步带来的序号冲突,规定窗口长度必须小于等于序号空间的一半,如窗口长度N=3,则序号至少为0到5(6个大小)。
可靠数据传输机制及其用途:
1)检验和:用于检测传输中的比特错误
2)定时器:用于分组或ACK丢失后超时/重发
3)序号:数据分组按顺序编号,根据接收分组的序号间空隙判断所丢失的分组,根据分组的冗余副本判断ACK丢失
4)肯定确认(ACK)、否定确认(NAK):接收方反馈接收状态
5)窗口:发送方只被允许发送窗口内包含的分组

三、TCP和UDP协议

1.TCP和UDP的区别

TCP(传输控制协议)提供了可靠的、面向连接的服务,UDP(用户数据报协议)提供了不可靠、不面向连接的服务;
UDP只提供了两项最低限度的运输层服务:进程间的数据交付和差错检查,本质上就是网络层协议加上多路复用、多路分解的服务;
TCP还提供了额外的服务:可靠的数据传输和拥塞控制;
一个UDP套接字是由一个二元组来标识的,包括目的IP、目的端口值;而一个TCP套接字是由一个四元组来标识,包括源IP、源端口值、目的IP、目的端口值;
每个TCP报文段都有20字节的首部开销,而UDP仅有8字节;
UDP报文段首部:源端口值、目的端口值、长度(首部加数据)、检验和四部分各占2字节,一共8字节开销;
TCP报文段首部:源端口号、目的端口号、序号、确认号(期望收到下一个报文段的序号)、首部长度、保留未用、标志字段、接收窗口、检验和、紧急数据指针共20字节,以及选项字段(可选和可变);

2.TCP三次握手、四次握手

TCP建立连接:
1)客户端发送一个报文段请求连接,随机生成一个client_isn(初始序号),SYN字段置1,所以也叫SYN报文段,客户端进入SYN_SEND状态,等待确认;
2)服务器收到SYN报文段后,为TCP连接分配缓存和变量,为接收客户端报文段做好准备,然后返回一个报文段响应连接,随机生成一个server_isn序号,确认号为client_isn + 1,SYN置1,该报文段也叫SYN ACK报文段,服务器进入SYN_RECV状态;
3)客户端收到SYN ACK后,也要分配缓存和变量,序号为client_isn + 1,确认号为server + 1,SYN置0,该报文段负载中已经可以携带发送的数据了双方进入ESTABLISHED状态,完成TCP连接;
TCP关闭连接:
1)客户端发送一个报文段请求关闭连接,FIN字段置1,客户端进入FIN_WAIT1状态;
2)服务器收到FIN报文段后,回复ACK,服务器进入CLOSE_WAIT状态,客户端接收ACK后进入FIN_WAIT2状态;
3)服务器将缓存和变量释放后,发送终止报文段,FIN字段置1,服务器进图LAST_ACK状态;
4)客户端收到FIN报文段后,回复ACK,此时,两台主机上的资源都已经释放完毕,客户端进入TIME_WAIT状态,并等待30秒,最后进入CLOSE状态,服务器接收到ACK后进入CLOSE状态,完成TCP连关闭;

3.TCP的可靠数据传输

TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损坏、无间隙、按序的数据流,确保该字节流和发送方的字节流相同;
序号是建立在传送的字节流上,而不是建立在报文段的序列上,例如1000字节的报文,MSS(最大报文长度)为100字节,初始报文段序号为0,则第二个报文段序号为100,后面依次为200、300…
确认号是主机期望接收的下一个报文段的序号;
TCP并不为每一个报文段测量样本RTT(发出到确认的时间间隔),也不为重传报文段测量,而是仅在某些时刻为已发送为确认的报文段测量样本RTT,并通过EWMA(指数加权移动平均)生成估计RTT,公式:估计RTT = 0.875 x 估计RTT + 0.125 x 样本RTT。最后计算出重传的超时间隔,即估计RTT加上余量得到,如果样本RTT波动大,则余量应该大些,反之则小些;
TCP自己无法分辨报文段丢失或者损坏或者其ACK丢失或者拥塞导致超时的区别,发送方的响应是相同的,都会重传有疑问的报文段;
关于重传的定时器,如果像在原理中提到的将每个已发送为确认的报文段与一个定时器做关联,那么对定时器的管理会产生很大的开销;
超时间隔加倍,如果每个报文段超时未接收ACK,则重新发送的超时间隔会在上一次的基础上翻倍,防止网络拥塞超出超时情况发生时,不断重发的分组会加重拥塞;
快速重传,如果发送方收到了相同数据的3个冗余ACK(即已经确认过的报文段的ACK),则判断为该报文段的下一个报文段已经丢包,即使定时器未超时,也要立即重发报文段;
TCP像是GBN协议和SR协议的混合体,TCP的确认属于累计确认,看起来像是GBN,但是TCP接收方可以将失序的报文段缓存起来,所以发送丢包时,发送方只需重发丢失的那个报文段,而不需要全部重发。所以TCP结合了GBN的累计确认和SR的选择重发;
流量控制,TCP双方都有一个缓存区,用于缓存正确、按序的字节,如果应用层来不及读取,会导致缓存溢出的情况发生,流量控制是一个速度匹配服务,即让发送方和接收方的应用程序读取速率匹配。注意这和拥塞控制的虽然做法相同,但其目的不同,拥塞控制是为了缓解网络层的拥塞问题;

4.TCP的拥塞控制

4.1运输层拥塞控制分为:

1)端到端拥塞控制:网络层没有为运输层的拥塞控制提供显式支持;
2)网络辅助的拥塞控制:路由器向发送方提供关于网络中拥塞状态的显式反馈信息;

4.2TCP拥塞控制:

TCP采用的办法是让每一个发送方根据所感知的网络拥塞程度来限制自己发送流量的速率,因此产生了三个问题:
1)发送方如何调整自己的发送速率?通过调整窗口的长度;
2)发送方如何感知丢包事件?超时或者3个冗余ACK(共收到4次ACK);
3)拥塞感知到了,采用什么算法来调整发送速率?
拥塞控制算法:
1)慢启动;每过一个RTT,窗口数量(初始为1)就翻倍,出现丢包事件时,设置一个阈值为丢包时窗口数量的一半,然后窗口数量重新变为1;
2)拥塞避免;进入拥塞避免状态时,阈值为上次发送丢包事件的窗口数量的一半,然后采用保守增长方式,每过一个RTT,窗口数量加1;
3)快速恢复;在拥塞避免时,检测到三个冗余ACK,降低窗口数量(具体降低多少窗口数量?)后再次进入拥塞避免状态;
一条TCP连接的平均吞吐量 = (1.22 x MSS)/(RTT x 根号L);MSS:最大报文长度;RTT:往返时间;L:丢包率;


总结

计算机网络划分为网络边缘和网络核心,网络边缘又包括应用层和运输层,运输层的两个协议TCP和UDP都不是完美无缺的。该笔记记录了UDP和TCP的简单区分,同时针对TCP提供的可靠数据传输和拥塞控制两项额外服务,从原理上介绍了TCP如何在细节上实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值