第二章应用层①应用层协议对应支撑的运输层协议第三章传输层②运输层功能: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 toSend an ACK Segment,这个预设时间应该 < 500ms)这个机制基于这样的假设:如果客户端没有其他任何数据需要发送,说明客户端与服务器端的交互已经结束了,所以这个ACK包晚一点发送无所谓。
⑥拥塞表现形式拥塞的表现形式为:发送端吞吐量下降,分组的时延增加,分组重传,TCP报文段的丢失,增加的往返时延值,在路由器中分组的丢弃概率增大等等。
解决拥塞方法根据网络层是否为运输层拥塞控制提供了显式帮助分为:端到端控制:在端到端控制方法中,网络层没有为运输层拥塞控制提供显示支持。
即使网络中存在拥塞,端系统也必须通过对网络行为的观察(分组丢失与时延)来推断值。
TCP必须通过端到端的方法解决拥塞控制,因为IP层不会向端系统提供有关网络拥塞的反馈信息。
TCP报文段的丢失(通过超时或者3次冗余确认而得知)被认为是网络拥塞的一个迹象,TCP会相应地减小其窗口长度。
网络辅助的拥塞控制:在网络辅助的拥塞控制中,网络层构件(即路由器)向发送方提供关于网络拥塞状态的显式反馈信息。
这种反馈可以简单地用一个比特来指示链路中的拥塞情况。
分为两种:直接反馈信息可以由网络路由器发给发送方,一种采用了阻塞分组形式;路由器标记或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生,一旦受到一个标记的分组后,接收方就会向发送方通知该网络拥塞指示,后一种形式的通知至少要经过一个完整的往返时间。
讲述tcp tahoe/reno慢启动和拥塞避免快速恢复和快速重传⑦Ip层功能1、异构网络互联。
(将两个或两个以上的网络通过一定的方法,用一种或多种通信设备相互连接起来构成更大的网络)2、路由与转发,路由选择和分组转发3、拥塞控制(开环控制和闭环控制)Ip层协议1、路由协议:RIP路由信息协议 ospf开放最短路径优先协议2、NAT 网络地址转换3、ICMP 网际控制报文协议4、DHCP动态主机配置协议5、ARP地址解析协议⑨计算UDP校验和(16位)12----伪首部(源IP地址,目的IP地址,0,17,UDP长度),8----UDP首部,7---数据(补0)⑪ PDU协议数据单元PDU(Protocol Data Unit)是指对等层次之间传递的数据单位。
协议数据单元(Protocol Data Unit )物理层的 PDU是数据位(bit),数据链路层的 PDU是数据帧(frame),网络层的PDU是数据包(packet),传输层的PDU是数据段(segment),其他更高层次的PDU是报文(message)。
⑮比特交替协议分组序号在0和1之间交替⑯ state machine 状态图时序图(停止等待协议)GBN选择重传画图描述TCP传输机制第四章网络层描述traceroute机制(一句话解释)Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。
首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。
此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。
当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。
所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。
每次,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
Traceroute 有一个固定的时间等待响应(ICMP TTL到期消息)。
如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。
然后,Traceroute给TTL记数器加1,继续进行。
traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。
traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。
发送数据包的大小默认为38个字节。
traceroute程序完整过程:首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP 报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。
⑧ LS,DV算法比较(链路状态协议和距离矢量算法)链路状态路由协议是层次式的,网络中的路由器并不向邻居传递“路由项”,而是通告给邻居一些链路状态。
与距离矢量路由协议相比,链路状态协议对路由的计算方法有本质的差别。
距离矢量协议是平面式的,所有的路由学习完全依靠邻居,交换的是路由项。
链路状态协议只是通告给邻居一些链路状态。
运行该路由协议的路由器不是简单地从相邻的路由器学习路由,而是把路由器分成区域,收集区域的所有的路由器的链路状态信息,根据状态信息生成网络拓扑结构,每一个路由器再根据拓扑结构计算出路由。