I am attempting to understand the three way handshake however have difficuly understanding how this applies to a real-world scenario. For example if I am using a web browser such as Mozilla Firefox and browse to the website www.superuser.com, I take it the following occur
I launch Firefox and as an application is assigned a random process identifier. Assuming I launch with a blank page, this is all that happens.
Now if I browse to www.superuser.com, my PC initiates contact with the server by sending a SYN packet.
The server responds to by request by sending an ACK packet along with its own SYN packet
My computer responds with an ACK packet and the connection is established.
Now the confusion,
What does established exactly mean? If I were to for example to then browse to another page on www.superuser.com, does the three way handshake repeat itself?
When does my PC send the FIN flag and when does the server respond with its own FIN packet?
I understand that an application can have multiple threads when making a request from a server, does this mean each thread has its own three way handshake? Are these independent from one another?
What does the various states of FIN_WAIT mean?
Can a server end the connection without being initiated by the client or does it always have to be initiated from the client?