So in this video. I want to walk [through] [a]
very simple connection between two computers here
So what I'm going to do is I'm going to connect from one ninety two dot [one] sixty eight dot zero dot one forty seven
I'm going to make a TCP connection
To one ninety [two] dot one sixty eight dot one ninety two dot ten and so usually the [the] device that is
initiating that connection is is called the client and
Then the device that's connecting to is called a server
But of course once they're connected
It doesn't really matter who connected to who they can both send data
bi-directionally and so what I'm going to do here is I'm going to I'm going to start this connection from
Port five six two zero eight which is just kind of a randomly selected port and I'm going to connect to port
Thirteen on the server, and then what's going to happen is the way this server
Set up is when you connect to port 13 the server is going to send back
Just a little bit of text that has the time of day in it and the server's going to disconnect
and so this will basically let us walk [through] setting up the connection getting a little bit of data from the server and then
walk [through] the disconnection
and
so the first thing that's going to happen is the client is going to send a packet to the server to Initiate the [connection] and
in that packet it's going to give it [the] initial sequence number that the client is going to use and
Normally, it'll just pick a random number for for the sequence number, but in in this example. I'll just start with the sequence number
Equal to zero just [to] kind of make things simple and to tell it [that] this is the initial
Connection it sets. This this syn
Bit these are all the flag bits that are in the TCP header and one of the flag bits is the syn
Bit which stands for [synchronize] and so it since this sim bit?
to tell it to to synchronize this is a new connection and the sequence number is going to be zero and
then the server is going to respond by acknowledging that and
so it's going to send a packet in the other direction with the acknowledgment bits set and so it's going to say acknowledge and
Then it's going to use this acknowledgement [number] to tell it the next sequence number it expects, so it's going to say the acknowledgement number
is one
Because the client just said it's sequence number zero so the server is going to acknowledge that and say the neck
sequence number it expects is one in
the same Packet the server is also going to set its own sin, bit and
Send its sequence number
Which in this case? I'll just say zero, but again. It's going to pick a random sequence number and
then the client is going to acknowledge that with an ak
with the [acknowledgment] number of one and
It's going to set its sequence number
To one, and there's no data in this packet, so even though the sequence number is one the server doesn't
doesn't receive any data so it's still expecting the next byte of actual data to show up with sequence number one and
so at this point with this these three packets back and forth the connection is established, so
So at this point the connection is established
And so once the connection is established both sides can go ahead and send Data back and forth
and
So in this particular case there's some software running on the server that whenever anything connects to port 13
It's going to send back the the time of day send back a string with the time of [day] in it
And that's going to be
Just some data and in this case. Let's say it's 22 bytes
bytes Long
So there's 22 bytes of data that contain the time of day and so the sequence number for this is going to be
sequence number one
But then what's going to happen is the client is going to acknowledge that?
with an ack and the acknowledgement
number is just going to say what the next sequence number to expect so the sequence number was expecting was one right because
the Client initially sent
Sequence number 0 as the syn and so that the client is now expecting one to be the next sequence number and so it
Acknowledges that saying it's acknowledging and saying that one is the next number it expects
And now it's receiving something with sequence number one, but it's receiving 22 bytes
And so what it's going to do is it's going to saying that the next thing
It expects is 23, so it's going to [acknowledge] and say that the next sequence number. It expects is 23
Because it's already received bytes 1 through 22
so the next thing expects is 23 and
[then] at this point the server has sent the [the] time and so the server is going to go ahead and disconnect
so this is kind of the the [end] of sending Data and
the server is now going to Disconnect [and] what it does is it sends a
packet with the fin bit set
And in this case the sequence number is going to be 23
Because that's the the next sequence number and so the fin bit is
just another one of these bits that are in the TCP header and
its purpose is [to] is to say that the connection is is finished or
We want to disconnect and so the server wants to disconnect
So it sends a packet with the fin bit set and it's sequence number 23 and then the client is going to acknowledge that
So it sends an ack
with the acknowledgement [number] of
24 does it just received 23. It's now going to send back say okay. I got that the next thing I'm expecting is 24 and
so at this point the server has closed the connection so the server can't send any more data to the client and
Now the the final thing that happens is the client code closes the connection as well
So the client is going to send [another] packet here with its fin
Bit set so the server sent a fin now the clients turn to send a fin
And then the server will finally acknowledge that and so when the client sends this fin
it's going to set the sequence number to [one] because
if we go back up here remember the first thing the client sent was this sin with a sequence number of 0 and
Then the server acknowledged that saying the next thing it's expecting. It's acknowledging it the next sequence number
It's expecting is 1 and then the server doesn't send or excuse me the client doesn't send anything other than other than [acknowledgment]
So it's just sending this acknowledgment this acknowledgments not sending any data all the data was in this direction
So at this point the next next sequence number that the client is going to use is sequence number 1
So it sends its fin with sequence number 1
and then the server
Acknowledges that saying that the next sequence number for the client is two and at that point the connection is completely is
completely closed
and
So I actually set this connection up, and we can take a look in wireshark
I captured it in Wireshark
And so [I'd] [encourage] you to try this as well as go into wireshark and try to capture some TCP
Traffic and see what you see
[but] [what] we see here is that the first three packets are the
setting up the connections
So here it shows [you] what flags are set so you can see the syn
And then the response with the syn ack
And then the response with the ack and so after these three packets here the connection [is] established
[so] [we] have the sin the sin with the ack and then the ack and at that point
we're established and then at that point the
Server can [send] and so this is from the server [192] [10] can send to this destination the actual data
and if you look down [here] in the data
You can actually see it has the time and date. Which is which is what this particular server does
and then you can see the [acknowledgment] again from the client and
then the last four packets are the phinn
from the server the ack from the client the [phinn] from the client and then the [ack] from the server to close the connection and
Wireshark is nice too. Because it tells you the sequence numbers and the acknowledgement numbers in each direction as well
so
These should all match up the with the scenario that we that we just walked through and one of the other nice things that wireshark
Does is you see it's saying sequence number [0] but if we actually look inside the TCP header the sequence number
It says sequence number 0 then it says relative sequence number and if you actually look at the data you can see it's actually this
5 1 0 5 b 6 2 1 so it's picking this this kind of random sequence number
but wireshark is nice enough to
To just sort of subtract out that starting sequence number and then show all of these numbers as relative
So it's it's a lot easier to follow that way and so you can see the server is starting with
You know sequence number 0 even though it's really this this crazy number
and then the acknowledgement
From receiving the client is starting with that sequence number zero and then the acknowledgement from the client is saying the [next] thing it's expecting
is one
When really so this is b six to one if we look at the client and we look at the relative act number
It's actually saying b six to two so in reality it's it's adding one to that to that crazy number
but wireshark is nice enough to show us the sequence numbers and acknowledgement numbers is as
Kind of more more friendly numbers or starting at zero
So again, I would I would encourage you to
To download wireshark and play with it and try and see if you can you can see TCP in operation like this for yourself