What does host.NewStream() really do in TCP level in details?

Hi all,

I run go-libp2p-examples/echo program on one terminal like: ./echo -l 1200 and the other: ./echo -l 1201 -d /ip4/10.127.24.115/tcp/1200/ipfs/QmcWjovzdKKgY4gPeuSkuDwHM6V3J4bdtGez3AmogLwkrS.

And use wireshark to see what happened to tcp packets in the execution of “opening stream”. The capture is like the first three lines indicate tcp handshake and at line 58 the “Hello World” message are really sent out. So I wonder why it takes dozens of tcp packets before the “Hello World” message is sent out ? Or what does host.NewStream() really do to make the stream ready for writting data? Thanks.