red*_*888 6 udp network-programming tcp network-protocols
我在网上阅读了很多关于为什么要使用 UDP 或 TCP 的内容,但我仍然需要帮助来理解某些东西。
如果我在应用程序中实现错误检查和重传,我为什么还要考虑使用 TCP?开发人员利用 TCP 的内置功能而不是在应用程序层自己实现它们是否更方便?我知道 TCP 包括流量控制,这使得它对网络上的其他服务更友好,但是,如果我是一个自私的混蛋,他可以在乎其他人并希望我的应用程序尽可能快,我不会选择 UDP在每种情况下?
在您的应用程序中重新实现 TCP 的特性是一项相当大的任务吗?我只需要帮助理解为什么如果 UDP 快得多,那么每个应用程序都不会在每种情况下都使用 UDP。
TCP 提供的不仅仅是错误检查,所以如果你想替换它,还有很多东西需要实现。以下是一些没有特定顺序的事情:
1. 标准化
您已经编写了自己的传输协议。恭喜!自己使用它很有趣,因为你是唯一的实现。另一方面,TCP 存在并且在任何平台上都经过了很好的测试。它受到防火墙、代理、路由器以及您的流量可能在网络中遇到的所有其他东西的支持。
2. 拥塞控制
这就是您在说“流量控制”时所想到的(见下一个项目符号)。拥塞控制会限制 TCP 流以响应网络拥塞。但你是一个自私的混蛋(这很好!)所以你问你为什么要关心。好吧,大多数网络使用的瓶颈是您和您的提供商之间的链接。您的提供商通常配置良好,并且有网络工程师可供使用。这些家伙知道如何保护网络免受过度使用以及如何避免热点。所以 TCP 的拥塞控制真正保护您和您的应用程序最重要的是,确保单个应用程序不能阻塞整个连接。它有助于确保您不
3. 流量控制
流量控制不是拥塞控制。简而言之,当您不再能够处理传入的信息时,流量控制告诉另一方闭嘴。想想一部手机试图从附近的 HTTP 服务器加载一个繁重的网页。服务器可以在手机处理页面的一小部分时间内将整个页面转储到网络上。在这种情况下,瓶颈不是网络而是设备之一。您的 TCP 替代方案也必须解决这个问题。
4.按订单发货
除了错误检测之外,TCP 还保证数据会以正确的顺序到达。这与错误检测不同,它是一个附加功能。
5. 安全
TCP 三向握手和现代操作系统生成初始序列号的方式实际上向双方保证了另一台主机的 IP 地址是真实的而不是伪造的。情况并非总是如此。当初始序列号很容易预测时,这些攻击就存在了。
此外,实现 TCP 的所有功能很困难,而且复杂性会滋生错误。众所周知,许多 TCP 实现都包含各种错误,例如缓冲区溢出,其中一些错误具有严重的安全隐患。希望现在已经找到并修复了所有内容。新协议和新实现总是冒着引入新安全漏洞的风险。
6. 性能
网卡和现代操作系统减轻了应用程序管理 TCP 的负担,现在它们做得很好。您想使用自己的序列号和错误检测吗?您必须自己在用户空间中实现它们(并遭受性能损失,特别是如果您的应用程序是用 Java 之类的东西编写的)或者准备编写内核和驱动程序补丁。
此外,现有的 TCP 实现本身已经由几代工程师审查和优化。创造出自己打磨过的东西将是非常具有挑战性的。
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |