1.网络模型
1.1、5层模型中的数据流动:
1 第五层——应用层(application layer)
2. 第四层——运输层(transport layer):报文段/用户数据报
- 运输层(transport layer):负责向两个主机中进程之间的通信提供服务(端到端的通信)。要达到两个主要目的:第一提供可靠的端到端的通信;第二,向会话层提供独立于网络的运输服务。
引入传输层的原因: 增加复用和分用的功能、 消除网络层的不可靠性、 提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。
-
由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能:复用,就是多个应用层进程可同时使用下面运输层的服务;分用,就是把收到的信息分别交付给上面应用层中相应的进程。
- 运输层主要使用以下两种协议:
(1) 传输控制协议TCP(Transmission Control Protocol):数据传输的单位是报文段,面向连接的、可靠的、端到端的、基于字节流的传输协议;TCP不支持多播(multicast)和广播(broadcast);TCP连接是基于字节流的,而非消息流,消息的边界在端到端的传输中不能得到保留;对于应用程序发来的数据,TCP可以立即发送,也可以缓存 - (2) 用户数据包协议UDP(User Datagram Protocol):数据传输的单位是用户数据报。提供了不可靠的无连接传输服务。它使用IP携带报文,但增加了对给定主机上多个目标进行区别的能力。 UDP没有确认机制;不对报文排序;没有超时机制;没有反馈机制控制流量;使用UDP的应用程序要承担可靠性方面的全部工作。
3. 第三层——网络层(network layer):数据报
- 网络层(network layer)主要包括以下两个任务:
- (1) 负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。
- (2) 选中合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
- 协议:IP,ICMP,IGMP,ARP,RARP
-
只要超过1500字节,我们就认为此数据报应该分片了。
IP数据报被分片以后,各分片(fragment)分别组成一个具有IP首部的分组,并各自独立地选择路由,在其分别抵达目的主机后,目的主机的IP层会在传送给传输层之前将接收到的所有分片重装成一个IP数据报。可以怎么理解,IP数据报是IP层端到端的传输单元(在分片之前和重组之后),分组是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报也可以是IP数据报的一个分片。而分片对传输层是透明的。
4. 第二层——数据链路层(data link layer):帧
- 数据链路层(data link layer):常简称为链路层,我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。
- 在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点之间的链路上“透明”地传送帧中的数据。
- 每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。典型的帧长是几百字节到一千多字节。
- 注:”透明”是一个很重要的术语。它表示,某一个实际存在的事物看起来却好像不存在一样。”在数据链路层透明传送数据”表示无力什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层。或者说,数据链路层对这些数据来说是透明的。
(1)在接收数据时,控制信息使接收端能知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层。
(2)控制信息还使接收端能检测到所收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续传送下去白白浪费网络资源。如需改正错误,就由运输层的TCP协议来完成。
5. 第一层——物理层(physical layer):比特
1.2分组交换。
在通信过程中,通信双方以分组为单位、使用存储-转发机制实现数据交互的通信方式,被称为分组交换(PS:packet switching)。
分组交换也称为包交换,它将用户通信的数据划分成多个更小的等长数据段,在每个数据段的前面加上必要的控制信息作为数据段的首部,每个带有首部的数据段就构成了一个分组。首部指明了该分组发送的地址,当交换机收到分组之后,将根据首部中的地址信息将分组转发到目的地,这个过程就是分组交换。能够进行分组交换的通信网被称为分组交换网。
分组交换的本质就是存储转发,它将所接受的分组暂时存储下来,在目的方向路由上排队,当它可以发送信息时,再将信息发送到相应的路由上,完成转发。其存储转发的过程就是分组交换的过程。
分组交换的思想来源于报文交换,报文交换也称为存储转发交换,它们交换过程的本质都是存储转发,所不同的是分组交换的最小信息单位是分组,而报文交换则是一个个报文。由于以较小的分组为单位进行传输和交换,所以分组交换比报文交换快。报文交换主要应用于公用电报网中。
2.常见协议讲解
2.1TCP协议:
A要超时重传,自动重传请求(arq automatic repeat request)
B收到重复消息,则丢弃消息并重新发送确认消息。
为提高信道利用率:连续arq协议,滑动窗口协议:
连续arq协议:位于发送窗口内的消息连续发送出去,不需要等待确认。而b接收到分组后,对按序到达的最后一个分组发送确认。
滑动窗口:以字节为单位,a有发送窗口,收到了新的确认则会前移。b有接受窗口,
超时重传时间选择:RTO=RTTS+4*RTTD
RTTS=(1-a)*旧的RTTS+a*新的RTT样本
RTTD=(1-B)*旧的RTTD+B*|RTTS-新的RTT样本|
因为无法明确收到的确认消息是否是重传后的确认消息,所以发生重传后,就把重传时间*2
流量控制:发送速率不要太快,让接收方来得及接受。建立连接的时候b告诉a他的接收窗口的大小,a发送不能超过这个大小,后续b也可以调整大小。为了避免b调为0后,又发送增大窗口的消息丢失,接受到0窗口通知后,就启动一个持续计时器,时间到了,a就发送一个零窗口探测报文段,b就发回现在的窗口值。
传输效率:nagle算法:把要发送的数据放到缓存中,当收到确认到达后,把缓存全部发送。当到达的数据超过发送窗口大小的一半,立即重新发送。
糊涂窗口综合征:b缓存满了,a发送窗口设为0,而b每次从缓存取一个字节,a的发送窗口就一直为1个字节,a就只能发送一个字节,效率很低。
解决办法:出现这个问题,接收方等待时间,留出一般以上的缓存,同时a不要有了一点缓存就发送消息。
拥塞控制:基于窗口的拥塞控制,发送方维持动态的拥塞窗口,发生重传就减小,发送方让发送窗口等于拥塞窗口。
慢开始:由小到大的逐渐增加拥塞窗口,从1开始,每次加倍。
拥塞避免:慢开始到了最大值,就开始将拥塞窗口每次加1;
快重传:接收方b立即发送确认,即使接收到了m3,m5,没接收到m4,则接收到一个m5之后的消息,b发送一次m3确认到达的消息,a收到3次以上,则进行重传m3之后的数据。
快恢复:拥塞窗口/2,
主动队列管理(AQM)
当有了网络拥塞前兆的时候,主动丢弃一些到达的分组,提醒发送方放慢发送的速率。
运输连接管理:主动建立的应用进程叫客户,被动等待建立连接的叫服务器。
为什么要握手三次:
1.握手三次保证双方接受和发送正常。. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。
如果采用两次的话,会出现下面这种情况。
比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
传完东西后,断开。
结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。
2. 三次握手改成仅需要两次握手,死锁是可能发生
计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备