Computer Network Programming Introduction. A Simple Daytime Client A Simple Daytime Server Error handling: wrapper functions Types of Networking APIs.

Slides:



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

1 生物計算期末作業 暨南大學資訊工程系 2003/05/13. 2 compare f1 f2  只比較兩個檔案 f1 與 f2 ,比完後將結果輸出。 compare directory  以兩兩比對的方式,比對一個目錄下所有檔案的相 似程度。  將相似度很高的檔案做成報表輸出,報表中至少要.
Elementary TCP Sockets Computer Networks Computer Networks Term B10 UNIX Network Programming Vol. 1, Second Ed. Stevens Chapter 4.
在 Ad-hoc 網路中實現點對 點發送訊息與廣播訊息. 檔案下載  範例程式可在下列網址取得  DEMO 程式可在下列網址取得
1 Web of Science 利用指引 單元二 瀏覽與處理查詢結果. 2 瀏覽檢索結果 查出的結果,預設以時間排列, 使用者可改變結果的排列方式: 還可以依被引用次數、相關度、 第一作者、刊名、出版年等排序 回到前先查的結果畫面 點選想看資料的完整書目 本館訂購範圍的期刊 全文,便可直接連結.
Networks: TCP/IP Socket Calls1 Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
1 實驗二 : SIP User Mobility 實驗目的 藉由 Registra 和 Redirect Server 的設計,深入瞭解 SIP 的運 作及訊息格式。 實作部分 ( 1 )實作一個 Registrar 來接收 SIP REGISTER ,而且 要將 REGISTER 中 Contact.
Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
第 5 章 深入 Response 物件 製作. 網頁的轉向與強制輸出 - 讓網頁轉彎的 Redirect 敘述 運用 Response 物件的 Redirect 方法,將瀏覽器顯 示的網頁,導向至其他網頁,語法如下: Response.Redirect 網頁路徑與名稱 此網頁路徑與名稱  若是導向到同一台.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
Sockets Programming Introduction © Dr. Ayman Abdel-Hamid, CS4254 Spring CS4254 Computer Network Architecture and Programming Dr. Ayman A. Abdel-Hamid.
Tutorial 8 Socket Programming
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
TDC561 Network Programming Camelia Zlatea, PhD Week 2 – part II: Socket Application Programming Interface.
國立聯合大學 資訊管理學系 陳士杰老師 SQL*Plus 與 iSQL*Plus 簡介. 國立聯合大學 資訊管理學系 資料庫系統課程 ( 陳士杰 ) 2 啟動 SQL*Plus 與 iSQL*Plus 方式 Windows 平台.
從此處輸入帳號密碼登入到管理頁面. 點選進到檔案管理 點選「上傳檔案」上傳資料 點選瀏覽選擇電腦裡的檔案 可選擇公開或不公開 為平台上的資料夾 此處為檔案分類,可顯示在展示頁面上,若要參加 MY EG 競賽,做品一律上傳到 “ 98 MY EG Contest ” 點選此處確定上傳檔案.
資料結構實習-一 參數傳遞.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
Management Abstracts Retrieval System; MARS 檢索操作.
資料結構實習-二.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
網路介紹及其運用 講師陳炯勳. 5-2 IP 協定 ( 一 ) IP 協定運作 (1) – 網路成員:主機 (Host) 與路由器 (Router) – 路由表 – 電報傳輸運作.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
Protocol Programs that communicate across a network must agree on a protocol on how they will communicate High-level decisions must be made on which program.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
OmniFile Full Text 系列資料庫 個人化服務設定步驟. 此相關資料庫之個人化服 務只提供類似專題選粹的 服務,然無提供 mail 通知的 服務,讀者可建立個人 ID , 並儲存檢索策略,日後需 再進入該資料庫,查詢檢 索策略之新進文章。 導航目次 個人化服務說明 個人帳號密碼申請 個人化服務設定.
Yu-Chi Lai Lecture 3 Network Programming CS 640: Computer Networking.
1 Tutorial on Socket Programming Computer Networks - CSC 458 Department of Computer Science Yukun Zhu (Slides are mainly from Monia Ghobadi, and Amin Tootoonchian,
Basic Socket Programming TCP/IP overview. TCP interface Reference: –UNIX Network Programming, by Richard Stevens. –UNIX man page.
Ashutosh Shukla Lecture 3 Network Programming CS 640: Computer Networking.
Elementary UDP Sockets© Dr. Ayman Abdel-Hamid, CS4254 Spring CS4254 Computer Network Architecture and Programming Dr. Ayman A. Abdel-Hamid Computer.
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.
Zhu Reference: Daniel Spangenberger Computer Networks, Fall 2007 PPT-4 Socket Programming.
CS345 Operating Systems Φροντιστήριο Άσκησης 2. Inter-process communication Exchange data among processes Methods –Signal –Pipe –Sockets.
UNIX Network Programming1 UNIX Network Programming 2nd Edition.
Introduction to Socket Programming Advisor: Quincy Wu Speaker: Kuan-Ta Lu Date: Nov. 25, 2010.
Sirak Kaewjamnong Computer Network Systems
Ports Port - A 16-bit number that identifies the application process that receives an incoming message. Reserved ports or well-known ports (0 to 1023)
1 Socket Programming r What is a socket? r Using sockets m Types (Protocols) m Associated functions m Styles m We will look at using sockets in C.
Networking Tutorial Special Interest Group for Software Engineering Luke Rajlich.
Introduction to Socket
Introduction A Simple Daytime Client A Simple Daytime Server
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.
CSCI 330 UNIX and Network Programming Unit XIV: User Datagram Protocol.
回到第一頁 Client/sever model n Client asks (request) – server provides (response) n Typically: single server - multiple clients n The server does not need.
1 Spring Semester 2008, Dept. of Computer Science, Technion Internet Networking recitation #7 Socket Programming.
Lab 1 Introduction MMLAB. Environment Install Linux OS in a computer( VirtualBox or Vmware or Native) It’s all up to you for selecting Ubuntu Server or.
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.
1 School of Computing Science Simon Fraser University CMPT 471: Computer Networking II Introduction Instructor: Dr. Mohamed Hefeeda.
Read: Chapters 1,2, 3, 4 Communications Client Server Ex: TCP/IP
Elementary UDP Sockets
Chapter4 Elementary TCP Socket
CSCD433 Advanced Networks Spring 2016 Lecture 16a
Transport layer API: Socket Programming
תקשורת ומחשוב תרגול 3-5 סוקטים ב-C.
Introduction to Socket Programming
Elementary UDP Sockets connectionless, unreliable, datagram
Socket Programming(1/2)
Internet Networking recitation #8
Presentation transcript:

Computer Network Programming Introduction

A Simple Daytime Client A Simple Daytime Server Error handling: wrapper functions Types of Networking APIs BSD networking history Discover details of your local network

Client-Server Model Web browser and server FTP client and server Telnet client and server

The Client/Server Model

Client/Server on an LAN

Client/Server via a WAN

OSI vs. Internet Protocol Layers

Protocol Data and Headers

Socket API Location in OS

OSI and TCP/IP Model

Sockets process sends/receives messages to/from its socket socket analogous to door – sending process shoves message out door – transport infrastructure brings message to the door at receiving process Socket API: (1) choice of transport protocol; (2) ability to fix many parameters

A Daytime client/server using socket API

Connectionless: Functions Used

Connection-oriented:Functions Used 14

TCP Client/Server Socket Functions 15

UDP Client/Server Socket Functions 16

Five Steps to Create a Simple Daytime Client 1.Create TCP socket: get a file descriptor 2. Prepare server address structure: filling IP address and port number 3. Connect to the server: bind the file descriptor with the remote server 4. Read/write from/to server 5. Close socket

TCP client/server connection sequence

Three-Way Handshake of TCP

intro/daytimetcpcli.c (1/2) #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: a.out "); if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) err_sys("socket error");

Command-Line Arguments int argc –Number of arguments passed char *argv[] –Array of strings –Has names of arguments in order argv[ 0 ] is first argument Example: $ mycopy input output –argc: 3 –argv[ 0 ]: “mycopy" –argv[ 1 ]: "input" –argv[ 2 ]: "output" int main(int argc, char *argv[])

Step 1: Create A Socket Call to the function socket() creates a transport control block (hidden in kernel), and returns a reference to it (integer used as index) int sockfd; … sockfd = socket(AF_INET, SOCK_STREAM, 0);

Parameters of the socket Call int socket(int domain, int type, int protocol); returns a socket descriptor (or negative value on errors)

bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); /* daytime server */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) err_quit("inet_pton error for %s", argv[1]); if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0) err_sys("connect error"); while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; /* null terminate */ if (fputs(recvline, stdout) == EOF) err_sys("fputs error"); } if (n <0 ) err_sys("read error"); exit(0); } intro/daytimetcpcli.c (2/2)

