Chapter 8 Elementary UDP Socket

Slides:



Advertisements
Similar presentations
UDP Sockets UDP: unreliable delivery, no connection DNS, NFS, SNMP.
Advertisements

Echo server The client reads a line of text from its standard input and writes the line to the server The server reads the line from its network input.
I/O Multiplexing: select and poll
Elementary TCP Sockets© Dr. Ayman Abdel-Hamid, CS4254 Spring CS4254 Computer Network Architecture and Programming Dr. Ayman A. Abdel-Hamid Computer.
1 Elementary TCP Sockets socket function connect function bind function listen function accept function fork and exec functions Concurrent servers close.
Elementary TCP Sockets Computer Networks Computer Networks Term B10 UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
Networks: TCP/IP Socket Calls1 Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Sockets Basics Conectionless Protocol. Today IPC Sockets Basic functions Handed code Q & A.
Chapter 10 SCTP Client / Server example. Simple echo server using SCTP protocol Send line of text from client to server Server sends the same line back.
Sockets Programming Introduction © Dr. Ayman Abdel-Hamid, CS4254 Spring CS4254 Computer Network Architecture and Programming Dr. Ayman A. Abdel-Hamid.
Tutorial 8 Socket Programming
TDC561 Network Programming Camelia Zlatea, PhD Week 2 – part II: Socket Application Programming Interface.
Programming with Berkeley Sockets Presented by Chris GauthierDickey Written by Daniel Stutzbach (I think!) for CIS 432/532 Useful References: ● man pages.
I/O Multiplexing Capability of tell the kernel that wants to be notified when one or more I/O conditions are ready. For example, I/O data is available.
1) The server should be concurrent. This implies that it should loop infinitely, listening for clients requests. It should NOT terminate after accepting.
2: Application Layer 1 Chapter 2 Application Layer Computer Networking: A Top Down Approach, 5th edition. Jim Kurose, Keith Ross Addison-Wesley, April.
Computer Networks Sockets. Outline F Socket basics F Socket details.
Protocol Programs that communicate across a network must agree on a protocol on how they will communicate High-level decisions must be made on which program.
Lecture 8 UDP Sockets & I/O Multiplexing
Elementary UDP Sockets© Dr. Ayman Abdel-Hamid, CS4254 Spring CS4254 Computer Network Architecture and Programming Dr. Ayman A. Abdel-Hamid Computer.
ECE453 – Introduction to Computer Networks Lecture 15 – Transport Layer (II)
ECE 4110 – Internetwork Programming Client-Server Model.
1 TCP Client-Server Example TCP echo server: main and str_echo TCP echo client: main and str_cli Normal startup and termination POSIX signal handling Handling.
Elementary TCP Sockets
Zhu Reference: Daniel Spangenberger Computer Networks, Fall 2007 PPT-4 Socket Programming.
UNIX Network Programming1 UNIX Network Programming 2nd Edition.
Chapter 8 Elementary UDP Socket. Contents u recvfrom and sendto Function u UDP Echo Server( main, de_echo Function) u UDP Echo Client( main, de_cli Function)
Sirak Kaewjamnong Computer Network Systems
Server Sockets: A server socket listens on a given port Many different clients may be connecting to that port Ideally, you would like a separate file descriptor.
Elementary TCP Sockets
Review: How to create a TCP end point? What is the right format for sin_port and sin_addr in the sockaddr_in data structure? How many different ways we.
Elementary TCP Sockets –The presentation will provide sufficient information to build a COMPLETE TCP client and server. –In addition the topic of concurrency.
Ports Port - A 16-bit number that identifies the application process that receives an incoming message. Reserved ports or well-known ports (0 to 1023)
2: Application Layer1 Homework r Collect Homework 1 r Assign Homework 2 m Problems Ch 2#1,4,6,7 (two graded) m Due Wednesday, 10 September.
Chapter18 broadcasting. contents Introduction broadcast address unicast versus broadcast dg_cli function using broadcasting Race conditions.
Chapter 14 Unix domain protocol. contents Introduction unix domain socket address structure socketpair socket function unix domain stream client-server.
Socket Programming Lec 2 Rishi Kant. Review of Socket programming Decide which type of socket – stream or datagram. Based on type create socket using.
CSCE 515: Computer Network Programming Select Wenyuan Xu Department of Computer Science and Engineering.
Advanced Sockets API-II Vinayak Jagtap
1 Computer Networks An Introduction to Computer Networks University of Tehran Dept. of EE and Computer Engineering By: Dr. Nasser Yazdani Lecture 3: Sockets.
Cli/Serv.: sockets 3/91 Client/Server Distributed Systems v Objectives –describe iterative clients and servers using the UDP protocol ,
CSCE 515: Computer Network Programming UDP Socket Wenyuan Xu Department of Computer Science and Engineering.
Introduction A Simple Daytime Client A Simple Daytime Server
Programming with UDP – II Covered Subjects: Creating UDP sockets Client Server Sending data Receiving data Connected mode.
Today’s topic: UDP Reliable communication over UDP.
Review: –Concurrent server and multiplexed server How they work? Which one is better?
UNIX Network Programming1 Chapter 13. Advanced I / O Functions.
CSCI 330 UNIX and Network Programming Unit XIV: User Datagram Protocol.
Lecture 3 TCP and UDP Sockets CPE 401 / 601 Computer Network Systems slides are modified from Dave Hollinger.
1 UDP Sockets Programming Creating UDP sockets.Creating UDP sockets. –Client –Server Sending data.Sending data. Receiving data.Receiving data. Connected.
1 School of Computing Science Simon Fraser University CMPT 471: Computer Networking II Introduction Instructor: Dr. Mohamed Hefeeda.
CSCD433 Advanced Networks Winter 2017 Lecture 14
I/O Multiplexing.
Chapter 5. TCP Client-Server Example
Read: Chapters 1,2, 3, 4 Communications Client Server Ex: TCP/IP
Elementary UDP Sockets
Network Programming CSC- 341
Chapter4 Elementary TCP Socket
CSCD433 Advanced Networks Spring 2016 Lecture 16a
CHAPTER 8 ELEMENTARY UDP SOCKETS
UNIX Domain sockets The Linux Programming Interface (ch 57)
Network Programming CSC- 341
Chapter 5 (part 1) TCP Client /Server Example By: Lim Meng Hui.
UDP Sockets Programming
Advanced Network Programming spring 2007
TCP/IP Socket Programming in C
Elementary UDP Sockets connectionless, unreliable, datagram
TCP Client-Server Example
Socket Programming with UDP
Presentation transcript:

