network programming using internet sockets wu xuanxuan lai xinyu 吴璇璇 赖新宇...

44
Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴吴吴 吴吴吴 [email protected] [email protected]

Upload: clifford-cunningham

Post on 25-Dec-2015

314 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Network Programming Using Internet Sockets

Wu Xuanxuan Lai Xinyu吴璇璇 赖新宇

[email protected]@163.com

Page 2: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Agenda

• Basic Socket Programming– Understanding Sockets– Socket API– Structs and Data Handling– A simple example

• Assignment• References

Page 3: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming• What is a Socket– Definition 1:• A door between application process and end-end

transport protocol(TCP/UDP)

– Definition 2:• A way to speak to other programs using standard UNIX

file descriptors.

– Definition 3:• An endpoint in communication

Page 4: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• Definition 1: a door between application process and end-end transport protocol (TCP/UDP)

Basic Socket Programming Understanding Sockets- Definition 1

Page 5: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Understanding Sockets-Definition1

controlled byapp developer

Controlled by OS

You write sockets programs without knowing how the lower levels‘ protocols works!

loosely-coupled

Page 6: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Understanding Sockets- Definition1

Socket API: (1) choice of transport protocol; (2) ability to fix a few parameters• Two types of transport service via Internet socket

API: – Stream Sockets (connection-oriented )

• They use TCP (Transmission Control Protocol) protocol– Reliable stream

– Datagram Sockets (connectionless)• They use UDP (User Datagram Protocol) protocol

– Unreliable datagram

Page 7: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• Definition2: a way to speak to other programs using standard Unix file descriptors.

Basic Socket Programming Understanding Sockets- Definition 2

Page 8: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• Socket Programmingint sockfd; /*socket descriptor*/sockfd= socket( AF_INET, SOCK_STREAM, 0);read( sockfd, … );

