Presentation is loading. Please wait.

Presentation is loading. Please wait.

Communication. References r The 402 web site has many links to socket tutorials. r Chapter 2.1 of the Tanenbaum, van Steen textbook r Chapter 15, of the.

Similar presentations


Presentation on theme: "Communication. References r The 402 web site has many links to socket tutorials. r Chapter 2.1 of the Tanenbaum, van Steen textbook r Chapter 15, of the."— Presentation transcript:

1 Communication

2 References r The 402 web site has many links to socket tutorials. r Chapter 2.1 of the Tanenbaum, van Steen textbook r Chapter 15, of the Steven’s book on TCP/IP

3 Layered Protocols r All communication is based on exchanging messages. r Protocols control the sending and receiving of messages m e.g., TCP, IP, HTTP,FTP

4 Layered Protocols r Many different protocols are needed at a variety of levels e.g., m How many volts needed for a 0 bit and for a 1 bit m How does the receiver know which is the last bit of the message? m How is a lost message detected? r ISO developed the OSI model. m Very useful as a reference point m Internet protocols such as TCP, IP are mostly used.

5 Layered Protocols Layers, interfaces, and protocols in the OSI model. 2-1

6 Physical Layer r The physical layer is concerned with the transmission of 0’s and 1’s. m How many volts to use for 0 and 1 m How many bits per second can be sent r Many physical layer standards have been developed for different media e.g., m RS-232-C standard for serial communication lines

7 Data Link Layer r The physical layer just sends bits. r A mechanism is needed to detect and correct errors such as damaged or lost messages r The data link layer groups bits into units (frames). Each frame has m Sequence numbers for detecting lost messages m Checksums for detecting damage

8 Network Layer r For a message to get from the sender to the receiver, it may need to make a number of hops (in a wide-area network) r There is usually more than one path. r Choosing a path is called routing r Most widely used network protocol is the connectionless IP (Internet Protocol)

9 Transport Protocols r The transport layer turns the underlying network into something that an application developer can use. r Upon receiving a message from the application layer, the transport layer breaks it into small pieces enough for transmission, assigns each one a sequence number and then sends them all.

10 Transport Protocols r At the receiving end, the transport layer has to put back together the pieces into the message before passing it to the application. r The Internet transport protocol is called Transmission Control Protocol (TCP). m TCP is a reliable transport protocol i.e., it can deal with losses r The Internet transport protocol that does not deal with losses is called UDP. r The official ISO transport protocol has 5 variants r The Internet does not have protocols higher than TCP/UDP except for application layer protocols such as nntp, ftp, http.

11 Client-Server Paradigm r Many network applications use a form of communication known as the client-server paradigm m Server application waits (passively) for contact. m Client initiates the contact. r Client and server applications interact directly with a transport-layer protocol for establishing communication and to send and receive information. r The transport layer uses lower layer protocols to send and receive individual messages.

12 Application Programming Interface: API r The interface an application uses when it interacts with the transport protocol software is known as an Application Programming Interface (API). r An API defines a set of operations that an application can perform when it interacts with a protocol. r APIs are defined as follows: m Provide a set of procedures that can be called m For each procedure, define the arguments expected m Usually there is a procedure for each basic operation e.g., send, receive

13 Socket API r Introduced in 1981 r Originally only Unix r Implemented as a library r This can be used to communicate with TCP or UDP

14 Socket Programming using TCP Socket: a door between application process and end- end-transport protocol (UDP or TCP) TCP service: reliable transfer of bytes from one process to another UDP service: does not guarantee a reliable transfer of bytes process TCP with buffers, variables socket controlled by application developer controlled by operating system host or server process TCP with buffers, variables socket controlled by application developer controlled by operating system host or server internet

15 Unix File I/O r How is a socket implemented? m To understand this, let us look at file I/O. r A file descriptor is a small, positive integer. int fd; char buf[256]; fd = open(“a.txt”, O_RDWR); write(fd, buf, sizeof(buf)); close(fd) r The file descriptor is used to refer to the file a.txt

16 Unix Descriptor Table Descriptor Table 0 1 2 3 4 Data structure for file 0 Data structure for file 1 Data structure for socket Each process has a descriptor table Each socket has an entry in the descriptor table

17 Socket Descriptor Data Structure Descriptor Table 0 1 2 3 4 Family: AF_INET Service: SOCK_STREAM Local IP: 158.108.33.66 Remote IP: 158.108.2.71 Local Port: 2249 Remote Port: 21

