TCP通信是双向通信吗?

use*_*912 5 port firewall network-programming tcp tcpclient

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

TCP通信是双向通信吗?

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

由于第一个程序只是在听,这是否意味着

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

任何回复都非常感谢

Ste*_*tor 6

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

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

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