190 likes | 313 Views
Socket 基本觀念. outline. Socket introduction Network OSI layer How to do socket? example. Socket introduction.
E N D
outline • Socket introduction • Network OSI layer • How to do socket? • example
Socket introduction • 什麼是 SOCKET ? SOCKET是一組具體的UNIX系統呼叫,是 80 年代美國的研究單位, 研究在UNIX中接納TCP/IP軟體的問題,並使其亦適應於其它場合.所以研究者們創造一種新的通訊介面,盡可能使用現有的UNIX系統呼叫, 然後為支援那些不易被整合於現有函式庫的TCP/IP函數, 新定義了一些系統呼叫函數,這便是承接口介面( SOCKETINTERFACE )至今已被廣泛的認可與應用, 成為一種標準了.
Socket Pair • 讓我們了解一下什麼是 Socket Pair 。所謂 socket 就是一個‘ IP 位址’加上一個‘ TCP/UDP Port ’﹐代表了一個連線與哪台機器( IP 位址)﹑及與機器上那一隻程式( Port ) 相連的。我們同時也知道﹕一個連線必須有兩個端點﹕來源地( Source ) 和 目的地( Destination )。換句話說﹐我們一個連線就是與一對 socket 相連著﹕分別是 Source Socket ( Source Address & Source Port) 與 Destination Socket ( Destination Address & Destination Port ) ﹐合起來我們稱之為 Socket Pair ﹕
連線方向 A B • 我們已經知道 Socket Pair 事實上就是兩個 socket ﹕一個是 Source﹑另一個是 Destination。但﹐這是相對而言的﹐為什麼這麼說﹖ • 因為﹐我們要成功的建立一個 TCP/IP 連線﹐其連線必須是雙向的﹕假設連線是 A 與 B 之間的兩台機器。當封包從 A 送往 B 的時候﹐A 的 Scocket 是 Source Socket﹑而 B 則是 Destination Socket ﹔反過來﹐當封包從 B 送回 A 的時候﹐那麼 A 的 Socket 就變成 Destination﹑而 B 則變成 Source
Network OSI layer • Internet為全世界最廣為接受的網路協定,幾乎任何網路都支援Internet IP網 路層協定,舉凡Ethernet、Token Ring、FDDI、Serial Line的SLIP (Serial Line IP)、PPP (Point-To-Point) ,甚至IBM 的SNA網路、Digital 的DECNET網路 都訂定 有與IP網路層協定共通的網路傳輸協定 http://dns-learning.twnic.net.tw/internet/intro5.html
應用層 (Application Layer) • 各種網路應用如 telnet、Ftp、WWW、Email、News、BBS等。
傳輸層 (Transport Layer) • 負責網路連接之建立、分割/組合傳送訊息、提供使用節點間資料流量的控制、決定提供網路資料傳送的服務品質等。提供可靠、有效率的連接給網路應用節點使用。
網路層 (IP Network Layer) • 承接傳輸層傳送的封包,依所欲傳送的位址自動Route轉送路徑、轉換不同協定的封包格式、監控網路流量狀況,動態建構網路整體拓樸架構,動態提供最佳的Route資料傳送路徑。Internet網路層協定為 IP(Internet Protocol)。
鏈接層 (Network Access Layer) • 承接網路層傳送的封包,做更細的資料框(Frame)的切割/組合、檢出/更正錯誤的傳送資料、運用ACK 判斷資料的正常傳送與控制傳送速度,及負責傳送由0與 1組成的原始網路資料。
How to do socket? • 開啟 Socket介面 • Binding Socket地址 • Connection的建立 • 傳輸網路資料 • 關閉 Socket介面
server Client
開啟 Socket介面 • Socket 就如同傳輸管道的出入口,建立傳輸應用的兩端點須各自開啟一Socket,往後的資料傳送,均依賴 read(送入此Socket)或 write (由Socket讀出) 資料。需給AF_INET(socket family)、SOCK_STREAM (socket type)、protocoltype等參數。
Binding Socket地址 • Socket 出入口需Binding到TCP address,網路上的電腦主 機才可以依據使用者所指定的TCP address,建立資料傳送的通道。TCP address 包含IP address (如140.115.17.111) 及TCP Port number。我們熟悉的網路應用: telnet 140.115.17.111 23與ftp 140.115.17.111 21,均需依據所指定的 host IP與 Port,建立連接、傳輸資料
Connection的建立 • 電腦主機可以使用Binding TCP address後的Sock et,建立資 料傳送通道(圖二)。Server/Client 的傳輸模式,Server 端需呼叫accept() 功能,等待Client的連接建立要求。Client端則呼叫connect()功能,要求與Server主機建立連接通道。
傳輸網路資料 • Client與Server主機間成功地建立連接通道後。兩端均可藉由各自的Socket出入口,read 或write 資料到對方。
關閉 Socket介面 • 當應用程式不再使用Socket 出入口做資料傳送時 ,需關閉Socket
example: server主機執行命令例:serv & • sock = socket(AF_INET, SOCK_STREAM, 0); name.sin_family = AF_INET; name.sin_addr.s_addr = INADDR_ANY; name.sin_port = 5000; bind(sock,(struct sockaddr *)&name, sizeof (name) ); msgsock = accept(sock,(struct sockaddr *)0, (int *)0); rval = read(msgsock, buf, sizeof(buf)); printf("The Message is %s \\n",buf); ....... Close(msgsock); close(sock);
Client主機 執行命令例:clnt sparc105000 • sock = socket(AF_INET, SOCK_STREAM,0); server.sin_family = AF_INET; hp=gethostbyname(argv[1]); bcopy((char*)hp->h_addr, (char*) &server.sin_addr,hp->h_length); server.sin_port = 5000; connect(sock, (struct sockaddr*)&server, sizeof(server)) wrval = write(sock, "Hello!",6 ); close(sock);