Socket Programming(2/2) 1. Outline  1. Introduction to Network Programming  2. Network Architecture – Client/Server Model  3. TCP Socket Programming.

Slides:



Advertisements
Similar presentations
Sockets: Network IPC Internet Socket UNIX Domain Socket.
Advertisements

Today’s topic: Basic TCP API –Socket –Bind –Listen –Connect –Accept –Read –Write –Close.
Sockets CS 3516 – Computer Networks. Outline Socket basics Socket details (TCP and UDP) Socket options Final notes.
Elementary TCP Sockets Computer Networks Computer Networks Term B10 UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
Networks: TCP/IP Socket Calls1 Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Socket Programming.
Multimedia Networking Sockets. Outline Socket basics Socket details (TCP and UDP) Socket options Final notes.
LANMAR for IPv6 Jason Chen Teresa Breyer Yeng-Zhong Lee.
Tutorial 8 Socket Programming
Programming with Berkeley Sockets Presented by Chris GauthierDickey Written by Daniel Stutzbach (I think!) for CIS 432/532 Useful References: ● man pages.
UDP: User Datagram Protocol. UDP: User Datagram Protocol [RFC 768] r “bare bones”, “best effort” transport protocol r connectionless: m no handshaking.
CSE/EE 461 Getting Started with Networking. Basic Concepts  A PROCESS is an executing program somewhere.  Eg, “./a.out”  A MESSAGE contains information.
Lecture 10 Overview. Network API Application Programming Interface – Services that provide the interface between application and protocol software often.
CS 360 – Spring 2007 Pacific University TCP section 6.5 (Read this section!) 27 Feb 2007.
1 Tutorial on Socket Programming Computer Networks - CSC 458 Department of Computer Science Yukun Zhu (Slides are mainly from Monia Ghobadi, and Amin Tootoonchian,
UNIX Sockets COS 461 Precept 1.
Client Software Design Objectives: Understand principles of C/S design, with focus on clients Review Windows implementations of Socket functions.
Sockets CIS 370 Fall 2009, UMassD. Introduction  Sockets provide a simple programming interface which is consistent for processes on the same machine.
Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page.
UNIX Socket Programming CS 6378
TCP Socket Programming. r An abstract interface provided to the application programmer  File descriptor, allows apps to read/write to the network r Allows.
ECE 4110 – Internetwork Programming Client-Server Model.
Sockets and intro to IO multiplexing. Goals We are going to study sockets programming as means to introduce IO multiplexing problem. We will revisit socket.
Socket Programming. Introduction Sockets are a protocol independent method of creating a connection between processes. Sockets can be either – Connection.
Client-Side Network Programming
University of Calgary – CPSC 441.  UDP stands for User Datagram Protocol.  A protocol for the Transport Layer in the protocol Stack.  Alternative to.
CS345 Operating Systems Φροντιστήριο Άσκησης 2. Inter-process communication Exchange data among processes Methods –Signal –Pipe –Sockets.
Introduction to Socket Programming Advisor: Quincy Wu Speaker: Kuan-Ta Lu Date: Nov. 25, 2010.
Sockets CIS 370 Lab 10 UMass Dartmouth. Introduction 4 Sockets provide a simple programming interface which is consistent for processes on the same machine.
Chapter 2 Applications and Layered Architectures Sockets.
Remote Shell CS230 Project #4 Assigned : Due date :
Networking Tutorial Special Interest Group for Software Engineering Luke Rajlich.
Advanced Sockets API-II Vinayak Jagtap
CPSC 441 TUTORIAL – FEB 13, 2012 TA: RUITNG ZHOU UDP REVIEW.
1 Computer Networks An Introduction to Computer Networks University of Tehran Dept. of EE and Computer Engineering By: Dr. Nasser Yazdani Lecture 3: Sockets.
Elementary TCP Sockets UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
UNIX Sockets COS 461 Precept 1. Socket and Process Communication The interface that the OS provides to its networking subsystem application layer transport.
Introduction to Socket
CSE/EE 461 Getting Started with Networking. 2 Basic Concepts A PROCESS is an executing program somewhere. –Eg, “./a.out” A MESSAGE contains information.
S OCKET P ROGRAMMING IN C Professor: Dr. Shu-Ching Chen TA: HsinYu Ha.
Sockets Introduction Socket address structures Value-result arguments
Introduction to Sockets
S OCKET P ROGRAMMING IN C Professor: Dr. Shu-Ching Chen TA: Hsin-Yu Ha.
Read() recv() connection establishment Server (connection-oriented protocol) blocks until connection from client Client socket() bind() listen() accept()
2: Application Layer 1 Socket Programming UNIX Network Programming, Socket Programming Tutorial:
CSCI 330 UNIX and Network Programming Unit XIV: User Datagram Protocol.
Socket Programming. Computer Science, FSU2 Interprocess Communication Within a single system – Pipes, FIFOs – Message Queues – Semaphores, Shared Memory.
UNIX Sockets Outline UNIX sockets CS 640.
1 Spring Semester 2008, Dept. of Computer Science, Technion Internet Networking recitation #7 Socket Programming.
Lecture 15 Socket Programming CPE 401 / 601 Computer Network Systems slides are modified from Dave Hollinger.
1 Socket Interface. 2 Client-Server Architecture The client is the one who speaks first Typical client-server situations  Client and server on the same.
Socket Programming(1/2). Outline  1. Introduction to Network Programming  2. Network Architecture – Client/Server Model  3. TCP Socket Programming.
1 Socket Interface. 2 Basic Sockets API Review Socket Library TCPUDP IP EthernetPPP ARP DHCP, Mail, WWW, TELNET, FTP... Network cardCom Layer 4 / Transport.
CSE 333 – SECTION 8 Client-Side Network Programming.
Operating Systems Sockets ENCE 360.
Socket Programming (Cont.)
Socket Programming in C
תקשורת ומחשוב תרגול 3-5 סוקטים ב-C.
UNIX Sockets Outline Homework #1 posted by end of day
Socket Programming in C
Refs: Chapter 10, Appendix A
Socket Programming(1/2)
Sockets Programming Socket to me!.
Sockets Programming Socket to me!.
Internet Networking recitation #8
Outline Communications in Distributed Systems Socket Programming
Sockets.
Today’s topic: Basic TCP API
Socket Programming with UDP
Presentation transcript:

Socket Programming(2/2) 1

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

UDP Socket Programming 3

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

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

Comparisons of Transport Services 6

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 (  UDP-based Internet Services/Applications: DNS, SNMP, RIP, Internet Telephony 7

Comparison of UDP and TCP Segments 8

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

Categories of UDP Sockets’ Functions 10

Operations of UDP Client/Server 11

Elementary UDP Socket Functions 12

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

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

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

sockfd = socket(PF_INET, SOCK_DGM, 0) ; 16

sockfd = socket(PF_INET, SOCK_DGM, 0) ; sockfd – socket descriptor (handler) integer -1 means that socket is creating failure 17

sockfd = socket(PF_INET, SOCK_DGM, 0) ; Parameter : domain Domain value: PF_INET – Internet Protocol version 4 PF_INET6 – Internet Protocol version 6 PF_LINK - Link Layer Interface … 18

sockfd = socket(PF_INET, SOCK_DGM, 0) ; Parameter : type type value : SOCK_STREAM - TCP SOCK_DGRAM - UDP SOCK_RAW - Raw Socket … 19

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

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

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

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length); Application Transport Process Socket UDPUDP 23

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length); Application Transport Process Socket UDPUDP PF_INET “ ” 1340 Service Addressing Information 24

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length); Application Transport Process Socket UDPUDP

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length); sockfd = socket(PF_INET, SOCK_DRGM, 0) 26

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

