-1

在开始网络项目之前,我试图完全理解 TCP/UDP 协议。

假设我有一个 TCP 服务器。我知道如果我想让某人通过 Internet 进行通信,我需要打开我的监听端口:路由器/防火墙让它通过并将其重定向给我。

一个 TCP 客户端正在连接到我,现在两个系统之间有一个绑定套接字。但是,如果这个端口被阻塞,服务器如何向客户端发送数据:

端口是动态选择的,防火墙/路由器如何知道它需要允许来自我的服务器的数据,是因为我已经向它发送了一些东西并且现在知道存在某种连接?

如果是,是否意味着对于 UDP,两台机器都需要解锁端口?

4

1 回答 1

1

我不完全理解它是如何工作的,但这是我到目前为止得到的:

  1. 服务器正在监听端口 X
  2. 客户端尝试连接到端口 X 上的服务器(生成随机端口 Y)
  3. 服务器现在可以在端口 Y 上响应客户端

由于 TCP 带有 keep-alive 数据包,端口 Y 保持打开状态。防火墙/路由器让它“打开”了一段时间……几秒钟?因为他的网络有传出数据包(等待传入?)

这就是两个 UDP 客户端可以进行通信的方式: http ://en.wikipedia.org/wiki/UDP_hole_punching

Skype 示例: http ://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197.html

如果我错了或您似乎不太好,请纠正我。

谢谢

编辑

因此,NAT 路由器会保存有关哪台内部计算机与哪台外部计算机进行通信以及两者使用了哪些端口的表格。

这就是让防火墙“解锁”我们的端口的技巧。

于 2013-06-01T21:09:41.223 回答