第二章应用层
①应用层协议对应支撑的运输层协议
第三章传输层
②运输层功能:
1、提供进程间的逻辑通信,端到端的通信
2、复用和分用复用指的是发送方所有进程都可以使用同一个传输层协议发送数据,分用值得是接收方收到数据后在剥去报文首部后能把数据正确的交付到目的应用进程
3、对收到的报文进行差错检测,首部和数据部分都要检测,网络层只检测ip数据报的首部有没有错误,不检测数据部分
4、同时提供两种不同的传输协议,面向连接的tcp和无连接的udp,而网络层只能存在一种,面向连接的虚电路或者是无连接的数据报,不可能同时存在
●TCP服务
1、提供面向连接的服务,传送数据前建立连接,传输完成后释放连接
2、提供一条全双工可靠信道,保证数据无差错的传输,而且设备两端都具有发送缓存和接收缓存
3、不提供广播和组播服务,只提供一对一的连接
4、由于是可靠传输,确认,流量控制,拥塞控制计时器,连接管理等增加了许多开销,使协议数据单元的头部增加很多而且占用更多的处理机资源
5、tcp是面向字节流的。(虽然应用程序和tcp交互一次是一个数据块(大小不等),但tcp 把应用程序交付下来的数据仅仅看成一连串的无结构的字节流)
6、Tcp主要适用于可靠性更高的场合,如文件传输协议(FTP),超文本传输协议(HTTP),远程登录协议(TELNET)
●UDP服务
1、提供无连接的的服务。(传输数据前不需要建立连接,无连接状态,tcp需要维护连接状态,而udp不需要,所以udp服务器一般可以支持更多的客户机)
2、提供尽最大努力交付的不可靠连接
3、分组首部开销小,tcp20字节,udp8字节
4、应用层能更好的控制要发送的数据和发送时间,因为udp没有流量控制,因此网络拥塞不会影响主机发送效率
5、udp是面向报文的。(发送方udp对应用层交下来的保存既不拆分也不合并,添加首部后就下交给ip层,ip层交上来的报文去除首部后就原封不动交给上层,
一次交付一个完整的报文,即udp数据报处理的最小单位是报文)
●区别:
③Tcp快速重传
快速重传算法以收到三个冗余的ACK作为一个报文段已经丢失的标志。在收到3个重复的ACK之后,TCP不必等待重传定时器超时就可以重传看起来已经丢手的报文段。
当一个次序紊乱的报文段达到时,TCP接收端迅速发动一个重复的ACK,目的是通知发送端收到了一个失序的报文段,并告诉发送端自己期望收到的序号。
④Tcp延迟应答 nagle算法
Nagle和Delayed ACK机制都是通过减少不必要的网络传输来缓解拥堵。
Nagle算法主要是针对这种情形:网络存在大量的数据段很小的TCP包,虽然数据段很小比如只有1字节,但因为TCP包头需要占用一定的字节数,所以发送
这样的包时,大部分的传输开销花在包头上了,如果网络中有大量客户端都在频繁请求这样的小TCP包,就会造成拥堵。比如LINUX下的某些终端,每输入一个字符都会要求服务器端发送一次响应。
为了解决这个问题,Nagle算法会将小的发送请求缓冲,以期将待发送数据合并成一个完整大小的TCP包然后一次发送。它的逻辑是这样的:如果当前要发送的数据小于一个完整的TCP包数据段(Windows下是1460字节,其他系统是1448字节),发送将被延迟,数据将被缓存,直到:
1.有更多的数据需要发送,待发送数据凑齐一个完整的TCP包数据段大小
或者:
2. 前一个数据包被客户端确认了(收到客户端发来的ACK包)
第一点很好理解。第二点其实是为了使Nagle算法自动适应当前网络条件。算法假设通常情况下,客户端收到数据都会立即发送确认包确认。所以当网络条件很差时,数据包和ACK包的传输会经历更长的时间,这样Nagle算法就会等待更长时间以收集更多数据,从而缓解拥堵。反之,如果前一个包的确认包很快就到达了,那说明当前网络状况很好,所以无需过多等待。打个比方就是:今天我们到北京了,发现北京的车很多,路上很堵,所以大家就迁就一下,尽量拼车走。下周我们到了某个美国小镇,发现路很宽,没什么车,所以你一个人爱怎么开就怎么开。
Delay ACK的机制是这样的:如果当前只需要发送一个确认包,那么客户端就hold on,直到:
1.有后续的包需要发送,例如一个或多个数据包/ACK包(客户端可能连续
收到好几个数据包需要确认)。或者:
2.等待超过预设的timeout时间。(参见IETF RFC 11224.2.
3.2 When to
Send an ACK Segment,这个预设时间应该 < 500ms)
这个机制基于这样的假设:如果客户端没有其他任何数据需要发送,说明客户端与服务器端的交互已经结束了,所以这个ACK包晚一点发送无所谓。
⑥拥塞表现形式
拥塞的表现形式为:发送端吞吐量下降,分组的时延增加,分组重传,TCP报文段的丢失,增加的往返时延值,在路由器中分组的丢弃概率增大等等。
解决拥塞方法
根据网络层是否为运输层拥塞控制提供了显式帮助分为:
端到端控制:在端到端控制方法中,网络层没有为运输层拥塞控制提供显示支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(分组丢失与时延)来推断值。TCP必须通过端到端的方法解决拥塞控制,因为IP层不会向端
系统提供有关网络拥塞的反馈信息。TCP报文段的丢失(通过超时或者3次冗余确认而得知)被认为是网络拥塞的一个迹象,TCP会相应地减小其窗口长度。网络辅助的拥塞控制:在网络辅助的拥塞控制中,网络层构件(即路由器)向发送方提供关于网络拥塞状态的显式反馈信息。这种反馈可以简单地用一个比特来指示链路中的拥塞情况。分为两种:直接反馈信息可以由网络路由器发给发送方,一种采用了阻塞分组形式;路由器标记或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生,一旦受到一个标记的分组后,接收方就会向发送方通知该网络拥塞指示,后一种形式的通知至少要经过一个完整的往返时间。
讲述tcp tahoe/reno
慢启动和拥塞避免快速恢复和快速重传