socket programming(2/2)

188
Socket Programming(2/2) 1

Upload: rooney-carpenter

Post on 30-Dec-2015

51 views

Category:

Documents


2 download

DESCRIPTION

Socket Programming(2/2). Outline. 1. Introduction to Network Programming 2. Network Architecture – Client/Server Model 3. TCP Socket Programming 4. UDP Socket Programming 5. IPv4/IPv6 Programming Migration. UDP Socket Programming. Review of Transport Layer Services. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Socket Programming(2/2)

Socket Programming(2/2)

1

Page 2: Socket Programming(2/2)

Outline

1. Introduction to Network Programming 2. Network Architecture – Client/Server Model 3. TCP Socket Programming 4. UDP Socket Programming 5. IPv4/IPv6 Programming Migration

2

Page 3: Socket Programming(2/2)

UDP Socket Programming

3

Page 4: Socket Programming(2/2)

Review of Transport Layer Services

Connection-Oriented Transport Services Transmission Control Protocol (TCP) Stream Control Transmission Protocol (SCTP)

Connectionless Transport Services User Datagram Protocol (UDP)

4

Page 5: Socket Programming(2/2)

Connectionless Transport Services

No (Logical) Connection Establishment – Packet Switching Each Datagram is individually transmitted – Out-of-order Unreliable Data Transfer – Datagram Loss No Connection State – No Flow control and Congestion Control

5

Page 6: Socket Programming(2/2)

Comparisons of Transport Services

6

Page 7: Socket Programming(2/2)

User Datagram Protocol (UDP)

UDP provides an unreliable, connectionless service to the invoking application

No handshaking between sending and receiving transport layer entities before sending data segments

UDP is defined in RFC 768 (http://www.ietf.org/rfc/rfc0768.txt) UDP-based Internet Services/Applications: DNS, SNMP, RIP, Internet

Telephony

7

Page 8: Socket Programming(2/2)

Comparison of UDP and TCP Segments

8

Page 9: Socket Programming(2/2)

Preview of UDP Sockets’ Functions

UDP Sockets – Interfaces between application layer and UDP transport layer

Using socket() to a UDP socket without connection establishment Using sendto() and recvfrom() to send and/or receive user datagrams

from peer hosts

9

Page 10: Socket Programming(2/2)

Categories of UDP Sockets’ Functions

10

Page 11: Socket Programming(2/2)

Operations of UDP Client/Server

11

Page 12: Socket Programming(2/2)

Elementary UDP Socket Functions

12

Page 13: Socket Programming(2/2)

Review of UDP Unreliable Data Transfer

No (Logical) Connection Establishment – Packet Switching Each Datagram is individually transmitted – Out-of-order Sequence Unreliable Data Transfer – Datagram Loss No Connection State – No Flow control and Congestion Control

13

Page 14: Socket Programming(2/2)

IP and Port Addressing for UDP

UDP does not create a (virtual) logical channel before data transfer No peer service port binding information

Each datagram should be explicitly specified its addressing information

Source IP, Source Port Destination IP, Destination Port

14

Page 15: Socket Programming(2/2)

UDP Socket Creation – socket()

socket -- create an endpoint for communication int socket(int domain, int type, int protocol)

domain : Specify a communications domain - PF_INET type: Specify the semantics of communication - SOCK_DGRAM protocol: Specify a particular protocol to be used with the socket –

0

15

Page 16: Socket Programming(2/2)

sockfd = socket(PF_INET, SOCK_DGM, 0) ;

16

Page 17: Socket Programming(2/2)

sockfd = socket(PF_INET, SOCK_DGM, 0) ;

sockfd – socket descriptor (handler) integer -1 means that socket is creating failure

17

Page 18: Socket Programming(2/2)

sockfd = socket(PF_INET, SOCK_DGM, 0) ;

Parameter : domainDomain value: PF_INET – Internet Protocol version 4 PF_INET6 – Internet Protocol version 6 PF_LINK - Link Layer Interface …

18

Page 19: Socket Programming(2/2)

sockfd = socket(PF_INET, SOCK_DGM, 0) ;

Parameter : typetype value : SOCK_STREAM - TCP SOCK_DGRAM - UDP SOCK_RAW - Raw Socket …

19

Page 20: Socket Programming(2/2)

UDP Socket Service Binding – bind() Assign a local protocol address to a socket int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)

