tcp数据包到达应用程序?

时间:2012-03-22 10:06:36

标签: tcp client-server tcp-ip

在客户端 - 服务器环境中,当客户端发送请求“GET /index.php ...等”的数据包(带有源ip / dest ip / ports ...等)时, 在服务器应用程序(守护进程)到达整个数据包(整个数据位),包括mac,IP,端口,tcp标志,有效负载?或只是有效载荷?

因为我不明白脚本如何读取远程地址(如echo $ _SERVER ['REMOTE_ADDR'];)

1 个答案:

答案 0 :(得分:1)

服务器机器获取整个数据包。它的内核和TCP / IP堆栈接收并处理它。应用服务器使用套接字与内核通信,内核是比原始数据包更高层的接口;因此它有不同的看法。假设我们正在谈论TCP,你会发现其他一些事情:

  • 来自物理或数据链路层的信息(例如源和目标MAC地址)在套接字上不可用(除非你做的很奇特,可能是不便携的东西)。
  • 来自IP& TCP层可用,因此应用程序可以使用getsockname()getpeername()等特殊系统调用来检索它。这包括IP地址和端口。
  • 该应用程序不关心来自IP&amp ;;的大部分其他信息。 TCP层,它在套接字上不可用。例如,选项,窗口大小,校验和,片段偏移。
  • 应用程序在套接字上发送和接收数据,就好像它是连续的字节流一样。它不知道或不关心如何将数据流分解为每个包含一段数据的小数据包。

对于您突出显示的$_SERVER['REMOTE_ADDR'];的特定情况,此信息来自上述getpeername()系统调用。 PHP会为您调用此信息并提供相关信息。