At the heart of distributed tracing are the sidecar proxies, which intercept the network traffic going in and out of each microservice. These sidecar proxies can trace any network request, such as HTTP/1.1, HTTP/2.0, and gRPC.
If the incoming request doesn't have tracing headers, then the sidecar proxy adds a root span before passing the request to the application container in the same pod. Let's look at an example using curl -s (http://httpbin.istio.io/headers):
Refer to https://zipkin.io/zipkin/2.11.3/zipkin/zipkin2/Span.html for a definition of span.
$ curl -s http://httpbin.istio.io/headers
{
"headers": {
"Accept": "*/*",
"Content-Length": "0",
"Host": "httpbin.istio.io",
"User-Agent": "curl/7.29.0",
"X-B3-Parentspanid": "...