sockfd : socket descriptor created by socket() my_addr: Local address information including IP address and port

value addrlen: byte length of local address information – my_addr

On success, zero is returned. On error, -1 is returned It is usually used in server port binding

20

Page 21: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

21

Page 22: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);If RetValue is equal to 0, binding local address, local port to the socket isSuccessfullyIf RetValue is less than 0, binding process isfailed.

22

Page 23: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

Application

Transport

Process

SocketUDP

23

Page 24: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

Application

Transport

Process

SocketUDP

PF_INET“0.0.0.0”

1340

Service Addressing Information

24

Page 25: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

Application

Transport

Process

SocketUDP1340

25

Page 26: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

sockfd = socket(PF_INET, SOCK_DRGM, 0)

26

Page 27: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

srvaddr.sin_family Protocol Family (PF_INET)srvaddr.sin_addr.s_addr Local IP (0,0.0.0)srvaddr.sin_port Local Port (1260)

27

Page 28: Socket Programming(2/2)

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length);

Length of srvaddr structure

28

Page 29: Socket Programming(2/2)

Comparison of TCP and UDP Socket’s IP and Port Binding

TCP and UDP sockets use same function to create socket interface and IP and port information binding at server side

TCP uses connect() to create a communication channel Communication channel is identified by the binding of local IP,

local Port, remote IP, and remote Port UDP has no connection process to bind their IP and Port between local

and remote hosts

29

Page 30: Socket Programming(2/2)

UDP Socket Data Sending – sendto()

Send a message on a socket ssize_t sendto(int s, const void *buf, size_t len, int flags,

const struct sockaddr *to, socklen_t tolen); s: File descriptor of the sending socket buf: Content of sending message len: Byte length of sending message flags: Control information of flags to: Addressing information of destination host tolen: Byte length of to structure

30

Page 31: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

31

Page 32: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

32

Page 33: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

On success, these calls return the number of characters sent.On error, -1 is returned

33

Page 34: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Application

Transport

Process

SocketUDP1340

olleH

Destination Addressing Information.

PF_INET“140.123.101.30”

1690

34

Page 35: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Application

Transport

Process

Socket

UDP1340

olleH

35

Page 36: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Application

Transport

Process

SocketUDP1340

olleH

36

Page 37: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Application

Transport

Process

SocketUDP1340

olleH

37

Page 38: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Application

Transport

Process

SocketUDP1340

38

Page 39: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

sockfd : created by socket(PF_INET, SOCK_DGM, 0) ;

39

Page 40: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

buffer : block dataExample: strcpy(buffer, “Hello”) ;

40

Page 41: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

buffer lengthExample: strlen(buffer)

41

Page 42: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

control information of sento() functionFlag value normally is 0

42

Page 43: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

server.sin_family Protocol Family (PF_INET)server.sin_addr.s_addr Destination IP (140.123.101.30)sserver.sin_port Destination Port (1690)

43

Page 44: Socket Programming(2/2)

RetValue = sendto(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &server,length);

Size (length) of server structure

44

Page 45: Socket Programming(2/2)

UDP Socket Data Receiving – recvfrom()

Receive a message from a socket ssize_t recvfrom(int s, void *buf, size_t len, int flags,

struct sockaddr *from, socklen_t *fromlen); s: File descriptor of the sending socket buf: Content of receiving message len: length of allocated buffer to receive message flags: Control information of flags from: Addressing information of sending host fromlen: Byte length of from structure