RetValue = bind(sockfd,(struct sockaddr *)&srvaddr,length); Length of srvaddr structure 28

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

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

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

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

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

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); Application Transport Process Socket UDPUDP 1340 olleHolleH Destination Addressing Information. PF_INET “ ”

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); Application Transport Process Socket UDPUDP 1340 olleHolleH 35

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); Application Transport Process Socket UDPUDP 1340 olleHolleH 36

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); Application Transport Process Socket UDPUDP 1340 olleHolleH 37

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); Application Transport Process Socket UDPUDP

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); sockfd : created by socket(PF_INET, SOCK_DGM, 0) ; 39

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); buffer : block data Example: strcpy(buffer, “Hello”) ; 40

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

RetValue = sendto(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &server,length); control information of sento() function Flag value normally is 0 42

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 ( ) sserver.sin_port  Destination Port (1690) 43

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

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

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

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

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

Application Transport Process Socket UDPUDP 1340 HelloHello RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); 49

Application Transport Process Socket UDPUDP 1340 HelloHello RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); 50

Application Transport Process Socket UDPUDP 1340 HelloHello Addressing Information.of Sending Host PF_INET “ ” 1340 RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); 51

Application Transport Process Socket UDPUDP 1340 HelloHello Addressing Information.of Sending Host PF_INET “ ” 1340 RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); 52

