UDP User Datagram Protocol 1 UDP User Datagram

  • Slides: 18
Download presentation
UDP: User Datagram Protocol 1

UDP: User Datagram Protocol 1

UDP: User Datagram Protocol r “bare bones”, “best effort” transport protocol r connectionless: m

UDP: User Datagram Protocol r “bare bones”, “best effort” transport protocol r connectionless: m no handshaking between UDP sender, receiver before packets start being exchanged m each UDP segment handled independently of others r Just provides multiplexing/demultiplexing [RFC 768] Pros: r No connection establishment m No delay to start sending/receiving packets r Simple m no connection state at sender, receiver r Small segment header m Just 8 bytes of header Cons: r “best effort” transport service means, UDP segments may be: m m lost delivered out of order to app r no congestion control: UDP can blast away as fast as desired 2

UDP more Used for Mux/Demux r often used for streaming multimedia apps m loss

UDP more Used for Mux/Demux r often used for streaming multimedia apps m loss tolerant m rate sensitive r other UDP uses m DNS m SNMP 32 bits Length, in bytes of UDP segment, including header r reliable transfer over UDP: add reliability at application layer m application-specific error recovery! source port # dest port # length checksum Application data (message) UDP segment format 3

UDP Demultiplexing r Create sockets with port numbers: Datagram. Socket my. Socket 1 =

UDP Demultiplexing r Create sockets with port numbers: Datagram. Socket my. Socket 1 = new Datagram. Socket(6428); Datagram. Socket my. Socket 2 = new Datagram. Socket(4567); r When host receives UDP segment: m m checks destination port number in segment directs UDP segment to socket with that port number r UDP socket identified by two-tuple: (dest IP address, dest port number) r IP datagrams with different source IP addresses and/or source port numbers directed to same socket 4

UDP Demultiplexing Example Datagram. Socket server. Socket = new Datagram. Socket(6428); P P 1

UDP Demultiplexing Example Datagram. Socket server. Socket = new Datagram. Socket(6428); P P 1 P P SP: 6428 DP: 9157 client IP: A SP: 9157 DP: 6428 SP: 6428 DP: 5775 server IP: C SP: 5775 DP: 6428 Client IP: B Source Port (SP) provides “return address”: Identifies the process at the other end of the line 5

UDP checksum Goal: detect “errors” (e. g. , flipped bits) in transmitted segment Receiver:

UDP checksum Goal: detect “errors” (e. g. , flipped bits) in transmitted segment Receiver: Sender: r treat segment contents as sequence of 16 -bit integers r checksum: addition (1’s complement sum) of segment contents r sender puts checksum value into UDP checksum field r compute checksum of received segment r check if computed checksum equals checksum field value: m NO - error detected m YES - no error detected. But maybe errors nonetheless? • Reordered bytes r Why checksum at UDP if LL provides error checking? m IP is supposed to run over ANY LL, so UDP does its own error checking 6

How to program using the UDP? Socket Layer TCP UDP IP LL PL Socket

How to program using the UDP? Socket Layer TCP UDP IP LL PL Socket Layer r Socket Layer: m Programmer’s API to the protocol stack TCP UDP IP LL PL r Typical network app has two pieces: client and server r Server: Passive entity. Provides service to clients m e. g. , Web server responds with the requested Web page r Client: initiates contact with server (“speaks first”) m typically requests service from server, e. g. , Web Browser 7

Socket Creation r my. Sock = socket(family, type, protocol); r UDP/TCP/IP-specific sockets Family TCP

Socket Creation r my. Sock = socket(family, type, protocol); r UDP/TCP/IP-specific sockets Family TCP UDP PF_INET Type Protocol SOCK_STREAM IPPROTO_TCP SOCK_DGRAM IPPROTO_UDP r Socket reference m File (socket) descriptor in UNIX m Socket handle in Win. Sock 8

UDP Client/Server Interaction Server starts by getting ready to receive client messages… 1. 2.

UDP Client/Server Interaction Server starts by getting ready to receive client messages… 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 9

UDP Client/Server Interaction /* Create socket for incoming messages */ if ((serv. Sock =

UDP Client/Server Interaction /* Create socket for incoming messages */ if ((serv. Sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) Error("socket() failed"); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 10

UDP Client/Server Interaction Serv. Addr. sin_family = PF_INET; Serv. Addr. sin_addr. s_addr = htonl(INADDR_ANY);

UDP Client/Server Interaction Serv. Addr. sin_family = PF_INET; Serv. Addr. sin_addr. s_addr = htonl(INADDR_ANY); Serv. Addr. sin_port = htons(20000); /* Internet address family */ /* Any incoming interface */ /* Local port 20000 */ if (bind(serv. Sock, (struct sockaddr *) &Serv. Addr, sizeof(Serv. Addr)) < 0) Error("bind() failed"); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 11

Specifying Addresses Generic r IP Specific r struct sockaddr { unsigned short sa_family; char

Specifying Addresses Generic r IP Specific r struct sockaddr { unsigned short sa_family; char sa_data[14]; }; struct sockaddr_in { unsigned short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct in_addr { unsigned long s_addr; }; /* Address family (e. g. , PF_INET) */ /* Protocol-specific address information */ /* /* Internet protocol (PF_INET) */ Port (16 -bits) */ Internet address (32 -bits) */ Not used */ /* Internet address (32 -bits) */ 12

UDP Client/Server Interaction struct sockaddr_in peer; int peer. Size = sizeof(peer); char buffer[65536]; recvfrom(serv.

UDP Client/Server Interaction struct sockaddr_in peer; int peer. Size = sizeof(peer); char buffer[65536]; recvfrom(serv. Sock, buffer, 65536, 0, (struct sockaddr *)&peer, &peer. Size); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 13

UDP Client/Server Interaction Server is now blocked waiting for a message from a client

UDP Client/Server Interaction Server is now blocked waiting for a message from a client 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 14

UDP Client/Server Interaction Later, a client decides to talk to the server… 1. 2.

UDP Client/Server Interaction Later, a client decides to talk to the server… 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 15

UDP Client/Server Interaction /* Create socket for outgoing messages */ if ((client. Sock =

UDP Client/Server Interaction /* Create socket for outgoing messages */ if ((client. Sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) Error("socket() failed"); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 16

UDP Client/Server Interaction // Initialize server’s address and port struct sockaddr_in server; server. sin_family

UDP Client/Server Interaction // Initialize server’s address and port struct sockaddr_in server; server. sin_family = AF_INET; server. sin_addr. s_addr = inet_addr(“ 10. 100. 37”); server. sin_port = htons(20000); // Send it to the server sendto(client. Sock, buffer, msg. Size, 0, (struct sockaddr *)&server, sizeof(server)); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 17

UDP Client/Server Interaction close(client. Sock); 1. 2. 3. Client Create a UDP socket Communicate

UDP Client/Server Interaction close(client. Sock); 1. 2. 3. Client Create a UDP socket Communicate (send/receive messages) When done, close the socket close(server. Sock); Server 1. 2. 3. 4. Create a UDP socket Assign a port to socket Communicate (receive/send messages) When done, close the socket 18