面试题答案
一键面试TCP与UDP传输可靠性机制的不同
- TCP(传输控制协议):
- 连接建立:TCP是面向连接的协议,在数据传输之前,需要通过三次握手建立可靠的连接。例如,客户端发送SYN包,服务器收到后回复SYN + ACK包,客户端再发送ACK包,完成连接建立。
- 数据确认与重传:TCP使用确认机制保证数据的可靠传输。发送方发送数据后,等待接收方的确认(ACK)。如果在一定时间内未收到确认,发送方会重传数据。例如,在文件传输过程中,每一个数据段都需要得到接收方的确认,确保数据完整无误。
- 顺序保证:TCP会对数据进行编号,并按照编号顺序传输和接收。接收方根据编号对数据进行排序,确保数据的顺序性。例如,在传输大文件时,数据分多个数据段传输,TCP能保证这些数据段按顺序正确组装。
- UDP(用户数据报协议):
- 无连接:UDP是无连接的协议,发送数据前不需要建立连接,直接将数据报发送出去。例如,DNS查询,客户端直接向DNS服务器发送查询请求,无需先建立连接。
- 无确认与重传:UDP不提供数据确认和重传机制,发送方发送数据后,不会等待接收方的确认。因此数据可能会丢失或乱序到达。比如实时视频流传输,偶尔丢失一些帧对整体观看影响不大,不需要重传。
- 不保证顺序:UDP对数据不进行编号,数据报可能会乱序到达接收方,且UDP不负责对数据进行排序。
优先选择TCP的后端开发场景
- 文件传输:如FTP(文件传输协议),文件的完整性至关重要,任何数据的丢失或错误都可能导致文件损坏无法使用。TCP的可靠传输机制可以确保文件准确无误地从服务器传输到客户端。
- 电子邮件传输:SMTP(简单邮件传输协议)用于发送邮件,邮件内容包括文本、附件等,需要完整准确地到达收件人的邮件服务器,TCP的可靠性保证了邮件数据不会丢失或出错。
- 数据库连接:后端应用程序与数据库服务器之间的连接,如使用MySQL、Oracle等数据库时,数据的准确性和完整性对于业务逻辑至关重要。TCP确保在进行数据查询、插入、更新等操作时,数据能可靠传输,避免数据不一致问题。
优先选择UDP的后端开发场景
- 实时音视频传输:如视频会议、直播等场景,对实时性要求极高。虽然UDP可能会丢失一些数据帧,但少量数据丢失对整体观看体验影响不大,而重传数据带来的延迟会严重影响实时性。例如,在视频直播中,偶尔丢几帧画面,观众可能察觉不到,但如果因重传导致卡顿,体验就会大打折扣。
- DNS查询:DNS用于将域名解析为IP地址,查询请求通常较短,对实时性要求高。由于DNS查询的数据量小且对实时响应要求高,即使偶尔丢失查询请求,客户端可以重新发起查询,因此UDP更适合这种场景。
- 网络游戏:在网络游戏中,尤其是实时对战类游戏,需要快速传输玩家的操作指令等数据。虽然UDP可能会导致部分指令丢失,但游戏客户端可以通过预测等算法进行补偿,而TCP的重传机制带来的延迟会使游戏操作不流畅,影响游戏体验。