45

Page 46: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

46

Page 47: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

47

Page 48: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

On success, these calls return the number of characters received.On error, -1 is returned

48

Page 49: Socket Programming(2/2)

Application

Transport

Process

SocketUDP1340

Hello

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

49

Page 50: Socket Programming(2/2)

Application

Transport

Process

SocketUDP1340

Hello

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

50

Page 51: Socket Programming(2/2)

Application

Transport

Process

SocketUDP1340

Hello

Addressing Information.of Sending Host

PF_INET“140.123.101.24”

1340

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

51

Page 52: Socket Programming(2/2)

Application

Transport

Process

SocketUDP1340

Hello

Addressing Information.of Sending Host

PF_INET“140.123.101.24”

1340

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

52

Page 53: Socket Programming(2/2)

Application

Transport

Process

SocketUDP1340

Hello

Addressing Information of Source Host

PF_INET“140.123.101.24”

1340

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

53

Page 54: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

sockfd : created by socket(PF_INET, SOCK_DGM, 0) ;

54

Page 55: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

buffer: allocated space to receive incomingmessage

55

Page 56: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

strlen(buffer) : size of allocated space

56

Page 57: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

control information of recvfrom() functionFlag value normally is 0

57

Page 58: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

peer.sin_family Protocol Family (PF_INET)peer.sin_addr.s_addr Source IP (140.123.101.24)peer.sin_port Source Port (1340)

58

Page 59: Socket Programming(2/2)

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0,(struct sockaddr*) &peer,length);

length = size of peer structure

59

Page 60: Socket Programming(2/2)

Comparison of TCP and UDP Socket Data Sending and

Receiving

60

Page 61: Socket Programming(2/2)

61

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

Page 62: Socket Programming(2/2)

62

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

Page 63: Socket Programming(2/2)

63

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

UDP

int s, const void *buf, size_t len, int flags

int s, const void *buf, size_t len, int flags

Page 64: Socket Programming(2/2)

64

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

UDP

int s, const void *buf, size_t len, int flagsint s, const void *buf, size_t len, int flags

Page 65: Socket Programming(2/2)

65

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

UDP

int s, const void *buf, size_t len, int flags

Same socket and sending buffer parameters

Page 66: Socket Programming(2/2)

66

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

Page 67: Socket Programming(2/2)

67

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

const struct sockaddr *to, socklen_t tolen

Page 68: Socket Programming(2/2)

68

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

const struct sockaddr *to, socklen_t tolen

Page 69: Socket Programming(2/2)

69

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

const struct sockaddr *to, socklen_t tolen

UDP should specify addressing information to identify the destination at every sendto() process

Page 70: Socket Programming(2/2)

70

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

send(int s, const void *buf, size_t len, int flags)

UDP

sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)

Page 71: Socket Programming(2/2)

71

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

Page 72: Socket Programming(2/2)

72

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

int s, void *buf, size_t len, int flags

int s, void *buf, size_t len, int flags

Page 73: Socket Programming(2/2)

73

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

int s, void *buf, size_t len, int flagsint s, void *buf, size_t len, int flags

Page 74: Socket Programming(2/2)

74

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

int s, void *buf, size_t len, int flags

Page 75: Socket Programming(2/2)

75

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

int s, void *buf, size_t len, int flags

Same socket and receiving buffer parameters

Page 76: Socket Programming(2/2)

76

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

Page 77: Socket Programming(2/2)

77

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

Page 78: Socket Programming(2/2)

78

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

struct sockaddr *from, socklen_t *fromlen

Page 79: Socket Programming(2/2)

79

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

struct sockaddr *from, socklen_t *fromlen

Page 80: Socket Programming(2/2)

80

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

struct sockaddr *from, socklen_t *fromlen

Page 81: Socket Programming(2/2)

81

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

struct sockaddr *from, socklen_t *fromlen

UDP can get specific source information of receiving message at every recvfrom() process

