1 / 22

Communication Networks

Communication Networks. Recitation 1. Administrative. Hillel Avni Email: hillel.avni@gmail.com website: http://www.cs.tau.ac.il/~hillelav/courses/comnet10.html Grader: Eran Cohen erancoh1@post.tau.ac.il. TCP/IP Socket Programming. What is a socket?.

suchin
Download Presentation

Communication Networks

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Communication Networks Recitation 1 Netcomm 2010 - Recitation 1: Sockets

  2. Administrative • Hillel Avni • Email: hillel.avni@gmail.com • website: http://www.cs.tau.ac.il/~hillelav/courses/comnet10.html • Grader: Eran Cohen • erancoh1@post.tau.ac.il Netcomm 2010 - Recitation 1: Sockets

  3. TCP/IP Socket Programming Netcomm 2010 - Recitation 1: Sockets

  4. What is a socket? • An interface between application and the network • The application can send/receive data to/from the network -- communicate Application Network API Protocol A Protocol B Protocol C Netcomm 2010 - Recitation 1: Sockets

  5. A Socket-eye view of the Internet medellin.cs.columbia.edu (128.59.21.14) • Each host machine has an IP address newworld.cs.umass.edu (128.119.245.93) cluster.cs.columbia.edu (128.59.21.14, 128.59.16.7, 128.59.16.5, 128.59.16.4) Netcomm 2010 - Recitation 1: Sockets

  6. Ports Port 0 • Each host has 65,536 ports • Some ports are reserved for specific apps • 20,21: FTP • 23: Telnet • 80: HTTP Port 1 Port 65535 Netcomm 2010 - Recitation 1: Sockets

  7. Address Pair • An address is an IP+port • A socket provides an interface to an IP:port pair Local IP: 111.22.3.4 Local Port: 2249 Remote IP: 123.45.6.78 Remote Port: 3726 Netcomm 2010 - Recitation 1: Sockets

  8. Functions needed: • Specify local and remote communication endpoints • Initiate a connection • Send and receive data • Terminate a connection Netcomm 2010 - Recitation 1: Sockets

  9. Socket Creation in C: socket() • int s = socket(domain, type, protocol); • s: socket descriptor (an integer, like a file-handle) • domain: integer, communication domain • e.g., PF_INET (IPv4 protocol) – typically used • type: communication type • SOCK_STREAM: reliable, 2-way, connection-based service • SOCK_DGRAM: unreliable, connectionless, • protocol: specifies protocol (see file /etc/protocols for a list of options) - usually set to 0 Netcomm 2010 - Recitation 1: Sockets

  10. SOCK_STREAM a.k.a. TCP reliable delivery in-order guaranteed connection-oriented bidirectional SOCK_DGRAM a.k.a. UDP unreliable delivery no order guarantees no notion of “connection” can send or receive socket socket D1 3 2 1 Dest. 3 2 D2 1 App App D3 Two essential types of sockets Netcomm 2010 - Recitation 1: Sockets

  11. The bind() function • associates and (can exclusively) reserves a port for use by the socket • Done by the server • int status = bind(sockid, &addrport, size); • status: error status, = -1 if bind failed • sockid: integer, socket descriptor • addrport: struct sockaddr, the (IP) address and port of the machine. (address usually set to INADDR_ANY – chooses a local address) • size: the size (in bytes) of the addrport structure Netcomm 2010 - Recitation 1: Sockets

  12. The generic: struct sockaddr { u_short sa_family; char sa_data[14]; }; sa_family specifies which address family is being used determines how the remaining 14 bytes are used The Internet-specific: struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; sin_family = AF_INET sin_port: port # (0-65535) sin_addr: IP-address sin_zero: unused The struct sockaddr Netcomm 2010 - Recitation 1: Sockets

  13. 128 128 119 119 40 40 12 12 Address and port byte-ordering • Problem: • different machines / OS’s use different word orderings • little-endian: lower bytes first • big-endian: higher bytes first • these machines may communicate with one another over the network Big-Endian machine Little-Endian machine 12.40.119.128 128.119.40.12 Netcomm 2010 - Recitation 1: Sockets

  14. Network Byte Order • All values stored in a sockaddr_inmust be in network byte order. • Whenever the source of the address isn’t the network, use htonl and htons Common Mistake: Ignoring Network Byte Order Netcomm 2010 - Recitation 1: Sockets

  15. Example int sock; sock = socket(PF_INET, SOCK_STREAM, 0); if (sock<0) { /* ERROR */ } struct sockaddr_in myaddr; myaddr.sin_family = AF_INET; myaddr.sin_port = htons( 80 ); myaddr.sin_addr = htonl( INADDR_ANY ); bind(sock, &myaddr, sizeof(myaddr)); Netcomm 2010 - Recitation 1: Sockets

  16. Connection Setup (SOCK_STREAM) • A connection occurs between two kinds of participants • passive: waits for an active participant to request connection • active: initiates connection request to passive side • Once connection is established, passive and active participants are “similar” • both can send & receive data • either can terminate the connection Netcomm 2010 - Recitation 1: Sockets

  17. Passive participant step 1: listen (for incoming requests) step 3: accept (a request) step 4: data transfer The accepted connection is on a new socket The old socket continues to listen Active participant step 2: request & establish connection step 4: data transfer l-sock a-sock-1 socket socket a-sock-2 Connection setup cont’d Passive Participant Active 1 Active 2 Netcomm 2010 - Recitation 1: Sockets

  18. Connection est.: listen() & accept() • Called by passive participant • int status = listen(sock, queuelen); • status: 0 if listening, -1 if error • sock: integer, socket descriptor • queuelen: integer, # of active participants that can “wait” for a connection • int s = accept(sock, &name, &namelen); • s: integer, the new socket (used for data-transfer) • sock: integer, the orig. socket (being listened on) • name: struct sockaddr, address of the active participant • namelen: sizeof(name): value/result parameter Netcomm 2010 - Recitation 1: Sockets

  19. Connection est.: connect() • Called by active participant • int status = connect(sock, &name, namelen); • status: 0 if successful connect, -1 otherwise • sock: integer, socket to be used in connection • name: struct sockaddr: address of passive participant • namelen: integer, sizeof(name) Netcomm 2010 - Recitation 1: Sockets

  20. Server example int sock; sock = socket(PF_INET, SOCK_STREAM, 0); if (sock<0) { /* ERROR */ } struct sockaddr_in myaddr; myaddr.sin_family = AF_INET; myaddr.sin_port = htons( 80 ); myaddr.sin_addr = htonl( INADDR_ANY ); bind(sock, &myaddr, sizeof(myaddr)); Netcomm 2010 - Recitation 1: Sockets

  21. Server example listen(sock, 5); int new_sock; struct sockaddr_in their_addr; sin_size = sizeof(struct sockaddr_in); new_sock = accept(sock, (struct sockaddr *)&their_addr, &sin_size); Netcomm 2010 - Recitation 1: Sockets

  22. Client example int sock; sock = socket(PF_INET, SOCK_STREAM, 0); if (sock<0) { /* ERROR */ } struct sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons( 80 ); dest_addr.sin_addr = inet_addr(“128.2.5.10”); connect(sock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)); Netcomm 2010 - Recitation 1: Sockets

More Related