涉及两个以上端口的TCP握手

涉及两个以上端口的TCP握手,tcp,istio,handshake,Tcp,Istio,Handshake,我在Kubernetes集群上部署了一个应用程序。我在这次部署中使用Istio/ENVICENT来控制入站/出站流量。我使用TCPdump收集了一些TCP数据包,以调查一些问题 据我所知,TCP握手应该只涉及一对5元组(src IP、src端口、dst IP、dst端口、协议)。 比如说 IP: 198.168.1.100 Port: 52312 ----SYN----> IP: 198.168.1.101 Port: 80 IP: 198.168.1.100 Port: 52312 &l

我在Kubernetes集群上部署了一个应用程序。我在这次部署中使用Istio/ENVICENT来控制入站/出站流量。我使用TCPdump收集了一些TCP数据包,以调查一些问题

据我所知,TCP握手应该只涉及一对5元组(src IP、src端口、dst IP、dst端口、协议)。 比如说

IP: 198.168.1.100 Port: 52312 ----SYN----> IP: 198.168.1.101 Port: 80
IP: 198.168.1.100 Port: 52312 <--SYN ACK-- IP: 198.168.1.101 Port: 80
IP: 198.168.1.100 Port: 52312 ----ACK----> IP: 198.168.1.101 Port: 80
请注意,SYN ACK是从端口80返回的。首先,我认为可能丢失了数据包,实际上有两次握手,但从序列号和确认号来看,似乎是一次握手

如果这是一次握手,你会如何解释?有没有一种技术可以使TCP握手方式有所不同

如果这是一次握手,你会如何解释?有没有一种技术可以使TCP握手方式有所不同

据此:

这是一次单独的握手,只是有两个单独的连接,第一个连接到特使,然后特使侧车作为中间人发送到您的pod

这就是神奇之处:连接不是直接在客户端和服务器之间建立的,而是分为两个独立的连接:

客户端和sidecar之间的连接

sidecar和服务器之间的连接

这两个连接是独立握手的,因此即使后者失败,前者也可能成功

双方的实际情况:中间人坐在客户机和服务器之间


如果您想了解有关15001端口本身的更多信息,可以访问istio

详细说明。

如前所述,Istio在0.0.0.0:15001上生成一个侦听器,接收pod的所有出站流量,然后将请求移交给虚拟侦听器。这是关于如何在介质上实际工作的。另外,请查看
2.4根本原因
Istio侧车拦截
10.X.X.X    127.0.0.1   TCP 76  33500 → 15001 [SYN] Seq=3333992218
X.X.X.X     10.X.X.X    TCP 76  80 → 33500 [SYN, ACK] Seq=2228273021 Ack=3333992219
10.X.X.X    127.0.0.1   TCP 68  33500 → 15001 [ACK] Seq=3333992219 Ack=2228273022