目录
1. OSI七层模型
物理层 --> 数据链路层 -->网络层-->传输层-->会话层-->表示层-->应用层
2.传输层的作用
为它上面的应用层提供通信服务。
传输层是面向通信的最高层,也是用户功能的最底层。
3.传输层复用和分用的区别
- 复用(多次使用):在发送端,多个应用进程共用一个传输层
- 分用(分派):在接收端,传输层根据端口号将数据分派给不同的应用进程
4.传输层和网络层的区别
网络层为不同的主机提供通信服务,传输层为不同主机的不同应用提供通信服务。
网络层只对报文头部进行差错检测,传输层对整个报文进行差错检测。
5.UDP协议的特点
- UDP通信前不需要建立连接,通信结束也不需要释放连接;
- UDP不可靠,不能保证每个数据都送达;
- UDP面向报文,即UDP数据传输的单位是报文,且不会对数据作任何拆分和拼接操作;UDP只负责增加UDP头或者去除IP数据包头;
- UDP没有拥塞控制;它始终以恒定的速率发送数据;
- UDP支持一对一、一对多、多对一、多对多通信(都支持!!)
UDP和TCP的区别
- UDP面向非连接,TCP面向连接
- UDP无法保证可靠服务,TCP可以保证
- UDP面向报文,TCP面向字节流
- UDP数据传输快,实时性高;TCP数据传输慢
- UDP可以以任意方式通信,TCP只提供点到点的通信
6.TCP协议的特点
- TCP面向连接;通信前需要建立连接,通信后需要释放连接;
- TCP提供可靠的服务:TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致;
- TCP面向字节流。TCP以字节为单位。虽然传输过程中数据被划分为一个个数据报,但这只是为了传输,接收端最终接收到的数据将与发送端的数据一模一样;
- TCP数据传输慢
- 一条TCP连接的两端只能有两个端点;只支持点到点的通信
- TCP提供全双工通信;TCP的两端即可以作为发送端,可以作为接收端
7.TCP三次握手过程
TCP协议中,主动发起请求的为 客户端,被动连接的是 服务端。TCP支持全双工通信,因此客户端和服务端都能够发送和接收数据。
第一次握手:
客户端向服务端发送连接请求报文段,该报文段的头部中SYN=1,ACK=0,seq=x.
SYN=1,ACK=0 表示报文段为连接请求报文段
x为本次TCP通信的字节流的初始序号
第二次握手:
服务端收到请求后,如果同意连接,就会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1
SYN=1,ACK=1 表示报文段为连接同意的应答报文
y为发送字节流的初始序号
ack=x+1表示服务端希望下一个数据包发送序号从x+1开始
第三次握手:
客户端收到连接同意的应答后,还要向服务端发送一个确认报文段:ACK=1,seq=x+1,ack=y+1
8.TCP四次挥手
TCP是双向连接,四次挥手中前两次用于断开一个方向的连接,后两次用于断开另一个方向的连接。
第一次挥手:
若A认为数据发送完成,则它向B发送连接释放请求。
第二次挥手:
B收到连接释放请求后,会通知相应的应用程序,告诉它A到B的连接已经释放;B向A发送的连接释放的应答;
第三次挥手:
B向A发完所有数据后,向A发送连接释放请求;
第四次挥手:
A收到释放请求后,向B发送确认应答,A进入wait状态。wait状态持续一段时间后,在进入closed状态。
tips:为什么要在wait状态等待一段时间?
确保B能够收到A的确认应答。若A发完确认应答后直接进入closed状态,那么如果该应答丢失,B等待超时后会重新发送连接释放请求,但此时A已经关闭了,无法应答。在这种情况下,B永远无法正常关闭。
9. TCP的可靠传输是如何实现的?
TCP最终传递给应用层的数据和发送者发送的数据是一模一样的。TCP采用了流量控制、拥塞控制、连续ARQ等技术来保证它的可靠性。
停止等待协议(ARQ)
滑动窗口协议(TCP采用的)的简化版本。
停止等待协议是一种ARQ协议(Automatic Repeat reQuest,自动重传请求)。当请求失败时,会自动重传,直到请求被正确接受为止。这种协议保证了每个分组都能被正确接收。
停止等待协议的原理:
- 无差错的情况:A向B每发送一个分组后都要停下来等待B的确认应答;A只有收到B的确认应答后才能发送下一个分组;
- 分组丢失或出现差错的情况:A都会超时重传分组
- 应答丢失和应答迟到的情况;应答丢失:B正确收到分组,返回的应答在途中消失,此时A也收不到应答;接着B又收到了该分组,接受者根据序列号来判断当前的分组是否已经接收,若已接收则直接丢弃,并补上一个确认应答。 应答迟到:由于网络堵塞,B向A发送的第一个应答没传到,又发送了第二个。A会接受到两个应答。A可以根据序号判断该分组是否已经接收,接受了直接丢弃应答即可。
停止等待协议的注意点:
- 每发完一个分组,该分组必须保留,直到确认应答为止
- 必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收
- 必须设置超时计时器,每发送一个分组就要启动计时器,超时就要重发分组
- 计时器的超时时间要大于应答平均返回时间,否则会出现很多不必要的重传,降低传输效率,但超时时间不能太长。
滑动窗口协议(连续ARQ协议)
滑动窗口协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下发送连续窗口中的分组,这样降低了等待时间,提高了传输效率。
接受者也有一个接收窗口,接受者不需要每收到一个分组就返回一个应答,可以连续收到分组后统一返回一个应答,这样能节省流量。TCP头部的ack字段用来累计确认,它表示已经确认的字节序号+1,也表示期望发送者发送的下一个分组的起始字节号。(累计确认)
发送窗口
发送窗口的大小由接收窗口的剩余大小决定。接收者会把当前接收窗口的剩余大小写入应答TCP报文段的头部,发送者收到应答后根据该值和当前网络的拥塞情况设置发送窗口的大小,发送窗口的大小是不断变化的。
接收窗口
接收者收到的字节会存入接收窗口,接收者会对已近正确接受的有序字节进行累计确认,发送完确认应答后,接收窗口就可以向前移动指定字节。如果某些字节并未按序收到,接收者只会确认最后一个有序的字节,从而乱序的字节就会被重新发送。
流量控制
概念:如果发送者发送过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。
目的:防止分组丢失,保证TCP协议的可靠性;
实现:滑动窗口协议
流量控制引发的死锁:当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。如果这个窗口为0的应答在传输过程中丢失,发送者会一直等待下去,而接受者认为发送者以及收到了该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。
持续计时器:为了避免死锁,每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置计时器继续等待;若窗口不为0,则表示应答报文已经丢失,此时重置发送窗口后开始发送,这样就避免了死锁的产生。
拥塞控制
拥塞控制和流量控制的区别
- 拥塞控制作用于网络,他是防止过多的数据注入到网络,避免出现网络负载过大的情况
- 流量控制作用于接收者,它控制发送者的发送速度从而使接收者来得及接收
目的:缓解网络压力;保证分组按时到达
慢开始和拥塞避免算法
- 发送方维护一个发送窗口,发送窗口的大小取决于网络的拥塞情况和接受窗口的大小,发送窗口是动态变化的
- 发送方还维护一个慢开始门限:
- 发送窗口<慢开始门限:使用慢开始算法
- 发送窗口>慢开始门限:使用拥塞避免算法
- 发送窗口=慢开始门限:慢开始算法或者拥塞避免算法
- 慢开始算法的作用:慢开始算法将发送窗口从小扩大,而且按指数级扩大,从而避免一开始就往网络中注入过多的分组从而导致拥塞;它将窗口慢慢扩大的过程其实也在探测网络拥塞情况的过程,当发现出现拥塞时,及时降低发送速度,从而减缓网络拥塞。
- 拥塞避免算法的作用:拥塞避免算法使发送窗口以线性方式增长,而非指数级增长,从而使网络更加不容易发生拥塞。
快重传 和 快恢复算法
- 两种预防拥塞的方式
- 快重传原理:因为TCP具有累计确认的能力,因此接收者收到一个分组的时候不会立即发出应答,可能需要等待收到多个分组之后再同一发出累计确认。但快重传算法就要求,接收者如果接收到一个乱序的分组的话,就必须立即发出前一个正确分组的确认应答,这样能让发送者尽早地知道有一个分组可能丢失。
- 快恢复原理:当发送者收到同一个分组的三个确认应答后,就基本可以判断这个分组已经丢失了;这时候无需等待超时,直接执行慢开始和拥塞避免算法