涉及两个以上端口的TCP握手
我在Kubernetes集群上部署了一个应用程序。我在这次部署中使用Istio/ENVICENT来控制入站/出站流量。我使用TCPdump收集了一些TCP数据包,以调查一些问题 据我所知,TCP握手应该只涉及一对5元组(src IP、src端口、dst IP、dst端口、协议)。 比如说涉及两个以上端口的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
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