1. TCP与UDP的区别
- TCP是面向连接的,UDP的无连接的
- TCP交付保证:如果消息在传输中丢失,那么它将重发;UDP没有交付保证,一个数据包在运输过程中可能丢失
- TCP保证数据顺序,UDP不保证
- TCP慢,适合传输大量数据;UDP快,适合传输少量数据。
- TCP是一个重量级的协议;UDP则是轻量级的协议。一个TCP数据报的报头大小最少20字节,UDP数据报的包头固定8个字节
- TCP有流量控制和拥塞控制,UDP没有
- TCP只能单播,不能发送广播和组播;UDP可以广播和组播
2. TCP协议如何来保证传输的可靠性
-
确认应答(ACK)机制
TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
ACK机制.png -
超时重传机制
首先,发送方没有介绍到响应的ACK报文原因可能有两点:
1)数据在传输过程中由于网络原因等直接全体丢包,接收方根本没有接收到。
2)接收方接收到了响应的数据,但是发送的ACK报文响应却由于网络原因丢包了。
发送方在发送完数据后等待一个时间,时间到达没有接收到ACK报文,那么对刚才发送的数据进行重新发送。如果是刚才第一个原因,接收方收到二次重发的数据后,便进行ACK应答。如果是第二个原因,接收方发现接收的数据已存在(判断存在的根据就是序列号,所以上面说序列号还有去除重复数据的作用),那么直接丢弃,仍旧发送ACK应答。 -
连接管理
连接管理就是三次握手与四次挥手的过程,保证可靠的连接,是保证可靠性的前提。 -
流量控制
接收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的接收缓冲区很快的填充满了。此时如果发送端仍旧发送数据,那么接下来发送的数据都会丢包,继而导致丢包的一系列连锁反应,超时重传呀什么的。而TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。
在TCP协议的报头信息当中,有一个16位字段的窗口大小(其实就是滑动窗口)。在介绍这个窗口大小时我们知道,窗口大小的内容实际上是接收端接收数据缓冲区的剩余大小。这个数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。
流量控制.png
- 拥塞控制
- 慢开始:发送方会维持一个拥塞窗口,刚开始的拥塞窗口和发送窗口相等,一般开始均设置1,然后我们每收到一个确认,就让拥塞窗口大小变为原来的两倍,接着发送分组也是原来的两倍,以此类推。
-
拥塞避免:当窗口值等于16(慢开始门限),然后我们开始采用”加法增大”的策略,即不在以2倍的方式增加,而是转变为每次加1的方式。直到网络拥塞.我们开始采用”拥塞避免”算法:让新的慢开始门限值变为发生拥塞时候的值的一半,将拥塞窗口置为1,然后让它再次重复,这时一瞬间会将网络中的数据量大量降低。
拥塞控制.png - 快速重传:假设发送方发送了M1–M4四个分组,接收方收到了M1和M2,以及M4,这些分组。本来接收方可以什么都不做,但是按照快速重传算法,接收方必须立刻发送对M2的重复确认,以便让发送方及早知道接收方没有收到报文段M3。发送方再次发送M5和M6,接收方也要再次发送对于M2的重复确认。快速重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文段M3,因而应该立即进行重传。
- 快速恢复:一旦发送方连续收到三个重复确认后,发送方就知道现在只是丢失了个别的报文段,于是不启动慢开始,而是执行快速恢复算法。发送方把门限值减半,并把拥塞窗口的大小等于门限值,开始执行拥塞避免算法。
转载:https://blog.csdn.net/yangbodong22011/article/details/48500791
转载:https://blog.csdn.net/liuchenxia8/article/details/80428157
3. ping使用了什么协议?是否可以测试端口?
使用的是ICMP协议,是“Internet Control Message Protocol”(Internet控制报文协议),ping命令可以用来测试端口。
4. 滑动窗口
对于发送端来说,即将要发送的数据包排成一个队列,对于发送者来说,数据包总共分成四类。分别是在窗口前的,已经发送给接收方,并且收到了接收方的答复,我们称之为发送已确认。在窗口中的,有两种状态,一个是已经发送给接收方,但是接收方还没确认送达,我们称之为已发送未确认,另外一个是可以发送了,但是还没有发送,我们称之为允许发送未发送。最后的是在窗口外面的,我们称之为不可发送,除非窗口滑到此处,否则不会进行发送。
就这样,一旦前面的数据已经得到服务端确认了,这个窗口就会慢慢地往后滑,如下图所示,P1,P2两个数据包被确认之后,窗口就往后移动,后面新的数据包就由不可发送待发送变成了可发送状态了。
网友评论