How to identify clients to accept, and servers to contact? Machine?? –by its IP address (e.g., ) Application/service/program?? –by (IP address and) port number –standard applications have own, “well- known”port numbers SSH: 22 Mail: 25 Web: 80 Look in /etc/services for more (for Unix OS)

Using Ports to Identify Services

Port Numbers A (protocol) port is an abstraction used by TCP/UDP to distinguish applications on a given host –A port is identified by a 16-bit integer known as the port number Three ranges of port numbers : –Well-known ports –Registered ports –Dynamic ports

Well-known Ports Port numbers ranging from 0 to 1,023 –A set of pre-assigned port numbers for specific uses Port numbers are managed by ICANN. –Short for the Internet Corporation for Assigned Names and Numbers (ICANN) –Used to be controlled solely by IANA (Internet Assigned Numbers Authority)

Some Well-known Ports

Registered Ports Port numbers ranging from 1,024 to 49,151 Not assigned or controlled by ICANN; however their uses need to be registered via an ICANN-accredited registrar to prevent duplications

Dynamic Ports Port numbers ranging from 49,152 to 65,535 Neither assigned or registered. They can be used by anyone –These are ephemeral ports –Also known as private ports

Specifying Server’s IP Address and Port Number Filling in structure sockaddr_in struct sockaddr_in { unsigned short sin_family; /* address family (always AF_INET) */ unsigned short sin_port; /* port num in network byte order */ struct in_addr sin_addr; /* IP addr in network byte order */ unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) */ }; Client 程式須在此結構的欄位中填入 server 的 IP address 和 port number

