Communication Networks - PowerPoint PPT Presentation

1 / 22
About This Presentation
Title:

Communication Networks

Description:

1. Netcomm 2006 - Recitation 1: Sockets. Communication Networks ... An interface between application ... medellin.cs.columbia.edu (128.59.21.14) cluster. ... – PowerPoint PPT presentation

Number of Views:65
Avg rating:3.0/5.0
Slides: 23
Provided by: csta3
Category:

less

Transcript and Presenter's Notes

Title: Communication Networks


1
Communication Networks
  • Recitation 1

2
Administrative
  • David Raz
  • Schreiber M21, (640)6455
  • Email davidraz_at_post.tau.ac.il
  • website http//www.cs.tau.ac.il/davidraz/course
    s/comnet06/
  • Grader Hadas Zur zurhadas_at_post.tau.ac.il

3
TCP/IP Socket Programming
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
5
A Socket-eye view of the Internet
medellin.cs.columbia.edu (128.59.21.14)
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)
  • Each host machine has an IP address

6
Ports
  • Each host has 65,536 ports
  • Some ports are reserved for specific apps
  • 20,21 FTP
  • 23 Telnet
  • 80 HTTP

Port 0
Port 1
Port 65535
7
Address Pair
  • An address is an IPport
  • A socket provides an interface to an IPport pair

Remote IP 123.45.6.78 Remote Port 3726
Local IP 111.22.3.4 Local Port 2249
8
Functions needed
  • Specify local and remote communication endpoints
  • Initiate a connection
  • Send and receive data
  • Terminate a connection

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

10
Socket Descriptor Data Structure
Descriptor Table
Family PF_INET Service SOCK_STREAM Local IP
111.22.3.4 Remote IP 123.45.6.78 Local Port
2249 Remote Port 3726
0
1
2
3
4
11
Two essential types of sockets
  • SOCK_DGRAM
  • a.k.a. UDP
  • unreliable delivery
  • no order guarantees
  • no notion of connection
  • can send or receive
  • SOCK_STREAM
  • a.k.a. TCP
  • reliable delivery
  • in-order guaranteed
  • connection-oriented
  • bidirectional

12
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

13
The struct sockaddr
  • The Internet-specific
  • struct sockaddr_in
  • short sin_family
  • u_short sin_port
  • struct in_addr sin_addr
  • char sin_zero8
  • sin_family AF_INET
  • sin_port port (0-65535)
  • sin_addr IP-address
  • sin_zero unused
  • The generic
  • struct sockaddr
  • u_short sa_family
  • char sa_data14
  • sa_family
  • specifies which address family is being used
  • determines how the remaining 14 bytes are used

14
Address and port byte-ordering
  • Problem
  • different machines / OSs 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
15
Network Byte Order
  • All values stored in a sockaddr_in must be in
    network byte order.
  • Whenever the source of the address isnt the
    network, use htonl and htons

Common Mistake Ignoring Network Byte Order
16
Example
  • int sock
  • sock socket(PF_INET, SOCK_STREAM, 0)
  • if (socklt0) / 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))

17
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

18
Connection setup contd
  • Active participant
  • step 2 request establish connection
  • step 4 data transfer
  • 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

Passive Participant
Active 1
Active 2
19
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

20
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)

21
Server example
int sock sock socket(PF_INET, SOCK_STREAM,
0) if (socklt0) / 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))
22
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)
23
Client example
int sock sock socket(PF_INET, SOCK_STREAM,
0) if (socklt0) / 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))
Write a Comment
User Comments (0)
About PowerShow.com