Page 82: Socket Programming(2/2)

82

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

recv(int s, void *buf, size_t len, int flags)

UDP

recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

Page 83: Socket Programming(2/2)

83

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), connect(), and accept(), to create a logical transport channel with specific addressing information between two hosts.

client server

Page 84: Socket Programming(2/2)

84

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), connect(), and accept(), to create a logical transport channel with specific addressing information between two hosts.

client server

Page 85: Socket Programming(2/2)

85

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept() and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

client server

Page 86: Socket Programming(2/2)

86

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

client server

Page 87: Socket Programming(2/2)

87

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

client server

Page 88: Socket Programming(2/2)

88

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

client server

Page 89: Socket Programming(2/2)

89

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

client server

Page 90: Socket Programming(2/2)

90

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.243Local Port: 3865 (assigned by system)

Local IP :140.123.101.100Local Port: 1460

client server

Page 91: Socket Programming(2/2)

91

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

client server

Page 92: Socket Programming(2/2)

92

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

client server

Page 93: Socket Programming(2/2)

93

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Local IP :140.123.101.243Local Port: 3865

Local IP :140.123.101.100Local Port: 1460

client server

Page 94: Socket Programming(2/2)

94

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Page 95: Socket Programming(2/2)

95

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Page 96: Socket Programming(2/2)

96

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Only use bind() to address service port, no other procedures to establish a logicaltransport channel with specific addressing information.The destination addressing information must be injected into the sendto() function

Page 97: Socket Programming(2/2)

97

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Only use bind() to address service port, no other procedures to establish a logicaltransport channel with specific addressing information.The destination addressing information must be injected into the sendto() function

client server

Page 98: Socket Programming(2/2)

98

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Only use bind() to address service port, no other procedures to establish a logicaltransport channel with specific addressing information.The destination addressing information must be injected into the sendto() function

client server

Transport

Application

Transport

Application

Page 99: Socket Programming(2/2)

99

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Only use bind() to address service port, no other procedures to establish a logicaltransport channel with specific addressing information.The destination addressing information must be injected into the sendto() function

client server

Transport

Application

Transport

Applicationsocket socket

Local IP :140.123.101.100Local Port: 1460

Page 100: Socket Programming(2/2)

100

Protocol TCP UDP

Sending Message send() sendto()

Receiving Message recv() recvfrom()

ServiceConnection-

OrientedConnectionless

TCP

UDP

Using the following operations, bind(), listen(), accept(), and connect(), to create a logical transport channel with specific addressing information between two hosts.

Transport

Application

Transport

Application

socket socket

Local IP :140.123.101.100Local Port: 1460

Local IP :140.123.101.243Local Port: 3865

Client IP : 140.123.101.243Client Port: 3865Server IP : 140.123.101.100Server Port: 1460

client server

Channel Addressing Information

Only use bind() to address service port, no other procedures to establish a logicaltransport channel with specific addressing information.The destination addressing information must be injected into the sendto() function

client server

Transport

Application

Transport

Applicationsocket socket

Local IP :140.123.101.100Local Port: 1460

No Specific Channel Addressing Information

Page 101: Socket Programming(2/2)

UDP Socket Release – close()

close - Close a file descriptor int close(int fd);

fd: socket descriptor

101

Page 102: Socket Programming(2/2)

RetValue = close(sockfd) ;

102

Page 103: Socket Programming(2/2)

RetValue = close(sockfd) ;

103

Page 104: Socket Programming(2/2)

RetValue = close(sockfd) ;

returns zero on success. On error, -1 is returned

104

Page 105: Socket Programming(2/2)

RetValue = close(sockfd) ;

Application

Transport

Process

SocketUDP1340

105

Page 106: Socket Programming(2/2)

RetValue = close(sockfd) ;

Application

Transport

Process

Socket

106

Page 107: Socket Programming(2/2)

RetValue = close(sockfd) ;

