这是一个小理论问题,让我困惑了很长时间。
基本上,如果我们在一个私有局域网内,并且我们希望传入的数据包到达,例如,位于其中一台机器上的 HTTP 服务器,我们会转发端口,以便传入的数据包准确地到达那台计算机。
现在,我对“响应”数据包如何到达 LAN 内的目的地感到非常困惑,例如,当我们打开一个网页左右时。无法真正找到有关该主题的任何有用信息。
我希望有人能给我一些线索或将我链接到一些可能解释它的信息。谢谢。
编辑:我想我应该澄清一下。我要问的一个例子是这样的:
1. 局域网内的一台具有单个外部 IP 的计算机尝试从该局域网外的网络服务器加载网页(基本上在互联网上)
2 . 网络服务器响应并将网页发送回该计算机。
在这一点上让我很困惑的是,路由器如何知道在没有先前端口转发的情况下发送传入数据的计算机(假设路由器连接到具有多台计算机的 LAN)。
所以我知道 HTTP 基本上只是一个基于 TCP 的文本协议,而 TCP 是基于状态/连接的。这意味着浏览器必须在执行 HTTP 请求之前通过 TCP 连接到服务器。那么问题是:浏览器通常会为每个 HTTP 请求创建一个新的 TCP 连接吗?
只要用户仍在该服务器上浏览,浏览器就可以打开一个 TCP 请求并使其保持活动状态,但是服务器将不得不使用大量的最大连接数来处理它。但是话又说回来,如果浏览器为每个请求创建一个连接,并且用户在同一台服务器上浏览很多,那似乎是一种浪费。它通常如何工作?也许通过使用计时器?
据说 HTTP 是无状态的。意思是,它不需要存储用于数据传输的信息。
但是 HTTP 使用 TCP,它是面向状态的。
如果是这样,HTTP 是如何变成无状态的?
是什么区别Ethernet,TCP和IP简单(简单的抽象)的术语?
请不要从维基百科复制...
我想了解 TCP 半开放连接和 TCP 半封闭连接之间有什么区别,谁能说出它们到底是什么?
ping包是一种ICMP包。ICMP 和 TCP 之间有什么关系吗?换句话说,我们能保证他们到达网络吗?我想知道网络中的ICMP数据包是TCP、UDP还是两者都不是?
Linux 上每个 IP 地址是否有 65536 个打开的 TCP 连接的硬限制?我在某处读到过,但有人要求确认,我就是找不到。
我似乎记得文件描述符是一个 16 位整数,这以某种方式限制了它?
或者是这个 hokum,除了服务器有多强大之外,没有任何限制吗?
我正在寻找一种可以跨 Windows(xp 到 7)工作的工具,它允许我打开到指定 IP 和端口的 TCP 连接。此功能曾经存在于 windows xp (netsh diag connect iphost) 中,但 Netsh diag 命令似乎已在 vista/7 中删除。我一直在寻找类似的东西,我也搜索了超级用户,但我似乎找不到任何东西。
已经内置到 Windows 中的东西是理想的,但是一个小的可执行文件(最好是命令行,独立的可执行文件)。
编辑:我应该进一步说明。我熟悉 Telnet 和 Putty,这是我目前使用的,但是,我在这样的环境中必须指导非技术用户通过电话解决非常技术性的问题,而无需任何形式的远程访问(听起来很有趣,对吧?)。虽然 telnet 可以工作,但它没有明确说明 TCP 连接是否成功;您必须查看标题栏和终端输出的内容,出于某种原因,这对用户来说似乎是不可能的。如果存在这样的工具,我正在寻找具有明确的“TCP 连接成功/失败”类型响应的内容。
编辑#2:感谢所有回答的人。所有的建议都很好,尽管我没有像我应该的那样提出明确的问题。谢谢您的帮助。
我有一个小型本地网络,它搭载在一个固定 WiFi 上,我ssh在 OS X 上使用-oServerAliveInterval=240PuTTY 0.62 在 Windows 7 Professional 上建立到我的 Linode、Hetzner 和其他服务器的连接。
使用 PuTTY,我选择Connection→Sending of null packets to keep session active到 240。Enable TCP keepalives (SO_KEEPALIVE option)默认关闭。
当我的互联网暂时关闭大约一分钟(必须在强制门户上重新进行身份验证)时,PuTTY 几乎总是丢失我拥有的所有打开的 ssh 会话,尤其是那些有任何类型活动的会话,但 OS X 上的 OpenSSH只要我的互联网在大约一两分钟内恢复,就永远不会丢失任何会话,即使我实际上尝试在 ssh 中输入一些内容,并且在整个 60 秒左右的时间内没有看到任何回复,直到我的连接再次处于活动状态。(所以我确信始终保留 NAT 状态。)
我可以阻止 Windows / PuTTY 抢先丢弃良好的连接吗?
在我看来,好像 SO_KEEPALIVE 或类似的东西在 Windows 中实际上是默认开启的,并且检测陈旧连接的超时时间太小了。我想将它增加到几秒钟以上,类似于 OS X 如何不受这些短暂的临时中断的影响,只要中断只有几百秒并且低于-oServerAliveInterval(times ServerAliveCountMax)的值。
我想知道,由于 TCP 标头字段中的序列号是在握手期间随机选择的,并且随着数据包的交换而逐渐增加,那么在 2^32 - initial_seq_no 传输之后会发生什么?序列号是否环绕并变为 0 或是否重用了初始值(或者是从前一个停止的位置初始化的新连接)?