This article includes a list of references, related reading or external links, but its sources remain unclear because it lacks inline citations. (August 2016) (Learn how and when to remove this template message)
Best-effort delivery describes a network service in which the network does not provide any guarantee that data is delivered or that delivery meets any quality of service. In a best-effort network, all users obtain best-effort service. Under best-effort, network performance characteristics such as network delay and packet loss depend on the current network traffic load. When network load increases, this can lead to packet loss, retransmission, packet delay variation, and further network delay, or even session disconnect.
Best-effort can be contrasted with reliable delivery, which can be built on top of best-effort delivery (possibly without latency and throughput guarantees), or with virtual circuit schemes which can maintain a defined quality of service.
The postal service delivers letters using a best-effort delivery approach. The delivery of a certain letter is not scheduled in advance – no resources are preallocated in the post office. The service will make their "best effort" to try to deliver a message, but the delivery may be delayed if too many letters suddenly arrive at a postal office or triage center. The sender is generally not informed when a letter has been delivered successfully.
Conventional telephone networks are not based on best-effort communication, but on circuit switching. During the connection phase of a new call, resources are reserved in the telephone exchanges, or a busy signal informs the user that the call is blocked due to lack of free capacity. An ongoing phone call can never be interrupted due to overloading of the network, and is guaranteed constant bandwidth.
The Internet protocol offers a best-effort service of delivering datagrams between hosts. IPv4 is a connectionless internet protocol that depends on the best-effort delivery approach. IPv4 datagrams may be lost, arbitrarily delayed, corrupted, or duplicated. The applications built on top of it implement the additional services they require on an end-to-end basis. Transmission control protocol (TCP) provides a guaranteed delivery of an octet stream between a pair of hosts to the above layer, internally splitting the stream into packets and resending these when lost or corrupted. User datagram protocol (UDP) provides a thinner abstraction layer which only error-checks the datagrams. Both transport-layers are the base protocols and provide multiplexing between processes on the same host implemented on different port numbers.