Application

Transport

Process

107

Page 108: Socket Programming(2/2)

RetValue = close(sockfd) ;

sockfd : created by socket(PF_INET, SOCK_DGM, 0) ;

108

Page 109: Socket Programming(2/2)

Review of UDP Client/Server Operation

109

Page 110: Socket Programming(2/2)

UDP Client UDP Server

110

Page 111: Socket Programming(2/2)

UDP Client UDP Server

Running Time

111

Page 112: Socket Programming(2/2)

UDP Client UDP Server

Running Time

112

Page 113: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

113

Page 114: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

114

Page 115: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

115

Page 116: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()Blocking!!wait incomming userdatagram

116

Page 117: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()Blocking!!wait incomming userdatagram

sendto()

117

Page 118: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()Blocking!!wait incomming userdatagram

sendto()

recvfrom()

118

Page 119: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

119

Page 120: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

120

Page 121: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

121

Page 122: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

sendto()

122

Page 123: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

sendto()

123

Page 124: Socket Programming(2/2)

UDP Client UDP Server

socket()socket()

bind()

recvfrom()

sendto()

recvfrom()

sendto()

close()Wait another UDP Client

124

Page 125: Socket Programming(2/2)

UDP Client UDP Server

socket()

bind()

socket() recvfrom()

125

Page 126: Socket Programming(2/2)

IPv6 Socket Programming

126

Page 127: Socket Programming(2/2)

IPv6 Socket Programming

127

Page 128: Socket Programming(2/2)

128

Page 129: Socket Programming(2/2)

129

Page 130: Socket Programming(2/2)

IPv4 Addressing Problems

Does IPv4 Addressing Space be exhausted? Every Equipment(Host Needs) a Unique IPv4 Address Network Usage is an Exponential Growth

130

Page 131: Socket Programming(2/2)

IPv4 Addressing - Temporary Solution

Sub-Netting Classless Inter Domain Routing – CIDR Dynamic Address Allocation – Dynamic Host Configuration Protocol

(DHCP) Network Address Translation (NAT) – Private Networks

131

Page 132: Socket Programming(2/2)

IPv4 Addressing – Permanent Solution

Extend IPv4 Addressing Space – New Addressing Model Revise IPv4 Originating Design Defects Compromise the Developing Trend of Network Technology

132

Page 133: Socket Programming(2/2)

IPv4 Originating Defects

Variable Header Length Option Fields

Cyclic Redundancy Check (CRC) Overloading

Maximum Transmission Unit (MTU) IP Packet Fragmentation/Resassembly

133

Page 134: Socket Programming(2/2)

Next Generation Internet Protocol – IPv6

Internet Protocol Version 6 – RFC 2460 Expanded Addressing Capability – 128 bits Autoconfiguration Mechanisms Simplification of Header Format – Fixed 40 bytes Improved Support for Extensions and Options Extension for Authentication and Privacy Flow Label Capability

134

Page 135: Socket Programming(2/2)

IPv4 and IPv6 Headers

135

Page 136: Socket Programming(2/2)

verHeaderLength

Type of Service

16-bit Identifier

Datagram Length

Flags 13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

136

Page 137: Socket Programming(2/2)

versionTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

137

Page 138: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

138

Page 139: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Protocol Version

139

Page 140: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Quality of Service

140

Page 141: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Payload Length

141

Page 142: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Lifetime of Packet

142

Page 143: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Protocol Indicator

143

Page 144: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Source Address

144

Page 145: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Destination Address

145

Page 146: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Header Checksum

146

Page 147: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Datagram Fragmentation/Reassembly

147

Page 148: Socket Programming(2/2)

verTrafficClass

Payload Length

Flow Label

NextHeader

HopLimit

128-bit Source IP Address

128-bit Destination IP Address

verHeaderLength

TOS

16-bit Identifier

Datagram Length

FLAGs

13-bit Fragmentation Offset