18 Sockets and Descriptors r In Unix sockets are integrated with I/O. r The OS provides a single set of descriptors for files, devices, communication. r Read and Write can be used for both files and communication r However, socket programming does differ from file I/O in that there are many details needed to use a socket e.g., transport protocol, address of the remote machine, etc

19 Sockets and Descriptors r Before an application can communicate, it must request that the operating system create a socket to be used for communication. r The system returns a small integer descriptor that identifies the socket. r The application uses the descriptor as an argument in a procedure of the API that is defined for communication.

20 Socket Creation  descriptor = socket(domain, type, protocol) m domain specifies the specifies the addressing format to be used by the socket. AF_INET specifies Internet address and AF_UNIX specifies file path names. m type specifies the type of communication the socket will use. SOCK_STREAM: connection-oriented stream transfer SOCK_DGRAM: connectionless message-oriented transfer m protocol specifies a particular transport protocol; usually 0 = default for type m A –1 is returned if an error occurs.

21 Socket Creation r Transport Protocols m TCP -- connection-oriented m UDP -- connectionless r It is possible to have more than one transport protocol for a specific type of communication.

22 Socket Creation r Example #include if ((s = socket(AF_INET, SOCK_STREAM, 0) ) < 0){ perror(“socket”);}

23 Endpoint Addresses r A socket association is characterized as follows: m communication protocol, local address, local port, remote address, remote port r Local address, port are defined using the bind call r Remote address, port are defined using connect, sendto

24 Address Representation r This structure holds socket address information for many types of sockets. struct sockaddr { unsigned short sa_family; // address family, char sa_data[14]; // 14 bytes of protocol address }; r sa_family represents the address format i.e., AF_INET. r sa_data contains an address and port number for the socket. r This structure is considered “unyieldy” since most programmers do not want to pack sa_data by hand. r Programmers deal with the sockaddr_in structure

25 Address Representation r Internally an address is represented as a 32-bit integer struct in_addr { u_long s_addr; } struct sockaddr_in { short sin_family; /*Address Family*/ u_short sin_port /*port number*/ struct in_addr sin_addr /* network address*/ char sin_zero[8]; /*unused*/ }

26 Address Representation r sin_family represents the address format r sin_port specifies a port number which is associated with a process. r sin_addr specifies the address of a host machine r sin_zero is used to fill out the structure.

27 Address Representation r sockaddr_in is used for TCP (connection- oriented) and sockaddr_un is used for UDP (connectionless) r The API procedures assume that a variable that is a pointer to sockaddr is used. r The programmer should cast a variable of type sockaddr_in (or sockaddr_out) to a variable that is a pointer to sockaddr

28 Data Representation r Integers are not represented the same on all machine architectures m little endian: least significant byte first; the Intel series, VAX m big endian: most significant byte first (this is network byte order); IBM 370, Motorola 68000 and Sun Sparc r When little endian computers are going to pass integers over the network (e.g., IP addresses), they need to convert them to network byte order.

29 Data Representation r m = ntohl(m): network to host byte order (32 bit) r m = htonl(m): host to network byte order (32 bit) r m = ntohs(m): network to host byte order (16 bit) r m = htons(m): host to network byte order (16 bit)

30 Address Conversion r host name to IP address: gethostbyname() r IP address to name: gethostbyaddr()

31 bind ()  bind(int socket, struct sockaddr *localaddr, int addrlen) m localaddr is a structure that specifies the local address to be assigned to the socket. m addrlen specifies the length of the sockaddr structure pointed to by the address argument. r Used by both TCP and UDP.

32 bind() #include int s; struct sockaddr_in sin; if ((s = socket(AF_INET, SOCK_STREAM,0)) < 0 { /*error*/}; memset((char *) &sin, 0, sizeof(sin)); sin.sin_family = AF_INET: sin.sin_port = htons(6000); sin.sin_addr.s_addr = htonl(INADDR_ANY); if bind(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) {…}

33 connect() r Client contacts server by m Creating client-local TCP socket m Specifying IP address, port number of server process m Calling the connect() system call

34 connect() int connect(int s, struct sockaddr *name, int namelen) m client issues connect() to establish remote address and port (stream, datagram sockets) m Establish connection (stream socket) r The call fails if the host is not listening to port.

35 send() int send(int socket, const void *msg, int len, int flags); m msg specifies a pointer to the first of the data to be sent m len is an integer that specifies the amount of data to be sent m flags are used to specify special options which are mostly intended for system debugging (don’t worry about this; just set it to 0)  Used for stream communications

36 recv() int recv(int socket, void *msg, int len, int flags); Similar to send() except this is used to receive data and put into msg

37 listen() r Client must contact server m For a client to contact a server, the server process must first be running m The server must have created a socket that is used to welcome the client’s contact m The server must be “listening” for the client’s contact by using the listen() system call.

38 listen()  int listen(int s, int queuesize) m queuesize specifies a length for the socket’s request queue. m The OS builds a separate request queue for each socket. m Client requests are put into the queue. m Socket being listened to can’t be used for client.

39 accept() r When contacted by client, server TCP creates a new socket for the server process to communicate with the client m Allows server to talk with multiple clients

40 accept()  int accept (int s, struct sockaddr *addr, int *addrlen); m All servers begin by calling socket to create socket and bind to specify a protocol port number. m These two calls are sufficient for a server to start accepting messages in a connectionless transport. m An extra call ( accept() ) is needed for a connection- oriented protocol. m accept() fills in fields of argument addr with the address of the client that formed the connection and sets addrlen to the length of the address.

41 accept() m The server uses the new socket to communicate with the client and then closes the socket when finished. m The original socket remains unchanged and this is used to accept the next connection from a client.

42 Getting IP address/port from socket int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen ) m Get the local IP/port bound to socket int getpeername(int sockfd, struct sockaddr *remoteaddr, socklen_t *addrlen) m Get the IP/port of remote endpoint