Application Transport Process Socket UDPUDP 1340 HelloHello Addressing Information of Source Host PF_INET “ ” 1340 RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); 53

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); sockfd : created by socket(PF_INET, SOCK_DGM, 0) ; 54

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); buffer: allocated space to receive incoming message 55

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); strlen(buffer) : size of allocated space 56

RetValue = recvfrom(sockfd,buffer, strlen(buffer),0, (struct sockaddr*) &peer,length); control information of recvfrom() function Flag value normally is 0 57

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 ( ) peer.sin_port  Source Port (1340) 58

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

Comparison of TCP and UDP Socket Data Sending and Receiving 60

61 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless

62 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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)

63 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

64 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

65 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

66 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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)

67 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

68 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

69 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

70 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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)

71 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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);

72 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

73 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

74 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

75 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

76 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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);

77 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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);

78 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

79 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

80 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

81 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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

82 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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);

83 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless TCP UDP Using the following operations, bind(), listen(), connect(), and accept(), to create a logical transport channel with specific addressing information between two hosts. clientserver

84 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless TCP UDP Using the following operations, bind(), listen(), connect(), and accept(), to create a logical transport channel with specific addressing information between two hosts. clientserver

85 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 clientserver

86 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 clientserver

87 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 clientserver

88 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 clientserver

89 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 clientserver

90 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 3865 (assigned by system) Local IP : Local Port: 1460 clientserver

91 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 clientserver

92 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 clientserver

93 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Local IP : Local Port: 3865 Local IP : Local Port: 1460 clientserver

94 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information

95 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information

96 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information Only use bind() to address service port, no other procedures to establish a logical transport channel with specific addressing information. The destination addressing information must be injected into the sendto() function

97 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information Only use bind() to address service port, no other procedures to establish a logical transport channel with specific addressing information. The destination addressing information must be injected into the sendto() function clientserver

98 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information Only use bind() to address service port, no other procedures to establish a logical transport channel with specific addressing information. The destination addressing information must be injected into the sendto() function clientserver Transport Application Transport Application

99 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information Only use bind() to address service port, no other procedures to establish a logical transport channel with specific addressing information. The destination addressing information must be injected into the sendto() function clientserver Transport Application Transport Application socket Local IP : Local Port: 1460

100 ProtocolTCPUDP Sending Messagesend()sendto() Receiving Messagerecv()recvfrom() Service Connection- Oriented Connectionless 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 Local IP : Local Port: 1460 Local IP : Local Port: 3865 Client IP : Client Port: 3865 Server IP : Server Port: 1460 clientserver Channel Addressing Information Only use bind() to address service port, no other procedures to establish a logical transport channel with specific addressing information. The destination addressing information must be injected into the sendto() function clientserver Transport Application Transport Application socket Local IP : Local Port: 1460 No Specific Channel Addressing Information

