1. TCP (Transmission Control Protocol)

概念

TCP(传输控制协议)是一种面向连接的、可靠的传输协议。它负责将数据从源主机传输到目标主机,并确保数据的完整性、顺序和正确性。

原理

  • 三次握手:在数据传输之前,TCP协议通过三次握手建立连接。客户端与服务器之间交换控制信息,以确保双方都准备好开始数据传输。

    1. 客户端发送 SYN 请求。
    2. 服务器响应 SYN-ACK 确认。
    3. 客户端再发送 ACK 确认,建立连接。
  • 四次挥手:在连接结束时,TCP协议通过四次挥手来断开连接。
    1. 客户端发送 FIN 请求断开连接。
    2. 服务器响应 ACK。
    3. 服务器发送 FIN 请求断开连接。
    4. 客户端响应 ACK,连接完全断开。
  • 流量控制与拥塞控制:TCP使用滑动窗口机制来进行流量控制,保证接收端能够以合适的速率接收数据。拥塞控制则通过算法(如慢启动、拥塞避免、快重传等)来控制网络的负载,避免出现网络拥堵。
  • 数据重传与确认机制:TCP通过数据包的序列号和确认机制来确保数据的可靠性。如果丢失了数据包,接收端不会发出确认,发送端会重新发送数据。

TCP适用场景(要求高可靠性)

  • 网页浏览:HTTP/HTTPS协议确保网页内容完整加载。
  • 文件传输:FTP/SFTP协议保证文件完整性。
  • 电子邮件:SMTP/POP3/IMAP协议确保邮件准确传输。
  • 远程登录:SSH/Telnet等需要可靠命令执行。
  • 数据库访问:MySQL等数据库连接需要可靠数据传输。

常见面试题

  1. TCP三次握手的过程是什么?

    • 通过三次握手建立连接。
    • 分别是客户端发送SYN请求,服务器返回SYN-ACK确认,客户端再发送ACK确认。
  2. TCP如何保证数据的可靠性?
    • 使用序列号、确认号和重传机制,确保数据按顺序到达且不丢失。
  3. TCP的流量控制机制是如何工作的?
    • 通过滑动窗口机制来控制数据传输速率,确保接收端有足够的缓冲空间。
  4. TCP的拥塞控制算法有哪些?
    • 包括慢启动、拥塞避免、快重传和快恢复。

2. UDP (User Datagram Protocol)

概念

UDP(用户数据报协议)是一种无连接的、不可靠的传输协议。它与TCP不同,不保证数据的顺序和完整性。UDP协议不进行握手,适用于实时性要求高的场景。

原理

  • 无连接:UDP是无连接协议,数据发送时无需建立连接,因此启动速度更快。
  • 不可靠性:UDP不保证数据传输的可靠性,也不进行重传机制。如果丢包,数据无法恢复。
  • 无序性:UDP不保证数据包的顺序。如果顺序重要,需要应用层进行处理。
  • 数据包大小限制:UDP包的最大长度为65535字节,但通常会受到MTU(最大传输单元)的限制。

UDP适用场景(要求低延迟/实时性)

  • 实时音视频传输:视频会议(Zoom、Skype)、语音通话(VoIP)容忍少量丢包。
  • 在线游戏:多人在线游戏需要快速状态同步,延迟比完美传输更重要。
  • DNS查询:快速域名解析,通常使用UDP。
  • 物联网传感器数据:设备间高频小数据包传输。
  • 广播/多播应用:网络电视、流媒体分发等一对多通信。

常见面试题

  1. UDP与TCP的区别有哪些?

    • UDP是无连接、不可靠的,而TCP是面向连接、可靠的。
    • UDP不保证数据的顺序和完整性,而TCP通过确认机制确保数据的可靠传输。
  2. UDP是否可以保证数据的到达?
    • 不可以,UDP无法保证数据的到达,也没有重传机制,数据丢失无法恢复。
  3. UDP适合哪些应用场景?
    • UDP适合需要低延迟、实时性要求高的应用,如视频直播、在线游戏、语音通信等。
  4. 为什么UDP在传输时不进行流量控制和拥塞控制?
    • 因为UDP的设计初衷是高效、低延迟,适用于实时场景,丢包并不影响系统的正常运行。