Chapter 8 Elementary UDP Socket

Contents recvfrom and sendto Function UDP Echo Server( main, de_echo Function) UDP Echo Client( main, de_cli Function) Lost datagrams Verifying Received Response Sever not Running Connect Function with UDP Lack of Flow Control with UDP Determining Outgoing Interface with UDP TCP and UDP Echo Server Using select

8.1 Introduction connectionless unreliable datagram protocol popular using DNS(the Domain Name System) NFS(the Network File System) SNMP(Simple Network Management Protocol)

Socket functions for UDP client-server UDP Server socket( ) bind( ) UDP Client socket( ) recvfrom( ) sendto( ) block until datagram received from a client data(request) Process request recvfrom( ) data(reply) sendto( ) close( ) Socket functions for UDP client-server

8.2 recvfrom and sendto Functions #include<sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbyte, int flag, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buff, size_t nbyte, int flag, const struct sockaddr *to, socklen_t addrlen); Both return: number of bytes read or written if OK,-1 on error

8.3 UDP Echo Server: main Function fgets sendto recvfrom stdin UDP client UDP server stdout fputs recvfrom sendto Simple echo client-server using UDP UDP echo server #include “unp.h” int main(int argc, char **argv) { int sockfd; struck sockaddr_in servaddr,cliaddr; sockfd=Socket(AF_INET,SOCK_DGRAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_fammily=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(SERV_PORT); bind(sockfd, (SA *) &servaddr,sizeof(servaddr)); dg_echp(sockfd, (SA *) &cliaddr,sizeof(cliaddr)); }

