TCP通信是双向通信吗?

时间:2011-11-09 02:14:17

标签: tcp network-programming port firewall tcpclient

这真是一个关于TCP通信的新手问题。

TCP通信是双向通信吗?

让我给出一个场景: 一个程序正在侦听TCP端口,例如端口25.外部程序使用随机传出端口连接到第一个程序的IP地址(端口25),例如端口45000

由于第一个节目只是在听,这是否意味着

  1. 第一个程序只能接收数据而不能通过端口25发回任何数据?
  2. 如果它可以发送数据,是什么保护第二台计算机的传出端口45000免受第一个程序通过端口25的恶意攻击?据我所知,防火墙只适用于传入端口。
  3. 非常感谢任何回复

1 个答案:

答案 0 :(得分:6)

TCP始终是双向的。与UDP一样,没有“发送和忘记”。第一个程序必须打开服务器套接字。这意味着,它在端口25上侦听TCP SYN(一个标志,表示正在打开连接)。如果您的第二个程序在端口25(从端口45000)连接,则该连接由4个值,主机IP,主机端口,远程主机IP,远程主机端口标识。此时,在三次握手(SYN,SYN ACK,ACK)完成的情况下,第一个程序从返回的服务器套接字获取一个客户端套接字,该套接字连接到第二个程序。所以,是的,一旦建立连接,它就是双向通信,你很容易受到攻击。

防火墙主要阻止传入流量。如果您的第一个程序位于防火墙后面,并且未正确配置防火墙,则防火墙会从第二个程序中删除SYN-Packets。不会有任何联系。如果配置正确,防火墙还可以检查出站连接。

正如我所说。一旦连接到远程程序,远程程序就会像本地程序一样获得客户端套接字,通过它完成所有通信。