为啥tcp服务器可以获取客户端的ip?

Posted

技术标签:

【中文标题】为啥tcp服务器可以获取客户端的ip?【英文标题】:Why tcp server can get client's ip?为什么tcp服务器可以获取客户端的ip? 【发布时间】:2021-11-05 22:25:22 【问题描述】:

ip 协议头中的ip 消息。当 tcp 协议接收到一个数据包时,它只有一个 tcp 头,没有 ip 地址。为什么我们可以从套接字中获取客户端的 IP 地址。

【问题讨论】:

没有"tcp 协议接收数据包" 但是有操作系统的网络栈接收数据包。此数据包包含 TCP 有效负载、TCP 标头、IP 标头... - 即客户端源 IP 包含在数据包中。 IP头包含源IP地址,对TCP服务器可用。事实上,它可用于 TCP 层,无论他们在大学里教过你什么有关 OSI 的无关紧要的东西。 tcp 协议不接收数据包,它接收段 一个 TCP 连接由源和目标网络层地址以及源和目标传输层地址标识。这在 RFC 793,传输控制协议中明确说明,这是 TCP 的定义。 【参考方案1】:

TCP 基于 IP:它使用 IP 数据包在 Internet 上传输数据。更具体地说,整个 TCP 数据包在发送之前被装入 IP 数据包的主体中。

所以你不会在 TCP 数据包中找到 IP 地址,因为这些信息属于 IP 数据包。当客户端收到一个 TCP 段时,它会在一个包含 IP 地址的 IP 数据包中接收它。

【讨论】:

IP有包; UDP有数据报; TCP有段;为了更完整一点,以太网有帧。 @user207421 你确定吗? “互联网协议用于传输称为数据报的数据块” - 来源:datatracker.ietf.org/doc/html/rfc791#section-1.1 非常好,但在常用的情况下,正如我所说的那样。

以上是关于为啥tcp服务器可以获取客户端的ip?的主要内容,如果未能解决你的问题,请参考以下文章

为啥NodeJs获取客户端的IP都是这样的

为啥获取客户端ip地址总是:204.204.204.204

ci框架为啥不能获取客户端的ip,一直获取的是服务器的IP

为啥服务器无法获取客户端 MAC 地址,例如客户端 IP?

C#.net Sockets,服务端怎么知道客户端的IP和端口?

急求,请教下各位,为啥用request.getRemoteAddr()获取的Ip都不是真实的