Roskilde University - Department of Computer Science E-mail: ncjuul@it-c.dk ncjuul@ruc.dk ncjuul@diku.dk Internet Applications & Socket Programming Niels Christian Juul ncjuul@acm.org 5 th lecture on Networks & Protocols 2: Application Layer 1 Undervisere Niels Christian Juul Lektor i datalogi ved Datalogi, RUC (tidligere HHK) PhD i datalogi (distribueret GC), DIKU ncjuul@acm.org http://www.dat.ruc.dk/~ncjuul Eric Jul Professor i datalogi, DistLab, DIKU PhD i datalogi (Emerald), UW eric@diku.dk http://www.diku.dk/~eric 2: Application Layer 2 Copyright by Kurose & Ross & Juul 1
5 th Lecture on Networks. Chapter 2.4-2.8: Application Layer Examples specific protocols: smtp (pop-3) DNS programming network applications socket programming Java & C & C++ 2: Application Layer 3 World Wide Web Andre services gopher ftp WWW Client HTML fremviser URL adresse HTTP Server HTTP transport af forespørgsel og svar CGI CGI programmer 2: Application Layer 4 Copyright by Kurose & Ross & Juul 2
ISO-OSI: Model for datanet 7 Anvendelseslaget 6 Repræsentationslaget 5 Sessionslaget 4 Transportlaget 3 Netværkslaget 2 Forbindelseslaget 1 Det fysisk lag TCP IP HTTP request (Ex.: Get index.html) HTTP reply (Ex.: text/html.) Rutning IP IP Ethernet TokenRing TCP IP 2: Application Layer 5 Electronic Mail Three major components: user agents mail servers simple mail transfer protocol: smtp User Agent a.k.a. mail reader composing, editing, reading mail messages e.g., Eudora, Outlook, elm, Netscape Messenger outgoing, incoming messages stored on server user agent mail server SMTP mail server user agent SMTP SMTP user agent outgoing message queue mail server user mailbox user agent user agent user agent 2: Application Layer 6 Copyright by Kurose & Ross & Juul 3
Electronic Mail: mail servers Mail Servers mailbox contains incoming messages (yet to be read) for user message queue of outgoing (to be sent) mail messages smtp protocol between mail servers to send email messages client : sending mail server server : receiving mail server user agent mail server SMTP mail server user agent SMTP SMTP user agent mail server user agent user agent user agent 2: Application Layer 7 Client / Server The role of clients and servers in distributed systems: Server: waits for requests, Calculates, and returns an answer Client: issues requests and waits to receive an answer. Dual-roles Multiple copies of either. 2: Application Layer 8 Copyright by Kurose & Ross & Juul 4
Electronic Mail: smtp [RFC 821] uses tcp to reliably transfer email msg from client to server, port 25 direct transfer: sending server to receiving server three phases of transfer handshaking (greeting) transfer of messages closure command/response interaction commands: ASCII text response: status code and phrase messages must be in 7-bit ASCII 2: Application Layer 9 Sample smtp interaction S: 220 hamburger.edu C: HELO crepes.fr S: 250 Hello crepes.fr, pleased to meet you C: MAIL FROM: <alice@crepes.fr> S: 250 alice@crepes.fr... Sender ok C: RCPT TO: <bob@hamburger.edu> S: 250 bob@hamburger.edu... Recipient ok C: DATA S: 354 Enter mail, end with "." on a line by itself C: Do you like ketchup? C: How about pickles? C:. S: 250 Message accepted for delivery C: QUIT S: 221 hamburger.edu closing connection 2: Application Layer 10 Copyright by Kurose & Ross & Juul 5
try smtp interaction for yourself: telnet servername 25 see 220 reply from server enter HELO, MAIL FROM, RCPT TO, DATA, QUIT commands above lets you send email without using email client (reader) BUT Remember to enable local echo in properties of the telnet client, and No misspelling (backspace/del does not delete) 2: Application Layer 11 Telnet som Client Telnet til wellknown services på server Default: telnet til port 23 som giver en login Også telnet til andre portnumre f.x. telnet smtp.it-c.dk 25 Port 25 er SMTP (e-mail service) SMTP dialog foregår i læsbar skrift 2: Application Layer 12 Copyright by Kurose & Ross & Juul 6
SMTP kommando syntax HELO <SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF> RCPT <SP> TO:<forward-path> <CRLF> DATA <CRLF> RSET <CRLF> SEND <SP> FROM:<reverse-path> <CRLF> VRFY <SP> <string> <CRLF> EXPN <SP> <string> <CRLF> HELP [<SP> <string>] <CRLF> NOOP <CRLF> 2: Application Layer 13 Moralsk pegefinger Kendskab til SMTP gør det rimeligt nemt at sende anonymt e-mail Det er naturligvis ikke etisk ansvarligt at gøre det udover interne eksperimenter i gruppen Spørgsmål til de uansvarlige: Spørgsmål til de uansvarlige: Kan modtageren opdage det? Kan Politiet opklare hvem der sendte det? 2: Application Layer 14 Copyright by Kurose & Ross & Juul 7
smtp: final words smtp uses persistent connections smtp requires that message (header & body) be in 7-bit ascii certain character strings are not permitted in message (e.g., CRLF.CRLF). Thus message has to be encoded (usually into either base-64 or quoted printable) smtp server uses CRLF.CRLF to determine end of message Comparison with http http: pull email: push both have ASCII command/response interaction, status codes http: each object is encapsulated in its own response message smtp: multiple objects message sent in a multipart message 2: Application Layer 15 Protocols A specification of roles and interaction Use-cases / usage patterns Content specification RFCs define Software survive Darwinistic Internet 2: Application Layer 16 Copyright by Kurose & Ross & Juul 8
Mail message format smtp: protocol for exchanging email msgs RFC 822: standard for text message format: header lines, e.g., To: From: Subject: different from smtp commands! body the message, ASCII characters only header body blank line 2: Application Layer 17 Message format: multimedia extensions MIME: multimedia mail extension, RFC 2045, 2056 additional lines in msg header declare MIME content type MIME version method used to encode data multimedia data type, subtype, parameter declaration encoded data From: alice@crepes.fr To: bob@hamburger.edu Subject: Picture of yummy crepe. MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data.........base64 encoded data 2: Application Layer 18 Copyright by Kurose & Ross & Juul 9
MIME types Content-Type: type/subtype; parameters Text example subtypes: plain, html Video example subtypes: mpeg, quicktime Image example subtypes: jpeg, gif Audio exampe subtypes: basic (8-bit mu-law encoded), 32kadpcm (32 kbps coding) Application other data that must be processed by reader before viewable example subtypes: msword, octet-stream 2: Application Layer 19 Multipart Type From: alice@crepes.fr To: bob@hamburger.edu Subject: Picture of yummy crepe. MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=98766789 --98766789 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Dear Bob, Please find a picture of a crepe. --98766789 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data.........base64 encoded data --98766789-- 2: Application Layer 20 Copyright by Kurose & Ross & Juul 10
Mail access protocols SMTP SMTP POP3 or user agent IMAP user agent sender s mail server receiver s mail server SMTP: delivery/storage to receiver s server Mail access protocol: retrieval from server POP: Post Office Protocol [RFC 1939] authorization (agent <-->server) and download IMAP: Internet Mail Access Protocol [RFC 1730] more features (more complex) manipulation of stored msgs on server HTTP: Hotmail, Yahoo! Mail, etc. 2: Application Layer 21 POP3 protocol authorization phase client commands: user: declare username pass: password server responses +OK -ERR transaction phase, client: list: list message numbers retr: retrieve message by number dele: delete quit S: +OK POP3 server ready C: user alice S: +OK C: pass hungry S: +OK user successfully logged on C: list S: 1 498 S: 2 912 S:. C: retr 1 S: <message 1 contents> S:. C: dele 1 C: retr 2 S: <message 1 contents> S:. C: dele 2 C: quit S: +OK POP3 server signing off 2: Application Layer 22 Copyright by Kurose & Ross & Juul 11
Domain Name (adresering) IP-numbers are hard to remember DNS knows about the IP-addresse Hierarcy: Ex. www.it-c.dk dk it-c linux linux.it-c.dk www www.it-c.dk 2: Application Layer 23 /etc/hosts 127.0.0.1 localhost # # # Niels Brock # 130.226.238.2 fiol.nbrock.dk fiol 130.226.238.54 wundee duck 130.226.238.224 kultux 130.226.238.217 elinux 130.226.238.248 linux.nbrock.dk linux www www.nbrock.dk 130.226.238.243 novell1 # # Host Database # 129.142.6.64 danpost.uni-c.dk # # NCJuul local network # # 192.168.11.0 ncjuul_lan 192.168.11.1 mufasa router www test1 n001.ncjuul.dk 192.168.11.2 test2 n002.ncjuul.dk 192.168.11.3 test3 n003.ncjuul.dk 192.168.11.4 test4 n004.ncjuul.dk 192.168.11.5 test5 n005.ncjuul.dk 2: Application Layer 24 Copyright by Kurose & Ross & Juul 12
DNS: Domain Name System People: many identifiers: SSN, name, Passport # Internet hosts, routers: IP address (32 bit) - used for addressing datagrams name, e.g., gaia.cs.umass.edu - used by humans Q: map between IP addresses and name? Domain Name System: distributed database implemented in hierarchy of many name servers application-layer protocol host, routers, name servers to communicate to resolve names (address/name translation) note: core Internet function implemented as application-layer protocol complexity at network s edge 2: Application Layer 25 DNS name servers Why not centralize DNS? single point of failure traffic volume distant centralized database maintenance doesn t scale! no server has all nameto-ip address mappings local name servers: each ISP, company has local (default) name server host DNS query first goes to local name server authoritative name server: for a host: stores that host s IP address, name can perform name/address translation for that host s name 2: Application Layer 26 Copyright by Kurose & Ross & Juul 13
DNS: Root name servers contacted by local name server that can not resolve name root name server: contacts authoritative name server if name mapping not known gets mapping returns mapping to local name server ~ dozen root name servers worldwide 2: Application Layer 27 Simple DNS example root name server host surf.eurecom.fr wants IP address of gaia.cs.umass.edu 1. Contacts its local DNS server, dns.eurecom.fr 2. dns.eurecom.fr contacts root name server, if necessary 3. root name server contacts authoritative name server, dns.umass.edu, if necessary local name server dns.eurecom.fr 1 2 6 requesting host surf.eurecom.fr 5 3 4 authorititive name server dns.umass.edu gaia.cs.umass.edu 2: Application Layer 28 Copyright by Kurose & Ross & Juul 14
DNS example root name server Root name server: may not know authoratiative name server may know intermediate name server: who to contact to find authoritative name server local name server dns.eurecom.fr 1 2 8 requesting host surf.eurecom.fr 7 3 6 intermediate name server dns.umass.edu 4 5 authoritative name server dns.cs.umass.edu gaia.cs.umass.edu 2: Application Layer 29 DNS: iterated queries root name server recursive query: puts burden of name resolution on contacted name server heavy load? iterated query: contacted server replies with name of server to contact I don t know this name, but ask this server local name server dns.eurecom.fr 1 2 8 requesting host surf.eurecom.fr 3 4 7 iterated query intermediate name server dns.umass.edu 5 6 authoritative name server dns.cs.umass.edu gaia.cs.umass.edu 2: Application Layer 30 Copyright by Kurose & Ross & Juul 15
DNS: caching and updating records once (any) name server learns mapping, it caches mapping cache entries timeout (disappear) after some time update/notify mechanisms under design by IETF RFC 2136 http://www.ietf.org/html.charters/dnsind-charter.html 2: Application Layer 31 DNS records DNS: distributed db storing resource records (RR) RR format: (name, value, type,ttl) Type=A name is hostname value is IP address Type=NS name is domain (e.g. foo.com) value is IP address of authoritative name server for this domain Type=CNAME name is an alias name for some cannonical (the real) name value is cannonical name Type=MX value is hostname of mailserver associated with name 2: Application Layer 32 Copyright by Kurose & Ross & Juul 16
DNS protocol, messages DNS protocol : query and repy messages, both with same message format msg header identification: 16 bit # for query, repy to query uses same # flags: query or reply recursion desired recursion available reply is authoritative 2: Application Layer 33 DNS protocol, messages Name, type fields for a query RRs in reponse to query records for authoritative servers additional helpful info that may be used 2: Application Layer 34 Copyright by Kurose & Ross & Juul 17
DNS lookup Unix: nslookup command Windows: ws-ping pro pack from www.ipswitch.com Look at any WinSock Client Programs, e.g. TUCOWS 2: Application Layer 35 Client-server paradigm Typical network app has two pieces: client and server Client: initiates contact with server ( speaks first ) typically requests service from server, for Web, client is implemented in browser; for e-mail, in mail reader Server: provides requested service to client e.g., Web server sends requested Web page, mail server delivers e-mail application transport network data link physical request reply application transport network data link physical 2: Application Layer 36 Copyright by Kurose & Ross & Juul 18
Application-layer protocols (cont). API: application programming interface defines interface between application and transport layer socket: Internet API two processes communicate by sending data into socket, reading data out of socket Q: how does a process identify the other process with which it wants to communicate? IP address of host running other process port number - allows receiving host to determine to which local process the message should be delivered lots more on this later. 2: Application Layer 37 Services provided by Internet transport protocols TCP service: connection-oriented: setup required between client, server reliable transport between sending and receiving process flow control: sender won t overwhelm receiver congestion control: throttle sender when network overloaded does not providing: timing, minimum bandwidth guarantees UDP service: unreliable data transfer between sending and receiving process does not provide: connection setup, reliability, flow control, congestion control, timing, or bandwidth guarantee Q: why bother? Why is there a UDP? 2: Application Layer 38 Copyright by Kurose & Ross & Juul 19
Socket programming Goal: learn how to build client/server application that communicate using sockets Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm two types of transport service via socket API: unreliable datagram reliable, byte streamoriented socket a host-local, applicationcreated/owned, OS-controlled interface (a door ) into which application process can both send and receive messages to/from another (remote or local) application process 2: Application Layer 39 Socket Applications - How? Network Application Programming Interface (API) Den tjeneste som operativsystemet tilbyder Grænsefladen mellem en applikation og netværksprotokol implementationerne Application Network API Protocol A Protocol B Protocol C 2: Application Layer 40 Copyright by Kurose & Ross & Juul 20
Socket API Generic Programming Interface Understøttelse af både besked-orienteret og forbindelses-orienteret kommunikation. Tilstræber at fungere som normal I/O (i den omfang det har mening) Operativsystem uafhængigt Oprindeligt udviklet til Unix-varianter fra Berkeley (BSD Unix) Understøtter flere protokoller (og protokol familier) 2: Application Layer 41 Socket-programming using TCP Socket: a door between application process and endend-transport protocol (UCP or TCP) TCP service: reliable transfer of bytes from one process to another controlled by application developer controlled by operating system process socket TCP with buffers, variables internet process socket TCP with buffers, variables controlled by application developer controlled by operating system host or server host or server 2: Application Layer 42 Copyright by Kurose & Ross & Juul 21
Socket programming with TCP Client must contact server server process must first be running server must have created socket (door) that welcomes client s contact Client contacts server by: creating client-local TCP socket specifying IP address, port number of server process When client creates socket: client TCP establishes connection to server TCP When contacted by client, server TCP creates new socket for server process to communicate with client allows server to talk with multiple clients application viewpoint TCP provides reliable, in-order transfer of bytes ( pipe ) between client and server 2: Application Layer 43 TCP Client/Server skabelon WSAStartup Client WSAStartup socket connect send recv closesocket WSACleanup socket bind listen accept recv send closesocket Server WSACleanup 2: Application Layer 44 Copyright by Kurose & Ross & Juul 22
Socket programming with TCP Example client-server app: client reads line from standard input (infromuser stream), sends to server via socket (outtoserver stream) server reads line from socket server converts line to uppercase, sends back to client client reads, prints modified line from socket (infromserver stream) Input stream: sequence of bytes into process Output stream: sequence of bytes out of process infromuser outtoserver client socket iinfromserver 2: Application Layer 45 Client/server socket interaction: TCP Server (running on hostid) Client create socket, port=x, for incoming request: welcomesocket = ServerSocket() wait for incoming connection request connectionsocket = welcomesocket.accept() read request from connectionsocket write reply to connectionsocket close connectionsocket TCP connection setup create socket, connect to hostid, port=x clientsocket = Socket() send request using clientsocket read reply from clientsocket close clientsocket 2: Application Layer 46 Copyright by Kurose & Ross & Juul 23
Example: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { Create input stream Create client socket, connect to server Create output stream attached to socket public static void main(string argv[]) throws Exception { String sentence; String modifiedsentence; BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); Socket clientsocket = new Socket("hostname", 6789); DataOutputStream outtoserver = new DataOutputStream(clientSocket.getOutputStream()); 2: Application Layer 47 Example: Java client (TCP), cont. Create input stream attached to socket Send line to server Read line from server BufferedReader infromserver = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = infromuser.readline(); outtoserver.writebytes(sentence + '\n'); modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); clientsocket.close(); } } 2: Application Layer 48 Copyright by Kurose & Ross & Juul 24
Example: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { Create welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket public static void main(string argv[]) throws Exception { String clientsentence; String capitalizedsentence; ServerSocket welcomesocket = new ServerSocket(6789); while(true) { Socket connectionsocket = welcomesocket.accept(); BufferedReader infromclient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 2: Application Layer 49 Example: Java server (TCP), cont Create output stream, attached to socket Read in line from socket Write out line to socket } } } DataOutputStream outtoclient = new DataOutputStream(connectionSocket.getOutputStream()); clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); End of while loop, loop back and wait for another client connection 2: Application Layer 50 Copyright by Kurose & Ross & Juul 25
Kommunikationsendepunkter Services: Service navne Portnumre Se filen: /etc/services Port < 1000 er wellknown services IP-adresser IP numre (dotted decimal) IP navne (domain name) Se filen: /etc/hosts eller kontakt den lokale DNS 2: Application Layer 51 Wellknown services & port no. # # services This file describes the various services that are # available from the TCP/IP subsystem. It should be # consulted instead of using the numbers in the ARPA # include files, or, worse, just guessing them. # # Version: @(#)/etc/services 2.00 04/30/93 # # Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> # tcpmux 1/tcp # rfc-1078 echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote chargen 19/tcp ttyatst source chargen 19/udp ttytst source 2: Application Layer 52 Copyright by Kurose & Ross & Juul 26
Wellknown services & port no. ftp-data 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location name 42/udp nameserver whois 43/tcp nicname # usually to sri-nic domain 53/tcp domain 53/udp mtp 57/tcp # deprecated bootps 67/udp # bootp server bootpc 68/udp # bootp client tftp 69/udp gopher 70/tcp # gopher server rje 77/tcp finger 79/tcp http 80/tcp # www is used by some broken www 80/tcp # progs, http is more correct link 87/tcp ttylink kerberos 88/udp kdc # Kerberos authentication--udp kerberos 88/tcp kdc # Kerberos authentication--tcp 2: Application Layer 53 Socket programming with UDP UDP: no connection between client and server no handshaking sender explicitly attaches IP address and port of destination server must extract IP address, port of sender from received datagram UDP: transmitted data may be received out of order, or lost application viewpoint UDP provides unreliable transfer of groups of bytes ( datagrams ) between client and server 2: Application Layer 54 Copyright by Kurose & Ross & Juul 27
Simpel UDP Client/Server skabelon Client WSAStartup socket sendto recvfrom WSAStartup socket bind recvfrom sendto Server WSACleanup WSACleanup 2: Application Layer 55 Client/server socket interaction: UDP Server (running on hostid) Client create socket, port=x, for incoming request: serversocket = DatagramSocket() read request from serversocket write reply to serversocket specifying client host address, port umber create socket, clientsocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientsocket read reply from clientsocket close clientsocket 2: Application Layer 56 Copyright by Kurose & Ross & Juul 28
Example: Java client (UDP) Create input stream Create client socket Translate hostname to IP address using DNS import java.io.*; import java.net.*; class UDPClient { public static void main(string args[]) throws Exception { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); 2: Application Layer 57 Example: Java client (UDP), cont. Create datagram with data-to-send, length, IP addr, port Send datagram to server Read datagram from server } DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 9876); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close(); } 2: Application Layer 58 Copyright by Kurose & Ross & Juul 29
Example: Java server (UDP) import java.io.*; import java.net.*; Create datagram socket at port 9876 Create space for received datagram Receive datagram class UDPServer { public static void main(string args[]) throws Exception { DatagramSocket serversocket = new DatagramSocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); 2: Application Layer 59 Example: Java server (UDP), cont Get IP addr port #, of sender String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); Create datagram to send to client Write out datagram to socket } } String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); } End of while loop, loop back and wait for another datagram 2: Application Layer 60 Copyright by Kurose & Ross & Juul 30
Echo Network Working Group Request for Comments: 862 J. Postel ISI May 1983 This RFC specifies a standard for the ARPA Internet community. Hosts on the ARPA Internet that choose to implement an Echo Protocol are expected to adopt and implement this standard. A very useful debugging and measurement tool is an echo service. An echo service simply sends back to the originating source any data it receives. UDP Based Echo Service Another echo service is defined as a datagram based application on UDP. A server listens for UDP datagrams on UDP port 7. When a datagram is received, the data from it is sent back in an answering datagram. 2: Application Layer 61 Echo server UDP Echo server skal gentage løkken: lytte på speciel port modtage en pakke finde den reelle længde på pakken og sende den retur 2: Application Layer 62 Copyright by Kurose & Ross & Juul 31
Simpel UDP Client/Server skabelon Client WSAStartup socket Dummy call connect send recv WSAStartup socket bind recvfrom sendto Server WSACleanup WSACleanup 2: Application Layer 63 Chapter 2: Summary Our study of network apps now complete! application service requirements: reliability, bandwidth, delay client-server paradigm Internet transport service model connection-oriented, reliable: TCP unreliable, datagrams: UDP specific protocols: http ftp smtp, pop3 dns socket programming client/server implementation using tcp, udp sockets 2: Application Layer 64 Copyright by Kurose & Ross & Juul 32
Chapter 2: Summary Most importantly: learned about protocols typical request/reply message exchange: client requests info or service server responds with data, status code message formats: headers: fields giving info about data data: info being communicated control vs. data msgs in-based, out-of-band centralized vs. decentralized stateless vs. stateful reliable vs. unreliable msg transfer complexity at network edge security: authentication 2: Application Layer 65 Socket API from C Library of procedures may be used from the C programming language. These are the underlying mechnism for the socket classes in both Java and C++ 2: Application Layer 66 Copyright by Kurose & Ross & Juul 33
accept() En TCP server afventer opkald på en passiveret socket med kaldet af accept: int accept(socket, remoteadr, addrlen) Efter listen() kaldes accept(), f.eks.: Opkalds newsock = accept(msock, Data socket Opkalds socket (struct sockaddr *)&fsin, &alen); hvor fsin er af typen struct sockaddr_in og alen er størrelsen af fsin strukturen 2: Application Layer 67 Unix Descriptor Table 0 1 2 3 4 Descriptor Table Data structure for file 0 Data structure for file 1 Data structure for file 2 2: Application Layer 68 Copyright by Kurose & Ross & Juul 34
Socket Descriptor Data Structure 0 1 2 3 4 Descriptor Table Family: PF_INET Service: SOCK_STREAM Local IP: 192.168.1.4 Remote IP: 123.45.6.78 Local Port: 2249 Remote Port: 3726 2: Application Layer 69 Generel socket adresse struct sockaddr { u_short sa_family; char sa_data[14]; }; sa_family angiver adresse typen sa_data angiver adressen (værdien) For Internet adresse familien: AF_INET består adressen af: 16 bit port nummer 32 bit IP adresse 2: Application Layer 70 Copyright by Kurose & Ross & Juul 35
sockaddr sockaddr_in sa_family AF_INET sin_port sin_addr sa_data sin_addr 2: Application Layer 71 TCP/IP Adresser Vi behøver ikke tage os af sockaddr fordi vi alligevel kun vil arbejde med Internet protokol familien Vi kan nøjes med at bruge sockaddr_in C funktionerne, som udgør socket API, forventer dog at blive kaldt med parametre af typen sockaddr Derfor anvender vi typecast (struct sockaddr*) foran pointer parametre af typen sockaddr_in 2: Application Layer 72 Copyright by Kurose & Ross & Juul 36
Oprettelsen af en socket int socket( int family,int type, int proto); family angiver protokol familien: PF_INET for TCP/IP type angiver hvilken type service der ønskes: SOCK_STREAM for TCP/IP SOCK_DGRAM for UDP/IP protocol angiver den specifikke protokol: dvs. valg mellem TCP og UDP normalt betyder 0 default (i forhold til type ) Protocol Protocol family family Internet: Internet: PF_INET PF_INET 2: Application Layer 73 socket() Systemkaldet socket() returnerer en socket descriptor (et heltal, -1 ved fejl) Returtype: SOCKET ligesom file descriptor socket() allokerer de nødvendige ressourcer for kommunikationens endepunkt men kaldet tager sig ikke af adressering af endepunkterne 2: Application Layer 74 Copyright by Kurose & Ross & Juul 37
Tildeling af adresse til socket Systemkaldet bind() bruges til at knytte en adresse til en eksisterende socket int bind(int sockfd, struct sockaddr *myaddr, int addrlen); Address Address family family Internet: Internet: AF_INET AF_INET bind returns 0 if successfull or -1 on error. 2: Application Layer 75 bind() kaldet bind() tildeler adressen angivet i sockaddr structure til socket descriptor. Hvis vi kalder bind() med en sockaddr_in structure bruges typecast : bind( mysock, (struct sockaddr*) &myaddr, sizeof(myaddr) ); 2: Application Layer 76 Copyright by Kurose & Ross & Juul 38
bind() eksempel int mysock; struct sockaddr_in myaddr; mysock = socket(pf_inet,sock_stream,0); myaddr.sin_family = AF_INET; myaddr.sin_port = htons( portnum ); myaddr.sin_addr = htonl( ipaddress); bind(mysock, &myaddr, sizeof(myaddr)); Protocol family Internet: PF_INET Address family Internet: AF_INET 2: Application Layer 77 Brug af bind() Der er brug for bind()således at: En server kan knytte sig til en kendt adresse (port nummer) En client kan knytte sig til en specifik port En client kan bede operativsystemet om at tildele sig et ledigt port nummer 2: Application Layer 78 Copyright by Kurose & Ross & Juul 39
Port nummer? Typisk har clients ikke brug for at kende det portnummer de er tilknyttet Bind() har mulighed for at tildele et ledig portnummer istedet for et angivet, ved at angive port 0: myaddr.port = htons(0); 2: Application Layer 79 Hvad er min IP adresse? Hvordan finder jeg ud af hvad min IP adresse er så jeg kan fortælle bind() det? Jeg kunne bruge et eller andet systemkald, men hvad hvis min maskine har flere IP adresser bundet til et eller flere netværkskort? Vi kan angive en speciel konstant som IP adresse, nemlig: INADDR_ANY så vil operativsystemet selv tage sig af at indsætte den rigtige adresse 2: Application Layer 80 Copyright by Kurose & Ross & Juul 40
listen() For en servers TCP socket bruges: int listen(socket, queuelength) til at passivere socket på server-siden indtil en client forbinder sig til den serveren venter i systemkaldet accept() på at dette sker Flere clients kan forsøge at forbinde sig samtidigt og bliver stillet i kø, dog max kølængde 2: Application Layer 81 accept() En TCP server afventer opkald på en passiveret socket med kaldet af accept: int accept(socket, remoteadr, addrlen) Efter listen() kaldes accept(), f.eks.: Opkalds newsock = accept(msock, Data socket Opkalds socket (struct sockaddr *)&fsin, &alen); hvor fsin er af typen struct sockaddr_in og alen er størrelsen af fsin strukturen 2: Application Layer 82 Copyright by Kurose & Ross & Juul 41