16
Basic Socket Programming •TCP/IP overview. •TCP interface • Reference: UNIX Network Programming, by Richard Stevens. UNIX man page.

Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

Embed Size (px)

Citation preview

Page 1: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

Basic Socket Programming

• TCP/IP overview.

• TCP interface• Reference:

– UNIX Network Programming, by Richard Stevens.

– UNIX man page.

Page 2: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Overview of TCP/IP protocols

–Application layer(ssh,http,etc)–Transport layer (TCP, UDP)

–Network layer (IPv4, IPv6)

–Host to Network layer (Ethernet)

Page 3: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Some concepts:–Entity (process/hardware/system

calls)

–Protocol: How peer entities interact with each other.

–Service interface: How upper layer entities interact with lower layer entities.

Page 4: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Socket Programming: the use of TCP and UDP.

• TCP: Transmission control protocol.

• connection-oriented, reliable, full duplex, byte stream service

•Interface: socket, bind, listen, accept, connect, read, write, close.

Page 5: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

– An analogy:Socket: telephoneBind: assign telephone number to a telephone

Listen: turn on the ringer so that you can hear the phone call

Connect: dial a phone numberAccept: answer the phoneRead/write: talkingClose: ???

Page 6: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• To send:– Socket, connect write

• To receive:– Socket, bind, listen, accept read

• TCP endpoint:– IP address + port number

Page 7: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Basic TCP sockets. #include <sys/socket.h> int socket(int family, int type, int

protocol);•Family: AF_INET (PF_INET).•Type: SOCK_STREAM (TCP) SOCK_DGRAM (UDP)

•Protocol: = 0 •Return descriptor, -1 on error.

Page 8: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Connect: #include <sys/socket.h> int connect(int sockfd, const

struct sockaddr *servaddr, socklen_t addrlen);

•Servaddr: socket address structure (ip address and port)

Page 9: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Socket Address structure:struct in_addr {

in_addr_t s_addr;}

struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8];}

• Always use sockaddr_in type for manipulation and convert it to sockaddr. See example1.c.

struct sockaddr { uint8_t sa_len; sa_family_t sa_family; char sa_data[14];}

Page 10: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Bind–Client does not have to bind,

system assigns a dynamic port number.#include <sys/socket.h>int bind(int sockfd, const struct sockaddr &myaddr, socklen_t addlen);

Page 11: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Myaddr:(address, port) = (INADDR_ANY, 0)

system assigns addr and port.

= (INADDR_ANY, !0)system selects addr, user selects port

=(Local IP address, 0)user selects addr, system selects port

=(Local IP address,!0)user selects both addr and port

See example2.c

Page 12: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Listen

–Convert a socket into a passive socket

#include <sys/socket.h>

int listen(int sockfd, int backlog)

•Backlog: number of connections that the kernel should queue for the socket.

Page 13: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Accept:• Blocking by default#include <sys/socket.h>int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

• Return client’s address in cliaddr• See example2.c

Page 14: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• What happen when we run example2.c as server on diablo and example1.c as client on linprog?–Sockaddr_in revisit

•sin_port and sin_addr must be in network byte order.–Check example3.c, what is the difference between diablo and quake?

Page 15: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Some useful functions to convert the byte orders#include <netinet/in.h>

uint16_t htons(uint16_t host16bitvalue);

uint32_t htonl(uint32_t host32bitvalue);

uint16_t ntohs(uint16_t net16bitvalue);

Uint32_t ntohl(uint32_t net32bitvalue);

– See example3.c

Page 16: Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page

• Some byte manipulation functions:#include <strings.h>

Void *memset(void *dst, int c, size_t len);

Void *memcpy(void *dst, void *src, size_t nbytes);

Void *memcmp(const void *ptr1, const void *ptr2, size_t nbytes);

• Address conversion functions• inet_aton/inet_addr/inet_ntoa