Networking 服务器在哪里存储UDP传输期间从传入数据包提取的源IP地址?

Networking 服务器在哪里存储UDP传输期间从传入数据包提取的源IP地址?,networking,server,udp,ip,client-server,Networking,Server,Udp,Ip,Client Server,数据包到达传输层的UDP类型服务器。当服务器(在传输层)从接收到的数据包中提取源IP地址时,由于服务器和客户端之间的连接较少,服务器在何处存储该地址(将来需要该地址)?或者服务器使用什么机制来识别源(在无连接的环境中)以进行应答?您认为将来为什么需要该地址?可能不是 此外,OSI模型的前四个网络层没有客户机/服务器这样的东西。客户机/服务器模型是一个应用程序概念,而不是网络概念。第2层(如以太网)、第3层(如IP)和第4层(如TCP)是对等协议,而不是客户端/服务器协议 如果一台主机上的应用程序

数据包到达传输层的UDP类型服务器。当服务器(在传输层)从接收到的数据包中提取源IP地址时,由于服务器和客户端之间的连接较少,服务器在何处存储该地址(将来需要该地址)?或者服务器使用什么机制来识别源(在无连接的环境中)以进行应答?

您认为将来为什么需要该地址?可能不是

此外,OSI模型的前四个网络层没有客户机/服务器这样的东西。客户机/服务器模型是一个应用程序概念,而不是网络概念。第2层(如以太网)、第3层(如IP)和第4层(如TCP)是对等协议,而不是客户端/服务器协议

如果一台主机上的应用程序需要使用UDP向其发送数据的主机的回复,则可以将其主机地址作为UDP数据的一部分包含在应用层协议中,并且接收应用程序可以在任何需要的地方存储源IP和UDP地址

正如您所写的,UDP是无连接的(并且不可靠),使用UDP的应用程序必须假定UDP数据报不会到达。应用程序要么作为所使用的应用层协议的一部分增加可靠性,要么根本不在乎某些数据会丢失。例如:


实时应用程序使用UDP,有些应用程序(如视频应用程序)是单向的。其他如VoIP使用信令协议来建立双向通信。几乎所有的实时协议都不希望丢失的数据被重新发送,因为这会导致更多的问题。如果重新发送丢失的视频或语音数据,并且这些数据的到达顺序混乱。

那么,帧包含第二层地址,例如MAC地址,而不是第三层地址,例如IP地址,这些地址包含在第三层数据包中,因此这个问题实际上没有任何意义。你可能误解了吗?@RonMaupin所说的帧不仅仅指头地址,还包括数据。帧数据包含服务器在网络层提取的源和目标的IP地址。所以问题是,当传输层使用UDP协议时,服务器如何处理这些IP地址(稍后需要使用)。在数据包被发送到网络层之前,帧被剥离,因此IP地址在网络层的数据包中公开。数据包是帧的有效载荷,第2层只将有效载荷传递给第3层,而不考虑有效载荷。第三层不知道也不关心帧,因为它可以在任何数量的第二层协议中传输。此外,第2层帧可以承载任意数量的第3层协议,其中只有IPv4(32位地址)或IPv6(128位地址)具有IP地址,并且这两个IP不兼容。假设客户端通过无连接请求某些服务,如实时视频流。当服务器收到请求时,它可以很容易地提取传输层头中的源地址。因为服务器在任何情况下都会接收大量请求。它可能需要存储一些地址,因为它不能一次性处理所有请求。服务器操作系统在哪里以及如何存储这个地址?我想我已经解释过了。应用程序将使用一个协议来建立连接,作为其中的一部分,请求主机将向接收主机提供其地址,或者您可以使用类似SIP的东西(不仅是许多人认为的VoIP协议,而且是建立连接的信令协议,通常也用于视频)。内核需要该地址才能将数据传递到
recvfrom()
。它不能仅仅丢弃UDP报头,而只将数据保留在套接字接收缓冲区中。所以它没有。它还保留UDP报头。应用程序不需要在UDP应用程序协议中包含自己的地址。@EJP,我从来没有说过要丢弃UDP(传输层)头(顺便说一句,它既不包含源IP地址,也不包含目标IP地址)。我所写的,“…它[应用程序]可以将其主机地址作为UDP数据的一部分包含在应用程序层协议中…”这正是应用程序使用SIP(会话启动协议)或其他设置UDP对话时发生的情况。