• File Operationchar buf[100];int fd; /*file descriptor*/fd= open(“foo", O_RDONLY);read( fd, buf, num_bytes);

Basic Socket Programming Understanding Sockets- Definition2

Page 9: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• Definition3: merely an endpoint in communication.

Basic Socket Programming Understanding Sockets- Definition 3

Page 10: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Understanding Sockets- Definition 3

– IP : User needs to know the IP ADDRESS of the server.– Port number: On the server, many processes are

running. We want to “talk” to the right one.

• The knowledge of the IP addresses and the Port Number define uniquely a communication endpoint.

Page 11: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Socket API-TCP Model

Page 12: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Socket API-UDP Model

Server:No bind() and accept().Client:No connect().

Page 13: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Socket API-socket()

• socket() -Get the File Descriptor! – The first step is to require the OS to reserve one

“descriptor” for the communication channel.int sockfd = socket(AF_INET, socket_type, 0);/*socket_type=SOCK_STREAM|SOCK_DGRAM*//*AF_INET means we use IP (version 4)*//*0 is for IP (not ICMP or others)*/

/*return a socket descriptor or -1 when error*/Protocol Family Symbolic NameTCP/IP Internet AF_INETXerox NS AF_NSIntra-host Unix AF_UNIXDEC DNA AF_DECNET

Service Type symbolic namedatagram (UDP) SOCK_DGRAMreliable, in order (TCP) SOCK_STREAMraw socket SOCK_RAW

If(sockfd < 0)perror(“can’t create socket");

Page 14: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Socket API-bind()

• bind()-What IP address and port am I on? struct sockaddr_in servaddr;bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

Note:–Only the server need to call this API;–The type of the second parameter should be sockaddr while we often use sockaddr_in in the program——Type Conversation

Page 15: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• close(sockfd); – frees up any memory associated with the socket

• shutdown(sockfd, how);/* how = 0 -> disable receptions *//* how = 1 -> disable transmission *//* how = 2 -> the same as close() */

Basic Socket Programming Socket API-close(),shutdown()

Page 16: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming TCP API(SERVER)-listen()

• listen()-Who will call me?

listen(sockfd, req_no);• req_no: specifies the maximum number of client connections

that the kernel will queue for this listening descriptor.

Page 17: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• accept()-Thank you for calling port 3490.int new_sd, sockfd, size;struct sockaddr remote_addr;new_sd = accept(sockfd, &remote_addr, &size);

– If the queue is empty, the process will be blocked.– If so, accept() returns a NEW SOCKET DESCRIPTOR ! – the old socket descriptor (sockfd) is still queuing request from the

network !– So, if we want to communicate with the client, we MUST use new_sd.– new_sd is a socket ready for the communication– It is suggested that handle new_sd in a child process or a thread.

Basic Socket Programming TCP API(SERVER)-accept()

Page 18: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming TCP API(CLIENT)-connect()

• connect()-Hey, you! int sockfd; connect(sockfd, (sockaddr*) &servaddr,

sizeof(servaddr) );

– On the client side, bind is done automatically– The local IP address is the one provided by default – A port “randomly” assigned by the operating system is good.– So, we put in servaddr the information on the server and try to

connect to it.– Finish three-way handshake

Page 19: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming TCP API-send() , recv()

• send() and recv() -Talk to me, baby!int send(int sockfd, const void *msg, int len, int

flags); int recv(int sockfd, void *buf, int len, unsigned int

flags);

char *msg = “Hi, baby!";char buffer[SOME_SIZE];int len, nset, nrecv;..

len = strlen(msg);nset= send(sockfd, msg, len, 0);.nrecv = recv(sockfd, &buffer, len, flags)

Page 20: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming TCP API-read() , write()

• read() and write() –more choices• read() = recv(*, *, *, 0)• write() = send(*, *, *, 0)• Programmers are familiar with, similar to file operations

• recv() and send()• explicit meaning

Page 21: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming UDP API-sendto() , recvfrom()

• sendto() and recvfrom() int sendto(int sockfd, const void *msg, int len, unsigned

int flags, const struct sockaddr *to, int tolen);int recvfrom(int sockfd, void *buf,int len,unsigned int

flags, struct sockaddr *from, int *fromlen)

– Send directly without handshake – The first four parameters are the same with send/recv– to/from is a pointer to a struct sockaddr which contains the

destination IP address and port.

– tolen/fromlen, can simply be set to sizeof(struct sockaddr).

Page 22: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling-IP address• IP Address

– Every host has a unique IP Address– 32bits

• Three forms– hostname (string) e.g. localhost– dotted decimal(string) e.g. 192.168.2.1– binary(u_long)

• Dealing with theminet_addr() : dotted decimal to binarygethostbyname() : hostname to binary

e.g. servaddr.sin_addr.s_addr =inet_addr(“59.67.33.68");

Page 23: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling-Port

• Port– 1-255 reserved for standard services– 21 ftp– 23 telnet– 25 SMTP– 80 HTTP– 1-1023 Available only to priviledged users – 1024-4999 Usuable by system and user processes– 5000- Usuable by user processes only

Page 24: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling-struct sock_addr • struct sockaddr : This structure holds socket address

information for many types of sockets:

• struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol

address };

• sockaddr is the structure with the addresses and the ports. We put IP address and the Port in sa_data[14].

Not convenient to deal with?

Page 25: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling-struct sockaddr_in

• struct sockaddr_in : To deal with sockaddr, programmers created a structure: struct sockaddr_in ("in" for "Internet".)

• struct sockaddr_in { short int sin_family; // Address family unsigned short int sin_port; // Port number struct in_addr sin_addr; // Internet address unsigned char sin_zero[8]; // Same size as struct sockaddr

}; • struct in_addr{

/* 32-byte IP Address *./

in_addr_t s_addr; };

We can work with sockaddr_in and cast it to sockaddr.

struct sockaddr_in servaddr;bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

Page 26: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling

• Convert the Natives! • Know this:

– there are two byte orderings• most significant byte first-“Network Byte Order” (NBO). • or least significant byte first-"Host Byte Order” (HBO).

– htons() host to network short– htonl() host to network long– ntohs() network to host short– ntohl() network to host long

• e.g. servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /*IP address of

localhost*/servaddr.sin_port = htons(13);

Page 27: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming Structs and Data Handling

• And here's a sample, while packing a struct sockaddr_in /* an Internet endpoint address*/ struct sockaddr_in my_addr;

my_addr.sin_family = AF_INET; /* host byte order */ my_addr.sin_port = htons(MYPORT); /* short, NBO*/ my_addr.sin_addr.s_addr = inet_addr("132.241.5.10");

bzero(&(my_addr.sin_zero)); /* zero the rest of the struct */

Page 28: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming a simple example-TCP server

Page 29: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programming a simple example-TCP client

Page 30: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Basic Socket Programminga simple example- Result

Page 31: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

• P2P Principle

login search share logout

ping download

P2P Server

Peer ClientPeer Client

Programming Assignment

Page 32: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Assignment

• Phase1: Establishing Client-Server Communications (Mandatory; 60 points)

• Phase2: Establishing Peer-Peer Communications (Mandatory; 40 points Optional; 20 points)

Page 33: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase1: Establishing Client-Server Communications -- Mandatory

• 1) Authenticate with the server (provide a username and encrypted password)

• 2) Send a list of files to the server that you wish to share with other users

• 3) Submit a search query to the server for a file you wish to download

• 4) Receive the search results, parse them, and output them to the user

• 5) Log out

Page 34: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase1: Authenticate

• Protocol packetpacket head is 4 bytes!

Page 35: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase1: Share

• Protocol packet:

Page 36: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase1: Search

• Protocol packet:

Page 37: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase1: Logout

• Protocol packet:

Page 38: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase2: Establishing Peer-Peer Communications

• 1) Add functionality to send "ping" messages over UDP and listen for echo responses, in order to estimate the round trip time to another peer. --Mandatory

• 2) Add functionality to respond to ping messages from other peers.-- Mandatory

• 3) Add functionality to connect to another peer and download a file.

• 4) Add functionality to make your peer a file server, so that other peers may connect and download files from you.

Page 39: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase2: Ping

• Send UDP Ping Message.• Protocol packet:

Do not guarantee delivery of packets!

Use timeout control—select()

Page 40: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase2: Peer-Peer Communications

• Protocol packet: No need password!

Page 41: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Phase2: Peer-Peer Communications (cont...)

• Protocol packet:

Page 42: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Requirement

• Program Correctness and Functionality: 60%

• Code design & Program Structure: 10%

• Documentation: 30%

Page 43: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

Deadline

• Mandatory : April 27

• Optional: May 7

• Submit to: [email protected]

• For more detail: detailed requirements.pdf

Page 44: Network Programming Using Internet Sockets Wu Xuanxuan Lai Xinyu 吴璇璇 赖新宇 xuan_tju@126.com 15122211137@163.com

References

• Warren W. Gay , “Linux Socket Programming by Example”• Beej's Guide to Network Programming Using Internet Sockets• Douglas E. Comer, David L. Stevens, “Internetworking With

TCP/IP Vol III”

Thank you!