协议选择策略

选择TCP,当

  • 数据完整性至关重要(如文件传输、金融交易)
  • 需要保证数据顺序(如数据库同步)
  • 网络环境复杂,需要自适应拥塞控制
  • 应用层协议本身缺乏可靠性机制

选择UDP,当

  • 实时性优先于可靠性(如音视频流)
  • 高频小数据包传输(如传感器数据)
  • 需要广播或多播功能
  • 应用层已实现自定义可靠性机制(如QUIC协议)

现代协议演进:QUIC(HTTP/3基础)在UDP上实现了TCP的可靠性,结合两者优点,解决TCP队头阻塞问题。

总结:

TCP和UDP是传输层两大核心协议,各有其设计哲学和适用场景。

TCP以可靠性为核心,适合数据完整性要求高的应用;

UDP以效率为核心,适合实时性要求高的场景。

高频面试题精析

1. 基础概念题

Q1:TCP和UDP的主要区别是什么?

  • 连接性:TCP面向连接,UDP无连接。
  • 可靠性:TCP可靠,UDP不可靠。
  • 传输效率:TCP慢,UDP快。
  • 头部开销:TCP大(20-60字节),UDP小(8字节)。
  • 控制机制:TCP有流量和拥塞控制,UDP没有。

Q2:为什么TCP是可靠的而UDP不可靠?

  • TCP通过序列号、确认机制、超时重传、错误校验等保证数据不丢失、不重复、按序到达。
  • UDP直接发送数据包,无确认、重传或排序机制。

2. 原理机制题

Q3:详细描述TCP三次握手过程

  1. 客户端发送SYN包(序列号=x)到服务器。
  2. 服务器回复SYN+ACK包(序列号=y,确认号=x+1)。
  3. 客户端发送ACK包(确认号=y+1),连接建立。

Q4:为什么需要三次握手而不是两次?

  • 防止已失效的连接请求突然传到服务器导致错误资源分配。
  • 确保双向通信能力:客户端确认自己可发送和接收,服务器同样。

Q5:TCP四次挥手的过程和意义

  1. 主动方发送FIN包,表示不再发送数据。
  2. 被动方回复ACK,确认收到关闭请求。
  3. 被动方发送FIN包,表示也不再发送数据。
  4. 主动方回复ACK,连接完全关闭。
    • 意义:确保双方数据完全传输完毕,优雅释放连接资源。

3. 实战应用题

Q6:视频会议应该选择TCP还是UDP?为什么?

  • 选择UDP,因为视频会议对实时性要求高,能容忍少量数据丢失,但无法接受高延迟。TCP的重传机制会导致延迟累积,影响用户体验。

Q7:什么情况下会在UDP上实现可靠性机制?

  • 当应用需要低延迟但又要一定可靠性时,如在线游戏、QUIC协议。在应用层实现选择性重传、拥塞控制等。

Q8:TCP的拥塞控制算法有哪些?

  • 慢启动:初始窗口指数增长。
  • 拥塞避免:窗口线性增长。
  • 快速重传:收到3个重复ACK时立即重传。
  • 快速恢复:避免回到慢启动。