Time-to-LiveUpper-Layer

ProtocolHeader Checksum

32-bit Source IP Address

32-bit Destination IP Address

Options (if any) + Padding

Variable Header Length with Option Fields

148

Page 149: Socket Programming(2/2)

IPv4 and IPv6 Socket Functions

IPv4 and IPv6 use the same socket functions

With Different Protocol Family and Socket Address Structure

149

Page 150: Socket Programming(2/2)

IPv4 and IPv6 Socket Address Structures

Different Protocol Family Different Addressing Length

150

Page 151: Socket Programming(2/2)

socket()

151

Page 152: Socket Programming(2/2)

socket()

bind()connect()

152

Page 153: Socket Programming(2/2)

socket()

bind()

listen()setsockopt()

connect()

153

Page 154: Socket Programming(2/2)

socket()

bind()

listen()

accept()

setsockopt()

connect()

close()

154

Page 155: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

connect()

close()

155

Page 156: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

156

Page 157: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

157

Page 158: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

158

Page 159: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

159

Page 160: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

IPv4 Address : 140.123.101.100IPv6 Address : fe80::20c:f1ff:fe28:2f15

sockaddr_insockaddr_in6

160

Page 161: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

IPv4 Address : 140.123.101.100IPv6 Address : fe80::20c:f1ff:fe28:2f15

sockaddr_insockaddr_in6

struct sockaddr_in { u_int8_t sin_len ; u_int8_t sin_family ; u_int16_t sin_port ; struct in_addr sin_addr ; int8_t size_zero[8] ;} ;

struct sockaddr_in6 { u_int8_t sin6_len ; u_int8_t sin6_family ; u_int16_t sin6_port ; u_int32_t sin6_flowinfo ; struct in6_addr sin6_addr ; u_int32_t sin6_scope_id ;} ;

161

Page 162: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

IPv4 Address : 140.123.101.100IPv6 Address : fe80::20c:f1ff:fe28:2f15

sockaddr_insockaddr_in6

struct sockaddr_in { u_int8_t sin_len ; u_int8_t sin_family ; u_int16_t sin_port ; struct in_addr sin_addr ; int8_t size_zero[8] ;} ;

struct sockaddr_in6 { u_int8_t sin6_len ; u_int8_t sin6_family ; u_int16_t sin6_port ; u_int32_t sin6_flowinfo ; struct in6_addr sin6_addr ; u_int32_t sin6_scope_id ;} ;

length AF_INET

16 bit Port #

32-bitIPv4 Address

(unused)

fixed-length (16 bytes)

length AF_INET6

16 bit port #

32-bitFlow Label

128-bitIPv6 Address

fixed-length (28 bytes)

32-bitScope ID

162

Page 163: Socket Programming(2/2)

socket()

bind()

listen()

accept()

send() recv()

setsockopt()

sendto() recvfrom()

connect()

close()

IPv4 Address : 140.123.101.100IPv6 Address : fe80::20c:f1ff:fe28:2f15

sockaddr_insockaddr_in6

struct sockaddr_in { u_int8_t sin_len ; u_int8_t sin_family ; u_int16_t sin_port ; struct in_addr sin_addr ; int8_t size_zero[8] ;} ;

struct sockaddr_in6 { u_int8_t sin6_len ; u_int8_t sin6_family ; u_int16_t sin6_port ; u_int32_t sin6_flowinfo ; struct in6_addr sin6_addr ; u_int32_t sin6_scope_id ;} ;

length AF_INET

16 bit Port #

32-bitIPv4 Address

(unused)

fixed-length (16 bytes)

length AF_INET6

16 bit port #

32-bitFlow Label

128-bitIPv6 Address

fixed-length (28 bytes)

32-bitScope ID

163

Page 164: Socket Programming(2/2)

IPv4 and IPv6 Coexisting

164

Page 165: Socket Programming(2/2)

IPv4 Client

TCP

IPv4

