java面试题-tcp和udp

Posted lm-book

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试题-tcp和udp相关的知识,希望对你有一定的参考价值。

一、tcp和udp区别

 UDPTCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

 

二、tcp安全可靠的实现基础

1、停止等待协议:是tcp传输可靠的重要途经,意思就是再发送一个分组之后,必须等待对方确认之后才能发送下一个分组,优点是简单,缺点是信道利用率太低,一次只能发送一个消息,信道大部分事件都是空闲的。

2、超时重传三种情况:

(1)、分组丢失:发送方已经发送分组,接收方没有收到;

(2)、确认丢失:接收方收到分组,发送确认分组,但确认分组丢失;

(3)、确认延时:确认分组没有丢失,由于传输太慢,发送方在规定时间内没有收到接收方发的确认分组;

3.下面两个协议就是解决信道效率太低和增大吞吐量,以及流量控制:

1)连续ARQ协议:它是指发送方维护着一个窗口,这个窗口中不止有一个分组,而是有好几个分组。窗口的大小是由接收方返回的win值决定的。所以窗口大小 是动态变化的。只要在窗口中的分组都可以被发送,这就使得TCP一次不是只发送一个分组了。从而大大提高了信道利用率。并且它采用累积确认的方式,对于按序到达的最后一个分组进行确认。

2)滑动窗口协议:因为窗口不断往前走。该协议允许发送方在停止并等待确认前发送多个数据分组。不需要每发送一个就分组就停下来等待确认。所以可以加速数据的传输,还可以控制流量。

3)累积确认:如果发送方发送了5个分组,接收端只收到了1 2 4 5 ,没有收到3,那么我的确认信息会是说明我期望下一个收到的组是第三个,此时发送方会将3 4 5都重发一遍。

技术图片

比如上面的例子,应该是右边发送数据给左边。左边进行确认。窗口往右移动。

接收方通告的窗口称为提出的窗口(offered window):上面的4 – 9

说明接收方已经收到了3字节的数据,且通告窗口大小为6.

当接收方确认数据后,这个滑动窗口不断的向右移动。下面用三个术语来描述窗口左右边沿的运动:

1)  称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。

2)  当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据,并释放了TCP的接收缓存时。(就是接收方读取了缓冲区里面的数据的时候)

3) 右边沿向左移动,称为窗口收缩。

 技术图片

如果左边沿到达右边沿,则称其为一个零窗口。此时发送方不能发送任何数据。

以上是关于java面试题-tcp和udp的主要内容,如果未能解决你的问题,请参考以下文章

10道腾讯的Java面试题

Android面试题网络基础

Java面试题计算机网络知识点总结

[Java网络安全系列面试题] 说一说TCP和UDP的区别与联系?

TCP/IP相关面试题

硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题