Step 2-1: Clear the Structure struct sockaddr_in servaddr; … bzero(&servaddr, sizeof(servaddr)); bzero 從位址 &servaddr 處開始將 sizeof(servaddr) 位元組的空間清為 0 亦可使用標準庫存函式 memset 或其它方法 memset(&servaddr,0x0,sizeof(servaddr));

Step 2-2: Set IP Addr And Port servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13);/* port no=daytime server */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) err_quit("inet_pton error for %s", argv[1]); htons 將整數轉為 network byte order inet_pton 將位址字串轉換為內部儲存格式 ( 傳回負值表轉換失敗 )

Network-byte ordering Two ways to store 16-bit/32-bit integers –Little-endian byte order (e.g. Intel) –Big-endian byte order (E.g. Sparc)

Byte Order: IP address example IPv4 host address: represents a 32-bit address –written on paper (”dotted decimal notation”): –binary in bits: –hexadecimal in bytes: 0x81 0xf0 0x47 0x8b Network byte order uses big-endian ordering Little-endian: –one 4 byte int on x86, StrongARM, XScale, …: Big-endian: –one 4 byte int on PowerPC, POWER, Sparc, …:

Network-byte ordering (cont.) How do two machines with different byte-orders communicate? –Using network byte-order –Network byte-order = big-endian order Conversion macros ( ) –uint16_t htons (uint16_t n) –uint32_t htonl (uint32_t n) –uint16_t ntohs (uint16_t n) –uint32_t ntohl (uint32_t n) network to host conversion (s: short; l: long host to network conversion (s: short; l: long)

Function inet_pton() inet_pton() is new for IPv6 and may not exist yet ( 現在的 Linux 上沒問題 ). Oldest: serveraddr.sin_addr.s_addr = inet_addr(“ ”); Newer: inet_aton(“ ”, &serveraddr.sin_addr); 比 inet_pton 少一個參數 ( 第一個 AF_INET)

Step 3: Connect to the Server int connect(int sockfd, struct sockaddr_in *serv_addr, int addrlen); used by TCP client only sockfd - socket descriptor (returned from socket()) serv_addr: socket address, struct sockaddr_in is used addrlen := sizeof(struct sockaddr_in) 傳回負值表連線建立失敗 ( 如 server 不回應 )

Step 4: Read/Write from/to Server while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; /* null terminate */ if (fputs(recvline, stdout) == EOF) err_sys("fputs error"); } if (n < 0) err_sys("read error"); 使用 read 讀取從 server 送過來的資料,並用 fputs 輸 出到螢幕上 (client 並沒有送資料到 server)

