TCP通信是2路通信吗?
Posted
技术标签:
【中文标题】TCP通信是2路通信吗?【英文标题】:Is TCP Communication a 2-way communication? 【发布时间】:2011-12-24 23:15:26 【问题描述】:这真是一个关于 TCP 通信的新手问题。
TCP 通信是双向通信吗?
让我给出一个场景: 一个程序正在侦听 TCP 端口,例如端口 25。外部程序使用随机输出端口(例如端口 45000)连接到第一个程序的 IP 地址(端口 25)
既然第一个节目只是在听,那是不是意味着
-
第一个程序只能通过25端口接收数据,不能发回任何数据?
如果它可以发送数据,是什么保护第二台计算机的传出端口 45000 免受第一个程序通过端口 25 的恶意攻击?据我所知,防火墙仅适用于传入端口。
非常感谢任何回复
【问题讨论】:
【参考方案1】:TCP 始终是双向的。没有与 UDP 一样的“发送后忘记”。第一个程序必须打开一个服务器套接字。这意味着,它在端口 25 上侦听 TCP SYN(一个标志,表示正在打开连接)。如果您的第二个程序连接到端口 25(来自端口 45000),则该连接由 4 个值标识,即您的主机 IP、您的主机端口、远程主机的 IP、远程主机的端口。此时,在完成 3 次握手(SYN、SYN ACK、ACK)的地方,第一个程序从返回的服务器套接字中获取一个客户端套接字,该套接字连接到您的第二个程序。所以是的,一旦建立连接,这是一个双向通信,你很容易受到攻击。
防火墙主要阻止传入流量。如果您的第一个程序位于防火墙后面,并且没有正确配置防火墙,防火墙会从第二个程序中删除 SYN 数据包。不会建立任何联系。如果配置正确,防火墙还可以检查出站连接。
正如我所说。一旦您连接到远程程序,远程程序就会获得一个客户端套接字,就像您的本地程序一样,通过它完成所有通信。
【讨论】:
感谢您的解释...这是否意味着正在连接的客户端容易受到攻击?这就是为什么当我们浏览某些网站(端口 80)时,有时会收到来自 google 的恶意警告,不要访问该网站吗? T 啊,是的,不是的。如果您在端口 80 上连接到 google,则 google 网络服务器会接受您的客户端。然后,服务器程序返回一个客户端套接字,它连接到您的浏览器客户端套接字。然后,您的浏览器通过连接发送“GET / HTTP/1.1”HTTP 数据包,由 google 端读取。然后 Google 会获取他们的网站并将其发送给您。现在是恶意攻击可以发挥作用的时候了。有多个向量可能会受到攻击。有人可以劫持你的 TCP 连接,也有人可以注入苹果。进入谷歌网站的流量 (javascript) 我认为你的意思是网站显示红色横幅,谷歌告诉你不要去那里。不,这些网站不利用 TCP 连接。您在那里连接,他们通过该 TCP 连接向您发送恶意内容。你去那里,做 HTTP 的 GET 部分,网站用恶意代码响应。 TCP in 永远不会受到攻击,但是解析整个事务(HTTP 部分)以便渲染网站的浏览器却受到攻击。 再次感谢,您的解释非常好。那么 TCP 是否有可能通过您的传出端口受到攻击?如果是,我们如何保护我们的传出端口? TCP 实际上从未真正受到攻击。大多数情况下,您的 TCP 堆栈是可能被恶意制作的数据包破坏的结构。只要您的客户端套接字有一个连接目的地(如谷歌),就可以了。只有谷歌可以向您发送恶意代码。只要您的操作系统正确处理 TCP 数据包,就无需担心这一点。像 Norton、Ashampoo 或 Kaspersky 这样的防火墙在保护您的机器免受传入连接方面也做得很好。如果您在 NATed 路由器后面,则没有传入连接,只会传出到您请求的网站以上是关于TCP通信是2路通信吗?的主要内容,如果未能解决你的问题,请参考以下文章
7-网络芯片CH395Q学习开发-模块使用Socket0-5作为6路TCP客户端和电脑上位机TCP客户端局域网通信(Socket缓存区配置)