如何通过网络允许/拒绝数据包

时间:2013-06-01 20:38:41

标签: sockets networking network-programming

我正在尝试在启动网络项目之前完全理解TCP / UDP协议。

假设我有一台TCP服务器。我明白,如果我希望有人通过互联网进行通信,我需要打开我的监听端口:路由器/防火墙让它通过并重定向给我。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 服务器正在侦听端口X
  2. 客户端尝试在端口X上连接到服务器(生成随机端口Y)
  3. 服务器现在可以通过端口Y
  4. 返回到客户端

    由于带有keep-alive数据包的TCP,端口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路由器因此保留了内部计算机与哪台外部计算机进行通信以及两者使用哪些端口的表。

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