Datalink

IPv4 Server

TCP

IPv4

Datalink

Only IPv4 Protocol Stack

165

Page 166: Socket Programming(2/2)

IPv4 Client

TCP

IPv4

Datalink

IPv4 Server

TCP

IPv4

Datalink

166

Page 167: Socket Programming(2/2)

IPv6 Client

TCP

IPv6

Datalink

IPv6 Server

TCP

IPv6

Datalink

Only IPv6 Protocol Stack

167

Page 168: Socket Programming(2/2)

IPv6 Client

TCP

IPv6

Datalink

IPv6 Server

TCP

IPv6

Datalink

168

Page 169: Socket Programming(2/2)

IPv4/IPv6 Server

TCP

IPv4

Datalink

IPv4/IPv6 Client

TCP

IPv4

Datalink

IPv6 IPv6

IPv4 mappedIPv6 Address

169

Page 170: Socket Programming(2/2)

IPv4/IPv6 Server

TCP

IPv4

Datalink

IPv4/IPv6 Client

TCP

IPv4

Datalink

IPv6 IPv6

IPv4 mappedIPv6 Address

170

Page 171: Socket Programming(2/2)

Comparison of IPv4 and IPv6 Socket Functions

171

Page 172: Socket Programming(2/2)

IPv4 Address Format

IPv4 Address Length : 32 bits (4 bytes) “140.123.101.100” – Dotted-Decimal String Network Byte Ordered IPv4 Internet Address Structure

struct in_addr { in_addr_t s_addr ;}

in_addr_t : uint32_t (Unsigned 32-bit integer) Conversion of Network Byte Address and Address String Byte Manipulation Functions

int inet_aton() in_addr_t inet_addr() char *inet_ntoa()

172

Page 173: Socket Programming(2/2)

int inet_aton(const char *cpcp, struct in_addr *inpinp);

Converts the Internet host address cp from the standard numbers-and-dots notation into binary data and stores it in the structure that inpinp points to

inet_aton() returns non-zero if the address is valid, zero if not.

struct in_addr dest ;inet_aton("140.123.101.114", &dest.sin_addr);

int inet_aton()

173

Page 174: Socket Programming(2/2)

in_addr_t inet_addr(const char *cpcp);

Convert the Internet host address cpcp from numbers-and-dots notation into binary data in network byte order.

If the input is invalid, INADDR_NONE (usually -1) is returned.

struct in_addr dest ;dest.sin_addr = inet_addr(“140.123.101.114”);

in_addr_t inet_addr()

174

Page 175: Socket Programming(2/2)

char *inet_ntoa(struct in_addr in);

Convert the Internet host address in given in network byte orderto a string in standard numbers-and-dots notation.

The string is returned in a statically allocated buffer, which subsequent calls will overwrite.

struct in_addr in ;char ipstr[17] ;memset(ipst, 17,0) ;in.s_addr = inet_addr("140.123.101.114");strcpy(ipstr, inet_ntoa(in)) ;

char *inet_ntoa()

175

Page 176: Socket Programming(2/2)

IPv6 Address Format

IPv6 Address Length : 128 bits (16 bytes) “fe80:0000:0000:0000:0202:b3ff:fe1e:8329”

– Colon-Hexadecimal String “fe80:0:0:0:202:b3ff:fe1e:8329” “fe80::202:b3ff:fele:8239” – Abbreviation Network Byte Ordered IPv6 Internet Address Structure

struct in6_addr { uint8_t s6_addr[16] ;}

uint8_t (Unsigned 8-bit integer)

176

Page 177: Socket Programming(2/2)

IPv6 Address Format

Conversion of Network Byte Address and Address String Byte Manipulation Functions

int inet_pton() const char *inet_ntop()

177

Page 178: Socket Programming(2/2)

Convert the character string src into a network address structure in the af address family, then copies the network address structure to dst

int inet_pton(int af, const char *src, void *dst);

