So basically the transport control protocol has a responsibility of compensating for the imperfections of the IP layer. Data can arrive not out of order, it can arrive not at all and so the TCP layer marks the data in a way, and stores the data in the source computers until it is acknowledged by the destination computers. And so TCP buffers this information, and the buffers are kept on the edge, and this allows the internet, to grow in wonderful ways.{COUGH} So, this results in a layer, that really provides us what seems to be an end to end connection. So we can send data in one end, a stream of data, just send it in, just roll it in, and out comes a stream of data. It comes out in the same order, it comes out reliably, and we can stop thinking about it. And again, the whole goal of this layered architecture is so that we can pretend that the complexity inside this box is simple. So it's not simple inside. But we, the applications, we're going to make use of this transport layer and pretend it's simple. Okay? And so we just, I put in H. And a H comes out and I put in an E and an E comes out and I put in an L and an L comes out, an O comes out, and it's hundreds of thousands of engineers and billions of dollars of research that makes it work, but it just is simple. It's been oversimplified. So now we've talked about the link layer, the IP layer, and the transport layer. And up next, we're going to talk about what we do once we have reliable pipes connecting one application to another.