8.4 UDP Echo Server:dg_echo Function #include “unp.h” void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[MAXLINE]; for( ; ; ) { len=clilen; n=Recvfrom(sockfd, mseg, MAXLINE, 0, pcliaddr, &len); sendto(sockfd, mesg, n, 0, pcliaddr, len); } dg_echo funtion: echo lines on a datagram socket.

Summary of TCP client-server with two clients. 1.This function never terminates. 2.This function provides an iterative, not a concurrent server as we had with TCP server child listening server server child connection client fock fock connection client TCP TCP TCP connection connection Summary of TCP client-server with two clients.

Summary of UDP client-server with two clients. Socket receive buffer UDP UDP UDP datagram datagram Summary of UDP client-server with two clients.

8.5 UDP Echo client: main Function #include “unp.h” int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; if (argc != 2) err_quit( “usage : udpcli <Ipaddress>”); bzero(&servaddr, sizeof(servaddr); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); Inet_pton(AF_INET, argv[1], &servaddr.sin_addr); sockfd = Socket(AF_INET, SOCK_DGRAM, 0); dg_cli(stdin, sockfd, (SA *) &servaddr, sizeof(servaddr); exit(0); }

8.6 UDP Echo Client: dg_cli Function #include “unp.h” void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, soklen_t servlen) { int n; char sendline[MAXLINE], recvline[MAXLINE+1]; while(Fgets(sendline, MAXLINE, fp) != NULL) { sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL); recvline[n] = 0; /* null terminate */ Fputs(recvline,stdout); } dg_cli function: client processing loop

8.7 Lost Datagrams If the client datagram arrives at the server but the server’s reply is lost, the client will again block forever in its call to recvfrom. The only way to prevent this is to place a timeout on the recvfrom.

8.8 Verify Received Response #include “unp.h” void dg_cli(FILE *fp, int sock, const SA *pseraddr, socklen_t servlen) { int n; char sendline[MAXLINE], recvline[MAXLINE]; socklen_t len; struct sockaddr *preply_addr; preply_addr = Malloc(servlen); while(Fget(sendline, MAXLINE, fp) ! = NULL) { Sendto(sockfd,sendline, strlen(sendline), 0, pservaddr, servlen); len = servlen; n = Recvfrom(sockfdm, recvline, MAXLINE, 0, preply_addr,&len) continue

Version of dg_cli that verifies returned socket address. If(len != servlen || memcmp(pservaddr, preply_addr, len) != 0) { printf(“reply from %s (ignore)\n”, Sock_ntop(preply_addr, len); continue; } recvline[n] = 0; /*NULL terminate */ Fputs(recvline, stdout); Version of dg_cli that verifies returned socket address. Bsdi.kohala.com has address 206.62.226.35 Bsdi.kohala.com has address 206.62.226.66 Solaris % udpcli02 206.62.226.66 hello reply from 206.62.226.35.7 (ignore) goodbye The server has not bound an IP address to its socket, the kernel choose the source address for the IP datagram. It is chosen to be the primary IP address of the outgoing interface.

8.9 Server Not Running Client blocks forever in the call to recvfrom. ICMP error is asynchronous error. The basic rule is that asynchronous errors are not returned for UDP sockets unless the socket has been connected.

8.11 connect Function with UDP This does not result in anything like a TCP connection: there is no three-way handshake. Instead, the kernel just records the IP address and port number of the peer. With a connect UDP socket three change: 1. We can no long specify the destination IP address and port for an output operation. That is, we do not use sendto but use write or send instead. 2. We do not use recvfrom but read or recv instead.

3. Asynchronous errors are returned to the process for a connected UDP socket. application peer } Stores peer IP address and port#from connect UDP UDP ??? UDP datagram UDP datagram from some other IP address and/or port# UDP datagram

? Datagrams arriving from any other IP address or port are not passed to the connected socket because either the source IP address or source UDP port does not match the protocol address to which the socket is connected. DNS client DNS server DNS client DNS client connect OK cannot connect cannot connect cannot connect (configured to use one server) ? (configured to use two server)

