Moreover, why Java developer should understand these two protocol in detail ?
Java is extensively used to write multi-threaded, concurrent and scalable servers. Java also provides rich Socket programming API for both TCP and UDP based communication.
To start with,
TCP - Transmission Control Protocol
TCP is one of the
main protocols in TCP/IP networks. Whereas the IP protocol deals only
with packets, TCP enables two hosts to establish a connection and
exchange streams of data. TCP guarantees delivery of data and also
guarantees that packets will be delivered in the same order in which they were
sent.
UDP - User Datagram Protocol
UDP (User
Datagram Protocol) is a communications protocol that offers a limited
amount of service when messages are exchanged between computers in a network
that uses the Internet Protocol (IP). UDP is an alternative to the
Transmission Control Protocol (TCP) and, together with IP, is sometimes
referred to as UDP/IP.
----------------------------------------- LETS GET THE DIFFERENCES--------------------------------------
Connection oriented vs Connection less
TCP is a connection oriented protocol, and UDP is
connection less protocol. This means a connection is established between client
and server, before they can send data. Connection establishment process is also
known as TCP hand shaking where control messages are interchanged between
client and server. Attached image describe the process of TCP handshake, for
example which control messages are exchanged between client and server. Client,
which is initiator of TCP connection, sends SYN message to server, which is
listening on a TCP port. Server receives and sends a SYN-ACK message, which is
received by client again and responded using ACK. Once server receive this ACK
message, TCP connection is established and ready for data transmission. On the
other hand, UDP is a connection less protocol, and point to point connection is
not established before sending messages. That's the reason, UDP is more
suitable for multicast distribution of message, one to many distribution of
data in single transmission.
Reliability
TCP provides delivery guarantee, which means a message
sent using TCP protocol is guaranteed to be delivered to client. If message is
lost in transits then its arecovered using resending, which is handled by TCP
protocol itself. On the other hand,UDP is unreliable, it doesn't provide any delivery
guarantee. A datagram package may be lost in transits. That's why UDP is not suitable for
programs which requires guaranteed delivery.
Ordering
Apart from delivery guarantee, TCP also guarantees
order of message. Message will be
delivered to client in the same order, server has
sent, though its possible they may reach out of order to the other end of the network. TCP
protocol will do all sequencing and ordering for you. UDP doesn't provide any ordering
or sequencing guarantee. Datagram packets may arrive in any order. That's why TCP is
suitable for application which need delivery in sequenced manner, though there are UDP
based protocol as well which provides ordering and reliability by using sequence number
and redelivery, for example, TIBCO Rendezvous,which is actually a UDP based application.
Data Boundary
TCP does not preserve data boundary, UDP does. In
Transmission control protocol, data is sent as a byte stream, and no distinguishing
indications are transmitted to signal message (segment) boundaries. On UDP, Packets are sent
individually and are checked for integrity only if they arrived. Packets have definite
boundaries which are honoured upon receipt, meaning a read operation at the receiver socket will
yield an entire message as it was originally sent. Though TCP will also deliver
complete message after assembling all bytes. Messages are stored on TCP buffers before sending to
make optimum use of network bandwidth.
Speed
In one word, TCP is slow and UDP is fast. Since TCP
does has to create connection, ensure guaranteed and ordered delivery, it does lot more
than UDP. This cost TCP in terms of speed, that's why UDP is more suitable where speed
is a concern, for example online video streaming, telecast or online multi player games.
Heavy weight vs Light weight
Because of the overhead mentioned above,
Transmission control protocol is considered as heavy weight as compared to light weight UDP
protocol. Simple mantra of UDP to deliver message without bearing any overhead of creating
connection and guaranteeing delivery or order guarantee keeps it light weight. This is also
reflected in their header sizes, which is used to carry meta data.
Header size
TCP has bigger header than UDP. Usual header size of
a TCP packet is 20 bytes which is more than double of 8 bytes, header size of UDP
datagram packet. TCP header contains Sequence Number, Ack number, Data offset, Reserved,
Control bit, Window, Urgent Pointer, Options, Padding, Check Sum, Source port,
and Destination port. While UDP header only contains Length, Source port,
Destination port, and CheckSum. Here is how TCP and UDP header looks like :
UDP HEADER |
TCP and UDP based Protocols
One of the best example of TCP based higher end
protocol is HTTP and HTTPS,which is every where on internet. In fact most of the common
protocol you are familiar of e.g.
Telnet, FTP and SMTP all are based over Transmission
Control Protocol. UDP don't have any thing as popular as HTTP but UDP is used in protocol
like DHCP (Dynamic Host Configuration Protocol) and DNS (Domain Name
System). Some of the other
protocol, which is based over User Datagram protocol
is Simple Network Management
Protocol (SNMP), TFTP, BOOTP and NFS (early
versions).