# Effective IoT Congestion Control Algorithm
## 1 Introduction  
There is significant enthusiasm in both industry and academia about the Internet of Things (IoT). Its goal is to create universally deployable and interoperable \"smart\" gadgets that can connect wired or wirelessly and function independently. Due to technological advancements and the infrastructure provided by the IoT, individuals can now use a wide variety of gadgets to access the internet and exchange real-time data. Transmission control protocol (TCP) is the most reliable of all the protocols used for data transmission over the Internet. The IoT facilitates the connection and communication of a wide variety of electronic gadgets through the Internet. There is currently a wide range and rapid growth of connected IoT devices. Consequently, there has been an exponential rise in network congestion. There is a clear correlation between the quantity of internet-connected devices and the level of congestion. The exponential growth of internet-connected devices has dramatically increased network congestion. Therefore, modifications to TCP are necessary. Specifically, there is a need for modifications that are well suited to the IoT environment and that can start the connection in terms of capacity and adjust the rate of transmission as congestion rises. Most IoT devices have limited energy and work well in sensitive areas. Critical data are sent from various sensors that serve different areas, including military surveillance and health care monitoring [1]. Electric smart meters have emerged as a relevant topic in the IoT and are working well as efficient IoT applications [2]. In addition to other application layer protocols, the IoT also provides special application layer protocols that serve its uses and requirements, including Message Queuing Telemetry Transport (MQTT), Extensible Messaging and Presence Protocol (XMPP) and Representational State Transfer (RESTful) HTTP. These algorithms do not satisfy the requirements of IoT. A Congestion Control Algorithm (CCA) is required to balance their varying bandwidth, latency, and delay requirements. Since the 1980s, researchers have proposed numerous TCP CCA, and developed several standards and modifications for these algorithms. The first TCP specification was proposed in 1981 [3]. In late 1986, the first congestion collapse occurred. At the time, there was no clear reason for this collapse, and it was assumed that it was due to the malfunctioning of a TCP protocol. In 1988, a new policy was suggested by [PERSON]: the TCP Tahoe [4]. It included Slow Start (SS), Retransmission Timeout (RTO) and Fast Retransmit and Congestion Avoidance Algorithm (CAA). To solve the congestion problem, the policy aimed to deal with different sending phases. [PERSON] et al. [5] created TCP SACK (Selective Acknowledgment) to address packet losses. TCP SACK enables the receiver to identify the segments that have been delivered. This allows the TCP sender to promptly identify and rebroadcast the missed segment. SACK further allows the TCP receiver to selectively acknowledge out-of-order segments. It transmits segments to the source and allows it to only transmit missing parts. SACK's main drawback is the receiver's lack of appropriate acknowledgements. Selective acknowledgement is difficult and requires transmitter and receiver acknowledgement protocol changes. Following this, numerous techniques and algorithms were proposed to adjust sending rate over TCP and avoid congestion. The degradation in throughput in TCP Tahoe occurred because the congestion window (CWND) decreased to one when any packet loss occurred. This issue was identified by [PERSON] and [PERSON] [6], who suggested TCP NewReno. Most of these CCAs use the concept of \"Additive Increase Multiplicative Decrease\" (AIMD); this means the CWND increases in an exponential fashion to reach maximum bandwidth. The CWND decreases when network bandwidth is reached and congestion in the network is detected because of segment losses.