8.12 dg_cli Function (Revisited) #include “unp.h” void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, soklen_t servlen) { int n; char sendline[MAXLINE], recvline[MAXLINE+1]; Connect(sockfd, (SA *) pservaddr, servlen); while(Fgets(sendline, MAXLINE, fp) != NULL) { sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL); recvline[n] = 0; /* null terminate */ Fputs(recvline,stdout); }

8.13 Lack of Flow Control with UDP #include “unp.h” #define NDG 2000 #define DGLEN 1400 void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t, servlen) { int i; char sendline[MAXLINE]; for(I = 0; I< NDG ; I++) { Sendto(sockfd, sendline, DGLEN, 0, pservaddr, servlen); } dg_cli function that writes a fixed number of datagram to server

dg_echo function that counts received datagram #include “unp.h” static void recvfrom_int(int); static int count; void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen) { socklen_t len; char mesg[MAXLINE]; Signal(SIGHT, recvfrom_int); for( ; ; ) { len=clilen; Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len); count++; } static void recvfrom_int(int signo) printf(“\nreceived %d datagram\n”, count); exit(0); dg_echo function that counts received datagram

The interface’s buffers were full or they could have been discarded by the sending host. The counter “dropped due to full socket buffers” indicates how many datagram were received by UDP but were discarded because the receiving socket’s receive queue was full The number of datagrams received b the server in this example is nondeterministic. It depends on many factors, such as the network load, the processing load on the client host, and the processing load in the server host. Solution fast server, slow client. Increase the size of socket receive buffer.

8.14 Determining Outgoing Interface with UDP This local address is chosen by searching the routing table for the destination IP address, and then using the primary IP address for the resulting interface. N= 240 * 1024; Setsockopt(sockfd, sol_SOCKET, so_RECVBUF, &n, sizeof(n)); Increases the size of the socket receive queue

Use connect to determine outgoing interface. Connect(sockfd,(SA *) &servaddr, sizeof(servaddr)); len = sizeof(cliaddr); Getsockname(sockfd, (SA *) &cliaddr, &len); printf(“local address &s\n”,Soxk_ntop((SA *) &cliaddr, len); exit(0); Use connect to determine outgoing interface. This local IP address is chosen by searching the routing table for the destination IP address, and then using the primary IP address for the resulting

8.15 TCP and UDP Echo Server Using select #include “unp.h” int main(int argc, char **argv) { int listenfd, connfd, udpfd, nready, maxfd1; char mesg[MAXLINE]; pid_t childpid; fd_set rset; ssize_t n; socklen_t len; const int on = 1; struct sockaddr_in cliaddr, servaddr; void sig_chld(int);

/* Create listening TCP socket */ listenfd = Socket(AF_INET,SOCK_STREAM, 0); bzero(&seraddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htol(INADDR_ANY); servaddr.sin_port = htos(SERV_PORT); Setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); Bind(listenfd, (SA *)&servaddr, sizeof(servaddr)); Listenfd, LISTENQ); /* Create UDP socket */ udpfd = Socket(AF_INET, SOCK_DGRAM, 0); Bind(udpfd, (SA *) &servaddr, sizeof(servaddr));

Signal(SIGCHLD, sig_chld); /* must call waitpd( )*/ FD_ZERO(&rset); maxfdp1=max(listenfd, udpfd)+1; for( ; ; ) { FD_SET(listenfd, &rset); FD_SET(udpfd, &rset); if((nready = selext[,axfdp1, &rset, NULL, NULL,NULL) < 0) { if(errno == EINTR) continue; else err_sys(“select error”); } if(FD_ISSET(listenfd,&rset)) { len = sizeof(cliaddr); connfd = Accept(listenfd, (SA *) &cliaddr, &len); if((childpid = fork( )) == 0) { /* child process */ Close(listenfd); /* Close listening socket */ str_echo(connfd); /* process the request */ exit(0); Close(connfd);

if(FD_ISSET(udpfd, &rset)) { len = sizeof(cliaddr); n = Recvfro,(udp, mesg, MAXLINE, 0, (SA *) &cliaddr, &len); Sendto(udpfd, ,esg, n, 0, (SA *) &cliaddr, len); } } /* for */ } /* main */