【问题标题】:which protocols are implemented by jdk socketjdk socket实现了哪些协议
【发布时间】:2024-01-17 03:37:01
【问题描述】:

如果我理解正确,我们使用java.io/java.nio.* 来实现一个应用程序,它应该是ISO 5 层模型的应用程序层实现(可能不准确)。我认为JDK应该实现较低层(传输层,网络层甚至L2,L1),如果是,则基于哪些协议。如果没有,请介绍一下?

【问题讨论】:

    标签: java communication network-protocols tcp-ip


    【解决方案1】:

    可能你对它有非常基本的了解,所以混淆了很多东西。

    java.nio 等在提供应用层(OSI 第 7 层)或套接字(套接字比应用层稍低,因为您可以在它们之上制作 http、ftp 等)时,它们确实实现了所有较低层也。如果没有较低的层,您实际上无法发送单个数据包,因此无法进行通信。

    程序员是否可以访问这些层以及您可以自定义到哪个级别是另一回事。

    通常的标准是 sockets api,它提供了很多选择来指定较低层(tcp、udp 或 raw)。

    此外,大多数高级语言都提供应用层实现,例如 HTTP、SMTP 等。

    【讨论】:

    • 如果我理解你的观点,socket是一个抽象的高层通信实现,它与每个协议和每个层没有确切的关系,我们可以使用socket API /*也许有一个API xxx.sendUdpDatagram () :-)。但实际上我在 JDK 中从未见过这样的。:-(. */ 来指定我们想要使用的协议(大多数情况下,我们选择传输层协议,例如 UDP、TCP 等)。这样我们就可以随时使用专注于我们的应用程序。此外,不同的语言提供不同的套接字 API,并且最相似。
    • 您通常在创建套接字时选择 tcp 或 udp,或者通常您有不同的 api 用于创建 tcp 与 udp docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html 的套接字,然后您使用缓冲输入流读取器或写入器读取或写在套接字上。当我们说 api 时,关键是函数为您处理所有底层工作,您不必担心添加 tcp 头、计算其校验和、进行排序(您只需指定 tcp),您也不必担心添加 ip或以太网标头。这是由套接字 api 自动管理的
    • 看看理查德史蒂文斯 TCP/IP 插图卷。 1. 仅第一章就可以改进很多概念。
    • 抱歉让您久等了。非常感谢,我办公室里只有 TCP/IP,希望对您有所帮助。