UDP Socket Release – close()  close - Close a file descriptor  int close(int fd);  fd: socket descriptor 101

RetValue = close(sockfd) ; 102

RetValue = close(sockfd) ; 103

RetValue = close(sockfd) ; returns zero on success. On error, -1 is returned 104

RetValue = close(sockfd) ; Application Transport Process Socket UDPUDP

RetValue = close(sockfd) ; Application Transport Process Socket 106

RetValue = close(sockfd) ; Application Transport Process 107

RetValue = close(sockfd) ; sockfd : created by socket(PF_INET, SOCK_DGM, 0) ; 108

Review of UDP Client/Server Operation 109

UDP ClientUDP Server 110

UDP ClientUDP Server Running Time 111

UDP ClientUDP Server Running Time 112

UDP ClientUDP Server socket() 113

UDP ClientUDP Server socket() bind() 114

UDP ClientUDP Server socket() bind() recvfrom() 115

UDP ClientUDP Server socket() bind() recvfrom() Blocking!! wait incomming userdatagram 116

UDP ClientUDP Server socket() bind() recvfrom() Blocking!! wait incomming userdatagram sendto() 117

UDP ClientUDP Server socket() bind() recvfrom() Blocking!! wait incomming userdatagram sendto() recvfrom() 118

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() 119

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() 120

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() 121

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() sendto() 122

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() sendto() 123

UDP ClientUDP Server socket() bind() recvfrom() sendto() recvfrom() sendto() close() Wait another UDP Client 124

UDP ClientUDP Server socket() bind() socket()recvfrom() 125

IPv6 Socket Programming 126

IPv6 Socket Programming 127

128

129

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

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

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

IPv4 Originating Defects  Variable Header Length  Option Fields  Cyclic Redundancy Check (CRC)  Overloading  Maximum Transmission Unit (MTU)  IP Packet Fragmentation/Resassembly 133

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

IPv4 and IPv6 Headers 135

ver Header Length Type of Service 16-bit Identifier Datagram Length Flags13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding 136

version Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address 137

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding 138

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Protocol Version 139

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Quality of Service 140

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Payload Length 141

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Lifetime of Packet 142

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Protocol Indicator 143

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Source Address 144

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Destination Address 145

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Header Checksum 146

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Datagram Fragmentation/Reassembly 147

ver Traffic Class Payload Length Flow Label Next Header Hop Limit 128-bit Source IP Address 128-bit Destination IP Address ver Header Length TOS 16-bit Identifier Datagram Length FLAGsFLAGs 13-bit Fragmentation Offset Time-to-Live Upper-Layer Protocol Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) + Padding Variable Header Length with Option Fields 148

IPv4 and IPv6 Socket Functions  IPv4 and IPv6 use the same socket functions  With Different Protocol Family and Socket Address Structure 149

IPv4 and IPv6 Socket Address Structures  Different Protocol Family  Different Addressing Length 150

socket() 151

socket() bind()connect() 152

socket() bind() listen()setsockopt() connect() 153

socket() bind() listen() accept() setsockopt() connect() close() 154

socket() bind() listen() accept() send() recv() setsockopt() connect() close() 155

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() 156

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() 157

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() 158

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() 159

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() IPv4 Address : IPv6 Address : fe80::20c:f1ff:fe28:2f15 sockaddr_in sockaddr_in6 160

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() IPv4 Address : IPv6 Address : fe80::20c:f1ff:fe28:2f15 sockaddr_in sockaddr_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

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() IPv4 Address : IPv6 Address : fe80::20c:f1ff:fe28:2f15 sockaddr_in sockaddr_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 ; } ; lengthAF_INET 16 bit Port # 32-bit IPv4 Address (unused) fixed-length (16 bytes) lengthAF_INET6 16 bit port # 32-bit Flow Label 128-bit IPv6 Address fixed-length (28 bytes) 32-bit Scope ID 162

