UDP datagram communication
A
datagram sent by UDP is transmitted from a sending process to a receiving
process without acknowledgement or retries. If a failure occurs, the message
may not arrive. A datagram is transmitted between processes when one process sends it and another receives it. To send or receive messages
a process must first create a socket bound to an
Internet
address of the local host and a local port. A server will bind its socket to a server port – one that it makes known to
clients so that they can send messages to it. A client binds its socket to any
free local port. The receive method
returns the Internet address and port of the sender, in addition to the
message, allowing the recipient to send a reply.
The following
are some issues relating to datagram communication:
Message size: The receiving process needs to
specify an array of bytes of a particular size in which to receive a message. If the message is too big for the
array, it is truncated on arrival. The underlying IP protocol allows packet
lengths of up to 216 bytes, which includes the headers as well as the message.
However, most environments impose a size restriction of 8 kilobytes. Any
application requiring messages larger than the maximum must fragment them into
chunks of that size.
Generally,
an application, for example DNS, will decide on a size that is not excessively
large but is adequate for its intended use.
Blocking: Sockets normally provide
non-blocking sends and blocking receives for datagram communication (a non-blocking receive is an option in some
implementations). The send operation
returns when it has handed the message to the underlying UDP and IP protocols,
which are responsible for transmitting it to its destination. On arrival, the message
is placed in a queue for the socket that is bound to the destination port. The
message can be collected from the queue by an outstanding or future invocation
of receive on that socket. Messages
are discarded at the destination if no process already has a socket bound to
the destination port.
Timeouts: The receive that blocks forever is suitable for use by a server that
is waiting to receive requests from
its clients. But in some programs, it is not appropriate that a process that
has invoked a receive operation
should wait indefinitely in situations where the sending process may have
crashed or the expected message may have been lost. To allow for such
requirements, timeouts can be set on sockets. Choosing an appropriate timeout
interval is difficult, but it should be fairly large in comparison with the
time required to transmit a message.
Receive from any: The receive method does not specify an origin for messages. Instead,
an invocation of receive gets a message addressed to its socket from any origin. The
receive method returns the Internet
address and local port of the sender, allowing the recipient to check where the
message came from. It is possible to connect a datagram socket to a particular
remote port and Internet address, in which case the socket is only able to send
messages to and receive messages from that address.
Failure model for UDP datagrams • A failure
model for communication channels and defines reliable communication in terms of two properties: integrity and
validity. The integrity property requires that messages should not be corrupted
or duplicated. The use of a checksum ensures that there is a negligible
probability that any message received is corrupted. UDP datagrams suffer from
the following failures:
Omission failures: Messages may be dropped
occasionally, either because of a checksum error or because no buffer space is available at the source or destination.
To simplify the discussion, we regard send-omission and receive-omission
failures as omission failures in the communication channel.
Ordering: Messages can sometimes be
delivered out of sender order. Applications using UDP datagrams are left to provide their own checks to achieve the
quality of reliable communication they require. A reliable delivery service may
be constructed from one that suffers from omission failures by the use of
acknowledgements.
Use of UDP • For some applications, it is
acceptable to use a service that is liable to occasional omission failures. For example, the Domain Name System, which
looks up DNS names in the Internet, is implemented over UDP. Voice over IP
(VOIP) also runs over UDP. UDP datagrams are sometimes an attractive choice
because they do not
suffer
from the overheads associated with guaranteed message delivery. There are three
main sources of overhead:
the need
to store state information at the source and destination;
the
transmission of extra messages;
latency
for the sender.
Java API for UDP datagrams • The Java
API provides datagram communication by means of two classes: DatagramPacket
and DatagramSocket. DatagramPacket:
This
class provides a constructor that makes an instance out of an array of bytes
comprising a message, the length of the message and the Internet address and
local port number of the destination socket, as follows:
Datagram packet
array of bytes containing message length of message Internet address port number
An
instance of DatagramPacket may be
transmitted between processes when one process sends it and another receives
it.
UDP
server repeatedly receives a request and sends it back to the client
DatagramSocket: This class supports sockets for
sending and receiving UDP datagrams. It provides
a constructor that takes a port number as its argument, for use by processes
that need to use a particular port. It also provides a no-argument constructor
that allows the system to choose a free local port. These constructors can
throw a SocketException if the chosen
port is already in use or if a reserved port (a number below 1024) is specified
when running over UNIX.
UDP
server repeatedly receives a request and sends it back to the client
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2024 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.