43 Two other useful functions struct hostent *gethostbyaddr (void *addr, size_t len, int type); m Converts from IP address to domain name struct hostent *gethostbyname (char *name); m Converts from domain name to IP address struct hostent { char *h_name;/* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* address type */ int h_length; /* address length*/ char **h_addr_list; /* address list */ } macro h_addr is defined to be h_addr_list [0]

44 close EOF receive sendreceive send listen bind Sequence of Socket System Calls Client Server socket accept connect Connection request

45 Example (Stream Socket; setting address) setaddr(sp, host, port) struct sockaddr_in *sp; char *host; int port; { struct hostent *hp; hp = gethostbyname(host);

46 Example (Stream Socket; setting address) if (hp == NULL) { fprintf(stderr, "%s: unknown host\n", host); exit(1); } sp->sin_family = AF_INET; bcopy(hp->h_addr, &sp->sin_addr, hp->h_length); sp->sin_port = htons(port); }

47 Example (Stream Socket; socket creation) streamsocket(port) int port; { int s; struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(port); s = socket(AF_INET, SOCK_STREAM, 0);

48 Example (Stream Socket; socket creation) if (s < 0) error("socket"); if (bind(s, (struct sockadd_in) &sin, sizeof (sin)) < 0) error("bind"); return s; }

49 Example (Stream Socket; socket creation) /* * System call failed: print a message and give up. */ error(msg) char *msg; { extern char *myname; /* program name */ fprintf(stderr, "%s: ", myname); perror(msg); exit(1); }

50 Example (Stream Socket; client) #include char *myname;

51 Example (Stream Socket; client) main(argc, argv) char *argv[]; { struct sockaddr_in sin; int s, n, zero; char buf[BUFSIZ]; myname = argv[0]; if (argc < 2) { fprintf(stderr, "usage: %s port [host]\n", myname); exit(1); }

52 Example (Stream Socket; client) s = streamsocket(0); /* port 0 means "any port" */ setaddr(&sin, argc > 2 ? argv[2] : "localhost", atoi(argv[1])); /* connect a socket using name specified by the command line */ if (connect(s, (struct sockaddr_in) &sin, sizeof(sin)) < 0) { error("connecting stream socket"); exit(1); }

53 Example (Stream Socket; client) printf("Type in text\n"); /* read text from the standard input */ while ((n = read(0, buf, sizeof(buf))) > 0){ /* send the text through socket */ if (write(s, buf, sizeof(buf)) < 0) error("writing on stream socket"); bzero(buf, sizeof(buf)); } close(s); exit(0); }

54 Example (Stream Socket; server) #include char *myname; #define MSGSIZE 1