read Function int read(int sockfd, char *buf, int maxlen); sockfd - socket descriptor (returned from socket()) buf: buffer (in your program) to store received data maxlen: maximum number of bytes to receive Returns: # of bytes received (<=maxlen) if OK, 0 if connection has been gracefully closed, negative number on error

關於使用 read 讀取資料 從 server 送過來的 data 是先放 在位於 kernel 的 socket receive buffer client 應用程式呼叫 read() 將此 buffer 的資料取回放於自己程式 的 buffer recvline 如 socket receive buffer 中沒有 資料,則 read 呼叫會被 block ( 暫時無法 return) application buffer Socket receive buffer Read data application user process Kernel TCP IP Input queue datalink recvline

fputs 與 err_sys fputs 是 C 的標準庫存函數,功能是將字串 str 寫到 file pointer *stream 中 成功傳回非負整數值;否則傳回 EOF stdout: File pointer for standard output stream. Automatically opened when program execution begins. err_sys 是作者自行定義的函數 ( 需先 include “unp.h” 方可使用 ) int fputs( const char *str, FILE *stream );

Test the Program 從課程網頁下載原始程式檔 依課程網頁的說明解壓縮、設定、及編譯 程式 若可出現類似下列執行結果即表示成功 ws1 [unpv12e/intro]%./daytimetcpcli Mon Mar 5 15:36: ws1 [unpv12e/intro]% 程式的 output 本機

關於程式執行 “./” 表示執行目前這個目錄中的 … 測試時本機必須有執行 Daytime server 。有 些系統如 Ubuntu 預設沒有 Daytime server , 則必須先啟動 Daytime server Daytime server 的程式碼稍後介紹

Error Handling: Wrappers /* include Socket */ int Socket(int family, int type, int protocol) { int n; if ( (n = socket(family, type, protocol)) < 0) err_sys("socket error"); return(n); }/ * end Socket */ lib/wrapsock.c 將函數傳回值的檢查 包裝在以大寫字母開 頭的同名函數中 大寫

intro/daytimetcpsrv.c (1/2) #include"unp.h" #include int main(int argc, char **argv) { int listenfd, connfd; struct sockaddr_in servaddr; char buff[MAXLINE]; time_t ticks; listenfd = Socket(AF_INET, SOCK_STREAM, 0);

bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family= AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port= htons(13); /* daytime server */ Bind(listenfd, (SA *) &servaddr, sizeof(servaddr)); Listen(listenfd, LISTENQ); for ( ; ; ) { connfd = Accept(listenfd, (SA *) NULL, NULL); ticks = time(NULL); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); Write(connfd, buff, strlen(buff)); Close(connfd); } intro/daytimetcpsrv.c 大寫

bind Function sockfd: Descriptor identifying an unbound socket. (returned by the socket function.) name: A pointer to a protocol-specific address namelen: Length of the value in the name parameter, in bytes. returns: 0 if OK, negative number on error int bind(int sockfd, const struct sockaddr_in *name, int namelen );

listen Function sockfd: Descriptor identifying a bound socket. (returned by the socket function.) backlog: how many connections we want to queue int listen(int sockfd, int backlog);

Problems with the the Simple Server Protocol dependency on IPv4 Iterative server: no overlap of service times of different clients ( 一次只能服務一個 client) Need for concurrent server: fork, prefork, or thread Need for daemon: background, unattached to a terminal

Types of Networking APIs TCP socket UDP socket raw socket over IP (bypass TCP/UDP) datalink (bypass IP) –BPF (BSD Packet Filter) –DLPI (SVR4 Data Link Provider Interface)

Some Relevant Socket System Calls and Header Files int socket(int family, int type, int protocol); int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); int listen(int sockfd, int backlog); int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *cliaddrlen); int connect(int sockfd, struct sockaddr *servaddr, socklen_t *servaddrlen); ssize_t recvfrom(int sockfd, void *buff, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); ssize_t sendto(int sockfd, void *msg, size_t len, int flags, struct sockaddr *to, socklen_t tolen); struct hostent gethostbyname(const char *name); int shutdown(int sockfd, int howto); 53