Placeholder Image

Subtitles section Play video

  • 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

So in this video. I want to walk [through] [a]

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it