What ends a TCP stream?

A TCP stream typically starts when a process calls the operating system's TCP/IP APIs to start a TCP connection. It starts with a "3-way handshake" (3 packets) and typically ends with a "4-way close" (4 packets), and there are usually at least 2 individual TCP segments (packets) in between (like a single-packet request and single-packet response), so typically at least 9 packets per stream.

It sounds like you captured 23 separate TCP streams (so at least 200 segments). That's actually a very small number for a modern website. Loading a typical news site like cnn.com usually involves several hundred HTTP requests across many dozens of TCP streams nowadays, just to load all the separate graphics, JavaScript files, CSS files, ads, trackers, et cetera. And each HTTP response is probably many segments long, so you probably captured thousands of segments.

Edited to add: Your packet count for loading google.com was probably so low because you were probably filtering for TCP, thinking everything would be done in HTTP/1.1 or HTTP/2, whereas Google prefers QUIC (HTTP/3) nowadays, which uses UDP instead of TCP. So if you loaded Google.com from Chrome or another browser that supports QUIC, the only TCP connections you saw were probably just requests to third-party ad servers or something.

Edit2: As for what causes a TCP stream to end, either side can close it nicely or reset it when they're done with it. In the case of HTTP over TCP, the browser might end its side of the stream when its last HTTP request has been sent, and the server might end its side of the stream when the last segment of its last HTTP response has been sent (e.g. when the last bytes of the last requested HTML file or image file or CSS file have been sent).