1 / 19

Socket 基本觀念

Socket 基本觀念. outline. Socket introduction Network OSI layer How to do socket? example. Socket introduction.

mala
Download Presentation

Socket 基本觀念

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Socket 基本觀念

  2. outline • Socket introduction • Network OSI layer • How to do socket? • example

  3. Socket introduction • 什麼是 SOCKET ? SOCKET是一組具體的UNIX系統呼叫,是 80 年代美國的研究單位, 研究在UNIX中接納TCP/IP軟體的問題,並使其亦適應於其它場合.所以研究者們創造一種新的通訊介面,盡可能使用現有的UNIX系統呼叫, 然後為支援那些不易被整合於現有函式庫的TCP/IP函數, 新定義了一些系統呼叫函數,這便是承接口介面( SOCKETINTERFACE )至今已被廣泛的認可與應用, 成為一種標準了.

  4. 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 ﹕

  5. 連線方向 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

  6. 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

  7. 應用層 (Application Layer) • 各種網路應用如 telnet、Ftp、WWW、Email、News、BBS等。

  8. 傳輸層 (Transport Layer) • 負責網路連接之建立、分割/組合傳送訊息、提供使用節點間資料流量的控制、決定提供網路資料傳送的服務品質等。提供可靠、有效率的連接給網路應用節點使用。

  9. 網路層 (IP Network Layer) • 承接傳輸層傳送的封包,依所欲傳送的位址自動Route轉送路徑、轉換不同協定的封包格式、監控網路流量狀況,動態建構網路整體拓樸架構,動態提供最佳的Route資料傳送路徑。Internet網路層協定為 IP(Internet Protocol)。

  10. 鏈接層 (Network Access Layer) • 承接網路層傳送的封包,做更細的資料框(Frame)的切割/組合、檢出/更正錯誤的傳送資料、運用ACK 判斷資料的正常傳送與控制傳送速度,及負責傳送由0與 1組成的原始網路資料。

  11. How to do socket? • 開啟 Socket介面 • Binding Socket地址 • Connection的建立 • 傳輸網路資料 • 關閉 Socket介面

  12. server Client

  13. 開啟 Socket介面 • Socket 就如同傳輸管道的出入口,建立傳輸應用的兩端點須各自開啟一Socket,往後的資料傳送,均依賴 read(送入此Socket)或 write (由Socket讀出) 資料。需給AF_INET(socket family)、SOCK_STREAM (socket type)、protocoltype等參數。

  14. 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,建立連接、傳輸資料

  15. Connection的建立 • 電腦主機可以使用Binding TCP address後的Sock et,建立資 料傳送通道(圖二)。Server/Client 的傳輸模式,Server 端需呼叫accept() 功能,等待Client的連接建立要求。Client端則呼叫connect()功能,要求與Server主機建立連接通道。

  16. 傳輸網路資料 • Client與Server主機間成功地建立連接通道後。兩端均可藉由各自的Socket出入口,read 或write 資料到對方。

  17. 關閉 Socket介面 • 當應用程式不再使用Socket 出入口做資料傳送時 ,需關閉Socket

  18. 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);

  19. 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);

More Related