55 Example (Stream Socket; server) main(argc, argv) char *argv[]; { struct sockaddr_in from; int s, n, fromlen, msgs, rval; struct hostent *hp; char buf[BUFSIZ]; myname = argv[0];

56 Example (Stream Socket; server) if (argc < 2) { fprintf(stderr, "usage: %s port\n", argv[0]); exit(1); } s = streamsocket(atoi(argv[1])); fromlen = sizeof(from); if (getsockname(s, &from, &fromlen)) { error("getting socket name"); exit(1); } printf("Socket has port # %d\n",ntohs(from.sin_port)); listen(s, 5);

57 Example (Stream Socket; server) for (;;) { /*start accepting connections*/ msgs = accept(s, 0, 0); if (msgs == -1) error("accept"); else do { bzero(buf, sizeof(buf));

58 Example (Stream Socket; server) if ((rval = read(msgs, buf, sizeof(buf))) < 0) error("reading stream message"); if (rval == 0) printf("Ending connection\n"); else { printf("%s\n",buf); }

59 UDP: User Datagram Protocol [RFC 768] r “no frills,” “bare bones” Internet transport protocol r “best effort” service, UDP segments may be: m lost m delivered out of order to app r connectionless: m no handshaking between UDP sender, receiver m each UDP segment handled independently of others

60 Why use UDP instead of TCP r No connection establishment (which can add delay) m Remember that TCP does a three-way handshake before transmitting data. UDP does not. r TCP maintains connection state m Receive and send buffers m Sequence and acknowledgement numbers m Congestion control parameters r Smaller segment overhead m Each TCP segment has 20 bytes of header overhead while each UDP segment has 8 bytes. m The overhead in TCP includes sequence and acknowledgement numbers, and a flow congestion field. r There is no congestion control m UDP can blast away as fast as possible

61 UDP r Often used for streaming multimedia apps m loss tolerant m rate sensitive r Other UDP uses (why?): m DNS m ping command

62 Applications using UDP and TCP r Email – TCP r telnet – TCP r HTTP – TCP r ftp – TCP r Remote file server (NFS) – typically UDP r DNS – typically UDP r Streaming multimedia – typically UDP r Internet telephony – typically UDP r Network management (SNMP) – typically UDP

63 UDP and Reliability r Lack of congestion control r It is possible to have reliable data transfer in UDP. m The application must have acknowledgements and retransmission mechanisms m Streaming applications do this.

64 API for UDP r socket() call uses SOCK_DGRAM instead of SOCK_STREAM r There is no connect() call r Uses recvfrom() and sendto() instead of read() and write() r There are no listen() or accept() calls

65 sendto()  int sendto (int socket, char *msg, int len, int flags, struct sockaddr *to, int tolen); m to specifies the destination address and tolen specifies the length of the destination address. r Used for datagram communications

66 recvfrom()  int recvfrom (int socket, char *msg, int len, int flags, struct sockaddr *from, int fromlen); m sets from to source address of data m sets fromlen to valid length of from m returns number of bytes received

67 Other Functions r There are other functions used in TCP/UDP that can be used to provide for timeouts,etc; r We will discuss the use of the select() function.

68 select() int select(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); FD_CLR(int fd, fd_set *fds); /* clear the bit for fd in fds */ FD_ISSET(int fd, fd_set *fds); /* is the bit for fd in fds? */ FD_SET(int fd, fd_set *fds); /* turn on the bit for fd in fds */ FD_ZERO(fd_set *fds); /* clear all bits in fds */ r maxfds: number of descriptors to be tested m descriptors (0, 1,... maxfds-1) will be tested r readfds: a set of fds we want to check if data is available m returns a set of fds ready to read m if input argument is NULL, not interested in that condition r writefds: returns a set of fds ready to write r exceptfds: returns a set of fds with exception conditions

69 select() int select(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); struct timeval { long tv_sec;/* seconds / long tv_usec;/* microseconds */ } r timeout m if NULL, wait forever and return only when one of the descriptors is ready for I/O m otherwise, wait up to a fixed amount of time specified by timeout if we don’t want to wait at all, create a timeout structure with timer value equal to 0

70 select() r A select statement can be used to implement timeouts …. s = streamsocket(0); /* port 0 means "any port" */ setaddr(&sin, argc > 2 ? argv[2] : "localhost", atoi(argv[1])); /* connect a socket using name specified by the command line */ if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) { error("connecting stream socket"); exit(1); } buf = (char *) malloc(BUFSIZ*sizeof(char)); sprintf(buf, "%d", AREYOUUP); write(s,buf,sizeof(buf));

71 select() tv.tv_sec = 20; tv.tv_usec = 5000; FD_CLR(s,&readfds); FD_ZERO(&readfds); FD_SET(s,&readfds); while (select(s,&readfds,NULL,NULL,&tv) < 0) { }; if (FD_ISSET(s,&readfds)){ printf("Data Arrived\n"); recv(s,buf,sizeof(buf),0); printf("buffer is %s\n",buf); } else printf("timed out\n"); close(s); exit(0); }

72 Summary r This section briefly summarizes the basic message passing primitives that can be used by processes in a distributed application.


Download ppt "Communication. References r The 402 web site has many links to socket tutorials. r Chapter 2.1 of the Tanenbaum, van Steen textbook r Chapter 15, of the."

Similar presentations


Ads by Google