你必须知道的TCP和UDP核心区别,快速搞懂这两大协议!的更多相关文章

  1. Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor

    Webservice WCF WebApi   注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...

  2. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  3. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  4. 《你必须知道的.NET》读书笔记三:体验OO之美

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...

  5. 《你必须知道的.NET》读书笔记:从Hello World认识IL

    通用的语言基础是.NET运行的基础,当我们对程序运行的结果有异议的时候,如何透过本质看表面,需要我们从底层来入手探索,这时候,IL便是我们必须知道的基础. 一.IL基础概念 1.1 什么是IL? IL ...

  6. MVC中你必须知道的13个扩展点

    MVC中你必须知道的13个扩展点 pasting 转:http://www.cnblogs.com/kirinboy/archive/2009/06/01/13-asp-net-mvc-extensi ...

  7. 《你必须知道的.NET》书中对OCP(开放封闭)原则的阐述

    开放封闭原则(OCP,Open Closed Principle)是面向对象原则的核心.由于软件设计本身所追求的墓边就是封装变化,降低耦合,而开放封闭原则就是对这一目标的直接体现.(你必须知道的.NE ...

  8. 《jQuery风暴》第2章 必须知道的JavaScript知识

    第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...

  9. [你必须知道的.NET]第二十四回:认识元数据和IL(上)

    发布日期:2009.02.24 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 很早就有说说Metadata(元数据)和IL(中 ...

  10. C语言学习书籍推荐《你必须知道的495个C语言问题》

    萨米特 (Steve summit) (作者), 孙云 (译者), 朱群英 (译者) 下载地址:点我 <你必须知道的495个C语言问题>以问答的形式组织内容,讨论了学习或使用C语言的过程中 ...

随机推荐

  1. spring项目run起来的最小依赖

    spring项目跑起来,只需要spring-context这1个依赖项就行,参考下面: 一.pom.xml 1 <?xml version="1.0" encoding=&q ...

  2. 圆刚C725B金星标清采集卡

    C725标清采集卡是一张支持AV端子.S端子以及立体声输入的PCIe卡,可将PAL.NTSC和SECAM等模拟格式影像数字化.采集并另存为无压缩的AVI格式档案.C725标清采集卡随附的软件开发工具包 ...

  3. Unity 2D游戏开发优化技巧

    https://blog.unity.com/cn/technology/a-lightning-round-of-great-tips-for-2d-games

  4. [浅谈 Unity 内存管理]

    链接:https://www.notion.so/Unity-f79bb1d4ccfc483fbd8f8eb859ae55fe 视频链接:https://www.bilibili.com/video/ ...

  5. 不用spring,可以吗?

    摘自:https://www.zhihu.com/question/537894826 Java开发不用Spring生态有前途吗? 比如在某些大厂自己封装好的框架直接用,感觉没啥提升 新增:做后端we ...

  6. 解密prompt系列58. MCP - 工具演变 & MCP基础

    作为结构化推理的坚定支持者,我一度对MCP感到困惑:Agent和工具调用的概念早已普及,为何还需要MCP这样的额外设计呢?本文就来深入探讨MCP,看看它究竟解决了什么问题. 我们将分几章解析MCP:本 ...

  7. 【译】Visual Studio 2015 停用:针对旧版本 Visual Studio 的支持提醒

    对 Visual Studio 2015 的支持将于2025年10月14日结束.如果您正在使用较旧版本的 Visual Studio,我们希望在您使用 Visual Studio 时保持您的工作效率和 ...

  8. Lock 和分布式锁概述,举例事务如何配合分布式锁做秒杀

    Lock 和分布式锁概述 Lock:这是 Java 里的一个接口,它提供了比synchronized关键字更为灵活的锁机制.Lock接口的常见实现类有ReentrantLock,借助lock()方法来 ...

  9. [题解]CF33C Wonderful Randomized Sum

    CF33C Wonderful Randomized Sum 我们可以发现,如果两区间不交叉也不会影响到结果,所以我们只需要考虑不交叉的情况即可. 我们所选择的前缀\(1\sim i\)应满足区间和最 ...

  10. for (int num : nums)的理解

    1.理解 for (int num : nums) 是 C++11 引入的一种新的循环语法,称为范围-based for 循环或者是 foreach 循环.这种循环语法可以遍历容器或者数组中的元素,并 ...