So the end-hosts are where all this congestion control actually happens. And the reason for that we did allude to a little bit, but really the end-to-end principle was one, some of the ideas that came behind the network, and why TCP/IP is allocated in the way that it is. the idea is to have really intelligent end hosts. Right? End hosts that. can process, for instance, all the way up the application layer and really doing a lot of functions itself and a dumb core network. Right? So the idea is that the network just serves to get the data where it needs to go. Right? Because it's not doing anything else. The cellular network is quite the opposite actually. The Our end, our end hosts are not as intelligent and the the core, or the network that send through is, is much smarter because it's allocating us different sessions, and it's doing connection establishment and so on so it's kind of the opposite mentality, really. But the end-to-end principle means, really saying. in, in layman's terms, it's not, you know, it's very complicated and I supposed much more in depth than this. But, just have intelligent end hosts and dumb core network, so a lot of the functionality should lie with the end host. And so, the senders themselves are going to manage the end-to-end connections, and they're going to manage congestion. Right? That's those are things happening at the transport layer, which nothing in the network itself really except for that the ends are going to go up to the transport layer. So, how is this possible, though, because they're not the network themselves. Right? Wouldn't it make more sense to have the routers during congestion rate because the routers themselves are monitoring the links. Right? or pretty closely at least and they can probably tell how much congestion there is from link to link. So on the other hand the end host which is just sitting at this one side. Right? Is going to have a much harder time to tell which links within the network are very congested. But the end-time principle says that we're going to do congestion control over here. Well, we can do this as we have the network actually provide hints to the end host, to say. Say, well this is kind of what the network looks like right now, and the simplest way to do that is through acknowledgement packets. Right? Which is what we talked about with CSMA carrier sensing multiple access back with Wi-fi. So, when you send a piece of data out. once it gets to the receiver. The way you know it gets to the receiver is the receiver will send an acknowledgement back. This is at least the case with TCP transfer control protocol. With UDP, which is just another transport layer protocol, you don't deal with acknowledgements or anything. UDP doesn't really do much functionality at all besides just sending the data. To where it needs to go. TCP has a lot more functionality, which also creates a lot more overhead, so there are trade offs. so these acknowledgements were sent back upon the proper receipt, and the, presence and the timing of them can help us infer congestion. Alright? So first of all, are they even there? Do we even get an acknowledgement? Right? If we didn't get an acknowledgement, I mean, it doesn't necessarily mean that there is congestion. For instance, it could just be a bad link in the network, but we could infer that maybe there is congestion and we should slow down our transmission. Also if the packets come back really late. Right? If they're taking a while to get back we can infer that there's a lot of queuing delay within the network. So, [UNKNOWN] things are spending lots of time in the queue. So, just by the presence of the acknowledgement packet in analysing the delay in the acknowledgement or whether or not the acknowledgement arrives. We can do a lot and infer congestion right at the sending side. And so, here really recall, we should just recall CSMA. We talked about acknowledgements in the sense of knowing whether collisions had occurred or not.