parameters af src dst

IPv4 AF_INET char struct in_addr{} ;

IPv6 AF_INET6 char struct in6_addr{} ;

struct in_addr in4 ;struct in6_addr in6 ;inet_pton(AF_INET, "140.123.101.114", &in4);inet_pton(AF_INET6, “fe80:0000:0000:0000:0202:b3ff:fe1e:8329”, &in6)

int inet_pton()

178

Page 179: Socket Programming(2/2)

const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

Convert the network address structure src in the af address family into a character string, which is copied to a character buffer dst, which is cnt bytes long.

parameters af src dst cnt

IPv4 AF_INET struct in_addr{} ; char INET_ADDRSTRLEN(14)

IPv6 AF_INET6 struct in6_addr{} ; char INET6_ADDRSTRLEN(48)struct in_addr in4 ;

struct in6_addr in6 ;char ipstr[256] ;

inet_ntop(AF_INET, in4, &ipstr, INET_ADDRSTRLEN);inet_pton(AF_INET6, in6, &ipstr, INET6_ADDRSTRLEN)

const char *inet_ntop()

179

Page 180: Socket Programming(2/2)

Comparison of Socket Address Structures

180

Page 181: Socket Programming(2/2)

IPv4/IPv6 Socket Functions

Same Socket Functions Socket Creation Socket Connection Message Sending/Receiving

Different Protocol Domains and Socket Address Structure IPv4 Protocol Domain - AF_INET IPv4 Socket Address Structure - sockaddr_in{} IPv6 Protocol Domain - AF_INET6 IPv6 Socket Address Structure - sockaddr_in6{}

181

Page 182: Socket Programming(2/2)

IPv4/IPv6 Program Migration

Direct change Domain Protocol AF_INET (IPv4) AF_INET6 (IPv6) IP_PROTO_IP (IPv4) IP_PROTO_IP6 (IPv6)

Direct change Socket Address Structure and Internet Address Structure sockaddr_in{} (IPv4) sockaddr_in6{}/sockaddr_storage (IPv6)

Conversion of Network Byte Ordered Address and IP String inet_aton(), inet_addr(), inet_ntoa() – IPv4 inet_pton(), inet_ntop() – IPv6

Host Name and IP Address Translations Function gethostbyname(), gethostbyaddr ()– IPv4 getaddrinfo(), getnameinfo() – IPv6

Conversion of data message containing IP address information FTP, SIP, H323, …

182

Page 183: Socket Programming(2/2)

IPv4/IPv6 Program Migration

Utility Tool – Microsoft’s checkv4.exe Included in Microsoft Platform SDK

List the suggestion of code modification Protocol Domain / Protocol Type Socket Address Structures Network Byte Ordered Functions Host Name and IP Address Translation Functions

183

Page 184: Socket Programming(2/2)

IPv4/IPv6 TCP Operations

184

Page 185: Socket Programming(2/2)

socket

bind

listen

accept

recv

send

socket

connect

send

recv

TCP ServerTCP Client

IPv6

IPv4

AF_INET

AF_INET6

in_addr{}

in6_addr{}

sockaddr_in{}

sockaddr_in6{}

185

Page 186: Socket Programming(2/2)

IPv4/IPv6 UDP Operations

186

Page 187: Socket Programming(2/2)

socket

bind

recvfrom

sendto

socket

sendto

recvfrom

UDP ServerUDP Client

IPv6

IPv4

AF_INET

AF_INET6

in_addr{}

in6_addr{}

sockaddr_in{}

sockaddr_in6{}

187

Page 188: Socket Programming(2/2)

Question

在 IPv4/IPv6 的程式設計,最主要的差異在於(A). Socket Address Structure 與 Internet Address Format()

(B). Socket 建立階段: socket(), bind(), listen(), accept()

(C). Socket 資料送收階段: send()/recv(), sendto()/recvfrom()

(D). 以上皆是

188