socket() bind() listen() accept() send() recv() setsockopt() sendto() recvfrom() connect() close() IPv4 Address : IPv6 Address : fe80::20c:f1ff:fe28:2f15 sockaddr_in sockaddr_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 ; } ; lengthAF_INET 16 bit Port # 32-bit IPv4 Address (unused) fixed-length (16 bytes) lengthAF_INET6 16 bit port # 32-bit Flow Label 128-bit IPv6 Address fixed-length (28 bytes) 32-bit Scope ID 163

IPv4 and IPv6 Coexisting 164

IPv4 Client TCP IPv4 Datalink IPv4 Server TCP IPv4 Datalink Only IPv4 Protocol Stack 165

IPv4 Client TCP IPv4 Datalink IPv4 Server TCP IPv4 Datalink 166

IPv6 Client TCP IPv6 Datalink IPv6 Server TCP IPv6 Datalink Only IPv6 Protocol Stack 167

IPv6 Client TCP IPv6 Datalink IPv6 Server TCP IPv6 Datalink 168

IPv4/IPv6 Server TCP IPv4 Datalink IPv4/IPv6 Client TCP IPv4 Datalink IPv6 IPv4 mapped IPv6 Address 169

IPv4/IPv6 Server TCP IPv4 Datalink IPv4/IPv6 Client TCP IPv4 Datalink IPv6 IPv4 mapped IPv6 Address 170

Comparison of IPv4 and IPv6 Socket Functions 171

IPv4 Address Format  IPv4 Address Length : 32 bits (4 bytes)  “ ” – 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

cpinp int inet_aton(const char *cp, struct in_addr *inp); Converts the Internet host address cp from the standard numbers-and-dots notation into binary data inp and stores it in the structure that inp points to inet_aton() returns non-zero if the address is valid, zero if not. struct in_addr dest ; inet_aton(" ", &dest.sin_addr); int inet_aton() 173

cp in_addr_t inet_addr(const char *cp); cp Convert the Internet host address cp 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(“ ”); in_addr_t inet_addr() 174

char *inet_ntoa(struct in_addr in); Convert the Internet host address in given in network byte order to 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(" "); strcpy(ipstr, inet_ntoa(in)) ; char *inet_ntoa() 175

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

IPv6 Address Format  Conversion of Network Byte Address and Address String  Byte Manipulation Functions  int inet_pton()  const char *inet_ntop() 177

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); parametersafsrcdst IPv4AF_INETcharstruct in_addr{} ; IPv6AF_INET6charstruct in6_addr{} ; struct in_addr in4 ; struct in6_addr in6 ; inet_pton(AF_INET, " ", &in4); inet_pton(AF_INET6, “fe80:0000:0000:0000:0202:b3ff:fe1e:8329”, &in6) int inet_pton() 178

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. parametersafsrcdstcnt IPv4AF_INETstruct in_addr{} ;charINET_ADDRSTRLEN(14) IPv6AF_INET6struct in6_addr{} ;charINET6_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

Comparison of Socket Address Structures 180

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

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

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

IPv4/IPv6 TCP Operations 184

socket bind listen accept recv send socket connect send recv TCP Server TCP Client IPv6 IPv4 AF_INET AF_INET6 in_addr{} in6_addr{} sockaddr_in{} sockaddr_in6{} 185

IPv4/IPv6 UDP Operations 186

socket bind recvfrom sendto socket sendto recvfrom UDP Server UDP Client IPv6 IPv4 AF_INET AF_INET6 in_addr{} in6_addr{} sockaddr_in{} sockaddr_in6{} 187

Question 在 IPv4/IPv6 的程式設計,最主要的差異在於 (A). Socket Address Structure 與 Internet Address Format() (B). Socket 建立階段: socket(), bind(), listen(), accept() (C). Socket 資料送收階段: send()/recv(), sendto()/recvfrom() (D). 以上皆是 188