版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
客戶服務(wù)器模式與套接子1第1頁,共64頁,2023年,2月20日,星期一第3.1節(jié)、客戶—服務(wù)器工作模式3.1.1C/S的基本概念3.1.2C/S關(guān)系與軟件特點3.1.3C/S工作過程與并發(fā)3.1.4協(xié)議端口號謝希仁教材1.6節(jié)2第2頁,共64頁,2023年,2月20日,星期一C/S模式部分的重點與難點1、C/S模式的基本概念2、C/S的工作過程,以及C/S軟件的各自特點3、**協(xié)議端口號及應(yīng)用4、插口地址概念重點理解:主要了解:1、熟知的協(xié)議端口號與使用2、互聯(lián)網(wǎng)C/S工作模式與TCP/IP的關(guān)系3、服務(wù)器并發(fā)處理3第3頁,共64頁,2023年,2月20日,星期一相互作用的客戶-服務(wù)器(Client/Server)模型在TCP/IP互聯(lián)網(wǎng)中,進(jìn)程間相互訪問的模式主要是客戶—服務(wù)器交互模式客戶和服務(wù)器分別是兩個應(yīng)用程序(進(jìn)程)??蛻粝蚍?wù)器發(fā)出服務(wù)請求,服務(wù)器做出響應(yīng)。服務(wù)器客戶互聯(lián)網(wǎng)進(jìn)程(Process)就是運行中的程序。解決具體應(yīng)用問題的邏輯處理和通信進(jìn)程總稱為“應(yīng)用進(jìn)程”。4第4頁,共64頁,2023年,2月20日,星期一為什么選擇客戶-服務(wù)器模式第一個原因:互聯(lián)網(wǎng)中資源、運算能力和信息不均等的現(xiàn)實。資源、運算能力不均:小到一個物理網(wǎng)絡(luò),往往是某些主機擁有大容量的外存,某些主機只有很少外存或沒有外存,有些主機擁有打印機,有些主機沒有;大到整個互聯(lián)網(wǎng),少數(shù)網(wǎng)點擁有超速運算能力,而大量網(wǎng)點由PC機構(gòu)成…….信息分布不均:比如名字信息、地址信息等。這些信息往往以數(shù)據(jù)庫形式存在于少數(shù)特權(quán)主機當(dāng)中,供局部或全局訪問。這些信息一般具有公用性,為了節(jié)約整個網(wǎng)絡(luò)的資源,沒有必要在每一臺機器上都維持一個拷貝。不均等現(xiàn)象不可避免,而客戶-服務(wù)器模式體現(xiàn)了這種現(xiàn)象并很好地適應(yīng)了這種現(xiàn)象。5第5頁,共64頁,2023年,2月20日,星期一第二個原因:是技術(shù)性的。
互聯(lián)網(wǎng)進(jìn)程通信與單機進(jìn)程通信不同:互聯(lián)網(wǎng)通信完全是異步的,無法知道哪個主機會在何時發(fā)起通信。因此,需要一種機制,為準(zhǔn)備通信的進(jìn)程之間建立聯(lián)系,為兩者的數(shù)據(jù)交換提供同步。
C/S模式是客觀現(xiàn)實與技術(shù)實現(xiàn)相結(jié)合的產(chǎn)物!首先,什么是早期單機應(yīng)用軟件的工作方式?和早期單機應(yīng)用軟件一般只和本機資源交互,包括通信串/并口。當(dāng)出現(xiàn)網(wǎng)絡(luò)應(yīng)用后,應(yīng)用軟件需要通過網(wǎng)絡(luò)訪問資源、交互信息,尋找一種基于網(wǎng)絡(luò)的信息交互/計算分布模式。6第6頁,共64頁,2023年,2月20日,星期一網(wǎng)絡(luò)中計算機進(jìn)程間通信同樣存在主叫和被叫,但沒有振鈴機制。通信進(jìn)程間收/發(fā)協(xié)調(diào)怎么辦?互聯(lián)網(wǎng)采用最簡單的約定方式—C/S模式電話通信的呼叫模式:主叫發(fā)起通信、被叫振鈴和提機、開始通信。振鈴機制實現(xiàn)依賴信令系統(tǒng)控制處理,協(xié)調(diào)雙方通信(收/發(fā))矛盾。在網(wǎng)絡(luò)環(huán)境下,許多問題的解決往往是通過位于不同主機中的多個進(jìn)程之間的通信和協(xié)同工作來完成的。網(wǎng)絡(luò)的進(jìn)程之間怎樣相互協(xié)同開始工作,為什么要C/S模式?7第7頁,共64頁,2023年,2月20日,星期一2000年前后,SIP協(xié)議的發(fā)展類似信令系統(tǒng)的互聯(lián)網(wǎng)會話(呼叫)系統(tǒng),可定義更豐富的會話模式。傳統(tǒng)TCP/IP網(wǎng)絡(luò)應(yīng)用程序使用客戶/服務(wù)器模式,但C/S不是所有應(yīng)用交互會話模式,如IP電話、視頻會議、多方游戲等。在客戶-服務(wù)器模式中,每次通信均由客戶進(jìn)程發(fā)起,服務(wù)器進(jìn)程從開機起就處于等待狀態(tài)。這可保證服務(wù)器隨時對客戶請求做出響應(yīng)8第8頁,共64頁,2023年,2月20日,星期一C/S模式是約定客戶請求(發(fā)起)通信、服務(wù)器響應(yīng)通信(提供特定的服務(wù)),基本可以理解為請求/應(yīng)答的分布計算(會話)模式?;ヂ?lián)網(wǎng)將網(wǎng)絡(luò)軟件分為客戶(client)、服務(wù)器(server),客戶和服務(wù)器都指通信中所涉及的兩個應(yīng)用進(jìn)程。即本質(zhì)是計算機軟件。9第9頁,共64頁,2023年,2月20日,星期一客戶軟件的特點在進(jìn)行通信時臨時成為客戶,但它也可在本地進(jìn)行其他的計算,提供用戶端基本應(yīng)用功能框架。被用戶調(diào)用,在用戶本地計算機上運行,在需要時主動向遠(yuǎn)地服務(wù)器發(fā)起通信??膳c多個服務(wù)器進(jìn)行通信。通常不需要特殊的硬件和很復(fù)雜的操作系統(tǒng)。
10第10頁,共64頁,2023年,2月20日,星期一服務(wù)器軟件的特點專門用來提供某種服務(wù)的程序,可同時處理多個遠(yuǎn)地或本地客戶的請求。在共享計算機上運行。當(dāng)系統(tǒng)啟動時即自動調(diào)用并一直不斷地運行著。被動等待并接受來自多個客戶的通信請求。一般需要強大的硬件和高級的操作系統(tǒng)支持。11第11頁,共64頁,2023年,2月20日,星期一兩個術(shù)語在C/S模式中:服務(wù)器:被動等待通信的程序。不是計算機。服務(wù)器級計算機:運行服務(wù)器軟件的功能強大的計算機。硬件廠商把具有高速CPU、大容量存儲器、功能強大的操作系統(tǒng)的計算機稱為服務(wù)器,其實應(yīng)該稱為服務(wù)器級計算機。12第12頁,共64頁,2023年,2月20日,星期一數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層①發(fā)起連接建立請求應(yīng)用層應(yīng)用層客戶服務(wù)器因特網(wǎng)②接受連接接受請求計算機A計算機B1C/S工作建立過程請求、應(yīng)答、數(shù)據(jù)交互,TCP/IP系統(tǒng)支持。C/S都需要TCP/IP系統(tǒng)支持C/S工作過程和并發(fā)13第13頁,共64頁,2023年,2月20日,星期一C/S模式的傳輸機制面向連接傳輸:使用面向連接的傳輸協(xié)議時,兩個應(yīng)用必須首先建立一個連接,然后在該連接上發(fā)送數(shù)據(jù)。無連接傳輸:應(yīng)用可以利用無連接接口在任何時間向任何目的發(fā)送消息。客戶和服務(wù)器在通信時,既可以使用面向連接傳輸協(xié)議,又可以使用無連接傳輸協(xié)議。當(dāng)使用面向連接傳輸時,客戶需要首先形成一個到特定服務(wù)器的連接,該連接在客戶發(fā)送請求和接收響應(yīng)的過程中保持不變。當(dāng)客戶完成對服務(wù)的使用時,必須關(guān)閉這一連接。14第14頁,共64頁,2023年,2月20日,星期一一臺計算機上可以運行多種服務(wù)器:1.充分利用硬件資源。硬件可以被多種服務(wù)所共享。減少系統(tǒng)管理負(fù)載。因為這種情況可以減少被管理的計算機系統(tǒng)的數(shù)量。如果對服務(wù)的需求比較低,那么把服務(wù)器合并到一臺計算機上能夠顯著地減少開銷,而且并不會明顯地降低性能。15第15頁,共64頁,2023年,2月20日,星期一2服務(wù)器多重服務(wù):單計算機可安裝多服務(wù)器軟件來提供多重服務(wù),在等待的時候不占用資源,但同時響應(yīng)需要系統(tǒng)較多資源支持?jǐn)?shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層應(yīng)用層應(yīng)用層應(yīng)用層計算機A計算機B計算機C客戶1服務(wù)器1服務(wù)器2客戶2因特網(wǎng)16第16頁,共64頁,2023年,2月20日,星期一并發(fā)性
—客戶-服務(wù)器交互模型的基礎(chǔ)并發(fā)服務(wù)器可以同時為多個客戶提供服務(wù),并不需要每個客戶等待前一個客戶的請求完成大多數(shù)并發(fā)服務(wù)器都是動態(tài)操作的。即只有當(dāng)請求到達(dá)時,服務(wù)器才會動態(tài)地為到來的請求創(chuàng)建一個新的線程。服務(wù)器程序由兩部分組成:主線程和服務(wù)線程。主線程:負(fù)責(zé)接收請求并為請求創(chuàng)建一個服務(wù)線程來處理請求。并使服務(wù)器保持活躍狀態(tài),主線程在創(chuàng)建處理請求的服務(wù)線程之后,會等待另一個請求的到來。服務(wù)線程:負(fù)責(zé)處理每個請求,然后終止。如果N個客戶同時請求一臺計算機上的給定服務(wù),則會有N+1個線程提供服務(wù)。主線程等待額外的請求,N個服務(wù)線程與每個客戶進(jìn)行交互在互聯(lián)網(wǎng)中,客戶發(fā)起請求完全是隨機的,很有可能出現(xiàn)多個請求同時到達(dá)服務(wù)器的情況。17第17頁,共64頁,2023年,2月20日,星期一數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層應(yīng)用層應(yīng)用層應(yīng)用層計算機A計算機B計算機C客戶1因特網(wǎng)客戶23服務(wù)器并發(fā):服務(wù)器1*副本一個服務(wù)器同時響應(yīng)多個請求,即服務(wù)器并發(fā)執(zhí)行是基本的,而不是逐個響應(yīng)。一個服務(wù)器軟件包括:接收請求、處理單個請求和生成新線程三部分;當(dāng)請求到達(dá)時,服務(wù)器將它交給一個控制線程(副本),和已有線程并發(fā)。服務(wù)器118第18頁,共64頁,2023年,2月20日,星期一復(fù)雜的C/S交互:實際大型網(wǎng)絡(luò)應(yīng)用S軟件系統(tǒng)中,C/S的交互可能是復(fù)雜的過程。1、客戶應(yīng)用不限制訪問一個服務(wù)器,客戶一個應(yīng)用可以成為多個不同服務(wù)器(可能不同計算機上)的客戶,要處理多個服務(wù)器通信。2、提供某種服務(wù)的服務(wù)器同時能成為另一個服務(wù)的客戶,如文件服務(wù)器在進(jìn)行文件服務(wù)處理時需要記錄時間,可能又要訪問時間服務(wù)器。3、可能發(fā)生服務(wù)器的循環(huán)依懶,在兩個服務(wù)器間,或多服務(wù)器之間的依懶環(huán)。19第19頁,共64頁,2023年,2月20日,星期一數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層N個服務(wù)器因特網(wǎng)計算機A計算機BN個客戶協(xié)議端口號C與S之間怎樣準(zhǔn)確識別特定服務(wù)?20第20頁,共64頁,2023年,2月20日,星期一一臺運行多種服務(wù)器的計算機上,每種服務(wù)器如何識別發(fā)給自己的請求?解決方法:
傳輸協(xié)議為每種服務(wù)分配一個惟一的標(biāo)識符,服務(wù)器和客戶必須使用這一標(biāo)識符。服務(wù)器開始運行時,它向本地協(xié)議軟件注冊它使用的服務(wù)標(biāo)識符??蛻粼L問遠(yuǎn)程服務(wù)器時,需要指定對應(yīng)的服務(wù)標(biāo)識符??蛻粲嬎銠C上的傳輸協(xié)議軟件在發(fā)送請求時,向服務(wù)器計算機發(fā)送這一標(biāo)識符,服務(wù)器計算機上的傳輸協(xié)議軟件使用這一標(biāo)識符決定處理這一請求的服務(wù)器程序。21第21頁,共64頁,2023年,2月20日,星期一端口端口就是運輸層服務(wù)訪問點TSAP端口的作用就是讓應(yīng)用層的各種應(yīng)用進(jìn)程都能將其數(shù)據(jù)通過端口向下交付給運輸層,以及讓運輸層知道應(yīng)當(dāng)將其報文段中的數(shù)據(jù)向上通過端口交付給應(yīng)用層相應(yīng)的進(jìn)程。從這個意義上講,端口是用來標(biāo)志應(yīng)用層的進(jìn)程。服務(wù)器通過它明確所提供的服務(wù)22第22頁,共64頁,2023年,2月20日,星期一FTPTELNETSMTPDNSTFTPSNMPTCPUDP2123255369161應(yīng)用層傳輸層端口層23第23頁,共64頁,2023年,2月20日,星期一102823…..源端口目的端口TELNETB目的端口號=23把包發(fā)送到我的TELNET應(yīng)用中AB24第24頁,共64頁,2023年,2月20日,星期一端口端口用一個16bit端口號進(jìn)行標(biāo)志。端口號只具有本地意義,即端口號只是為了標(biāo)志本計算機應(yīng)用層中的各進(jìn)程。在因特網(wǎng)中不同計算機的相同端口號是沒有聯(lián)系的。25第25頁,共64頁,2023年,2月20日,星期一兩類端口一類是熟知端口,其數(shù)值一般為0~1023。當(dāng)一種新的應(yīng)用程序出現(xiàn)時,必須為它指派一個熟知端口。另一類則是一般端口,用來隨時分配給請求通信的客戶進(jìn)程。26第26頁,共64頁,2023年,2月20日,星期一TCP/IP定義的應(yīng)用程序熟知端口:FTP:21,Telnet:23,SMTP:25,DNS:53,TFTP:69,HTTP:80,SNMP:161,協(xié)議端口號定義而一般端口,是可以由系統(tǒng)開發(fā)人員隨時定義分配的。27第27頁,共64頁,2023年,2月20日,星期一名稱TCP端口號TCP端口號描述EchoDiscardDaytimeChargenTime7913193779131937服務(wù)器返回客戶發(fā)送的所有內(nèi)容服務(wù)器丟棄客戶發(fā)送的所有內(nèi)容服務(wù)器以可讀形式返回日期與時間當(dāng)客戶發(fā)一個數(shù)據(jù)報時,服務(wù)器發(fā)送一連續(xù)字符流,直至客戶中斷連接;UDP發(fā)一隨機長度的數(shù)據(jù)報從服務(wù)器返回一個32bit數(shù),表示UTC時間1900.1.1午夜至今的秒數(shù)通常TCP/IP的主要端口號:1—225之間,端口號256—1023由Unix系統(tǒng)占用,端口號1024—5000作為臨時端口分配,5000以上(作為其他服務(wù)器)不常出現(xiàn)。標(biāo)準(zhǔn)簡單服務(wù)端口號28第28頁,共64頁,2023年,2月20日,星期一為什么服務(wù)器端口號一定是唯一定義的,而客戶端的端口號可以是按定義的,也可以臨時自指定的,只具有本地意義?
為什么服務(wù)器端口號一定是唯一定義的,而客戶端的端口號可以是按定義的,也可以臨時指定的?答:協(xié)議端口號解決是C/S交互過程中服務(wù)器定位問題,使所有客戶都能正確找到需要的服務(wù),所以服務(wù)器端口一定唯一確定的,而客戶源端口號只對客戶自己有效。一計算機可以有多個應(yīng)用進(jìn)程,通過不同的端口號(源不同/目的相同,源同/目的不同,均不同),同時進(jìn)行多任務(wù)處理,此時TCP/UDP、IP完成復(fù)用與分用。
協(xié)議端口號解決是C/S交互過程中服務(wù)器定位問題,使所有客戶都能正確找到需要的服務(wù),所以服務(wù)器端口一定唯一確定的,而客戶源端口號只對客戶自己有效。29第29頁,共64頁,2023年,2月20日,星期一實際通過TCP應(yīng)用,除端口外,還必須有IP地址。
TCP連接的兩個端點(端與端通信),是由端點地址(IP地址,端口號)確定,(IP地址,端口號)也被稱為插口(Socket),或者端地址(EndpointAddress)。實際通過TCP通信,除端口外,為什么必須有IP地址?30第30頁,共64頁,2023年,2月20日,星期一TCP/UDP協(xié)議插口04101631
源端口
目的端口
TCP/UDP頭部數(shù)據(jù)其它字段TCP/UDP頭部數(shù)據(jù)IP頭部32bit源地址32bit目的地址其它字段從IP包結(jié)構(gòu)看,網(wǎng)絡(luò)應(yīng)用進(jìn)程通信需要端地址(IP地址,端口號)31第31頁,共64頁,2023年,2月20日,星期一第3.1總結(jié)1、什么是C/S工作模式?2、網(wǎng)絡(luò)應(yīng)用為什么需要C/S模式?3、為什么通常服務(wù)器軟件復(fù)雜?4、應(yīng)用進(jìn)程通信端口地址,為什么還要IP地址?是否需要物理網(wǎng)地址?32第32頁,共64頁,2023年,2月20日,星期一第3.1章作業(yè)1、客戶軟件和服務(wù)器軟件主要特點。2、一個服務(wù)器軟件通常需要包括哪些主要的功能部分。3、為什么通常服務(wù)器端口號是唯一定義的,而客戶端的端口號可以臨時指定?
33第33頁,共64頁,2023年,2月20日,星期一第3.2節(jié)、應(yīng)用程序接口API3.2.1應(yīng)用程序接口概述3.2.2套接字API基本結(jié)構(gòu)3.2.3實現(xiàn)套接字API的過程3.2.4套接字API的其它問題3.2.5套接字API實現(xiàn)實例34第34頁,共64頁,2023年,2月20日,星期一第3.2節(jié):重點與難點1、應(yīng)用編程接口的概念與重要性2、套接字API的特點/函數(shù)/參數(shù)3、Socket套接字API實現(xiàn)的基本過程重點理解:主要了解:1、套接字API主要過程的作用2、套接字繼承與服務(wù)器并發(fā)35第35頁,共64頁,2023年,2月20日,星期一3.2.1應(yīng)用程序接口概述C/S模式解決了應(yīng)用程序通過互聯(lián)網(wǎng)交互方式—等待/請求,并通過端口號來標(biāo)識服務(wù)器提供的某種服務(wù)。盡管TCP/IP并不復(fù)雜,但應(yīng)用程序編寫當(dāng)然不希望每次逐一填寫TCP/IP的各個報頭;應(yīng)用程序?qū)W(wǎng)絡(luò)低層通信細(xì)節(jié)實際不想關(guān)心,所以在應(yīng)用程序和通信網(wǎng)絡(luò)之間怎樣形成標(biāo)準(zhǔn)的接口—API,應(yīng)用程序只需要通過API就能完成通信和數(shù)據(jù)交互,是網(wǎng)絡(luò)應(yīng)用發(fā)展的一大進(jìn)步?;ヂ?lián)網(wǎng)應(yīng)用程序怎樣和TCP/IP協(xié)議通信接口?即C、S編程怎樣使用TCP/IP協(xié)議進(jìn)行通信與數(shù)據(jù)交互。傳統(tǒng)通過網(wǎng)絡(luò)(DDN、FR、ATM)的交互,使用計算機串行接口或LAN仿真,通信網(wǎng)把數(shù)據(jù)傳遞到對方計算機,其余需要計算機應(yīng)用處理。網(wǎng)絡(luò)編程接口發(fā)展背景存在問題:1、計算機應(yīng)用和網(wǎng)絡(luò)兩層皮;2、計算機應(yīng)用必須和底層硬件(接口)打交道;嚴(yán)重阻礙網(wǎng)絡(luò)應(yīng)用發(fā)展。36第36頁,共64頁,2023年,2月20日,星期一數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層運輸層網(wǎng)絡(luò)層N個服務(wù)器因特網(wǎng)計算機A計算機BN個客戶應(yīng)用進(jìn)程通過端地址建立可靠雙工通信連接和收發(fā)數(shù)據(jù),應(yīng)用程序或編程人員怎樣處理各種協(xié)議(TCP/IP/IGMP)的具體報格式?需要逐一包文內(nèi)容填寫?37第37頁,共64頁,2023年,2月20日,星期一實際互聯(lián)網(wǎng)應(yīng)用程序只需要通過API完成通信和數(shù)據(jù)交互的調(diào)用,從而不需要處理網(wǎng)絡(luò)的細(xì)節(jié),是網(wǎng)絡(luò)應(yīng)用發(fā)展的一大進(jìn)步。API體現(xiàn)了現(xiàn)代網(wǎng)絡(luò)又一個重要思想——應(yīng)用程序與網(wǎng)絡(luò)“一體”又“分離”。一體:把網(wǎng)絡(luò)通信對上抽象API成為計算機體系組成部分,網(wǎng)絡(luò)API定義與設(shè)計已成為所有處理網(wǎng)絡(luò)應(yīng)用與網(wǎng)絡(luò)通信底層接口的實際方法,在3G/4G,NGN網(wǎng)絡(luò)中最大標(biāo)準(zhǔn)組就是解決其API的問題。分離:實現(xiàn)高效、簡捷API,就意味著實現(xiàn)應(yīng)用與網(wǎng)絡(luò)通信底層“分離”,就可不關(guān)心通信實現(xiàn)的細(xì)節(jié),大大降低了網(wǎng)絡(luò)應(yīng)用開發(fā)難度,促進(jìn)應(yīng)用發(fā)展。38第38頁,共64頁,2023年,2月20日,星期一應(yīng)用程序接口API是應(yīng)用程序通過TCP/IP協(xié)議軟件進(jìn)行通信交互的接口,它是一組定義的操作(非硬件),API決定了網(wǎng)絡(luò)應(yīng)用所能達(dá)到功能和這些功能編程開發(fā)的難度。應(yīng)用程序接口API是一般由操作系統(tǒng)(或編程系統(tǒng))提供,是由應(yīng)用程序調(diào)用的一個過程及過程所需的參數(shù)。通常一個API基本操作是獨立過程,如API一個過程完成建立通信,另一個過程完成數(shù)據(jù)接收。應(yīng)用程序接口API概念A(yù)PI:ApplicationProgramInterface,應(yīng)用程序接口或應(yīng)用編程接口39第39頁,共64頁,2023年,2月20日,星期一通信協(xié)議只是規(guī)定協(xié)議應(yīng)該提供的操作,并不指定應(yīng)用程序與協(xié)議進(jìn)行交互時的API。協(xié)議端口與API接口有什么區(qū)別?協(xié)議端口是服務(wù)器軟件的標(biāo)識,16位整數(shù);API是一個執(zhí)行過程。40第40頁,共64頁,2023年,2月20日,星期一套接字API(SocketAPI)互聯(lián)網(wǎng)API主要有兩類:1、伯克利版API(SocketAPI,稱為套接字API),從BSDUnix版發(fā)展而來。2、A&AT版TLI運輸層接口TransportLayInterface盡管互聯(lián)網(wǎng)允許OS系統(tǒng)選擇API,但目前Windows(WinSoc)、Unix、Linux主流OS系統(tǒng)廣泛接受套接字API,所以成為事實上標(biāo)準(zhǔn)。套接字API是操作系統(tǒng)的一個組成部分。41第41頁,共64頁,2023年,2月20日,星期一SocketAPI:應(yīng)用程序與TCP/IP協(xié)議之間的接口,它作為一種通用的通信編程接口而設(shè)計。42第42頁,共64頁,2023年,2月20日,星期一Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計模式中,Socket其實就是一個門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。
43第43頁,共64頁,2023年,2月20日,星期一套接字API的基本結(jié)構(gòu)套接字API是Unix操作系統(tǒng)的發(fā)展而來的,套接字API網(wǎng)絡(luò)通信描述基本保持Unix對設(shè)備、文件的操作風(fēng)格。如Unix文件操作采用“open—read—write—close”過程模式,首先產(chǎn)生一個操作的描述符,然后每個過程由函數(shù)+參數(shù)具體組成。套接字API同樣用描述符的方法,在使用通信協(xié)議前必須申請操作系統(tǒng)生成一個套接字,系統(tǒng)返回一個小整型數(shù)(如3、5)作為描述符來識別這個套接字,以后通信過程中這個套接字作為參數(shù),而不必每次傳輸時指明細(xì)節(jié)。44第44頁,共64頁,2023年,2月20日,星期一API過程中應(yīng)用程序選擇的端口、通信地址、客戶或服務(wù)器、使用協(xié)議等怎么表達(dá)呢?套接字API通過定義多個函數(shù)(而不是單個,為什么?),來確定參數(shù)和選項;既當(dāng)創(chuàng)建套接字描述符后,調(diào)用多個函數(shù)過程說明套接字使用的具體細(xì)節(jié)??偨Y(jié):套接字API的使用是通過首先創(chuàng)建套接字(返回整型描述符),然后調(diào)用多個包含具體參數(shù)和選項的函數(shù)過程,完成應(yīng)用程序和協(xié)議通信的接口。為什么是多個而不是單個,單個絕對不行嗎?45第45頁,共64頁,2023年,2月20日,星期一實現(xiàn)套接字API的過程Socket過程該過程創(chuàng)建一個套接字并返回一個整數(shù)描述字。
descriptor=socket(protofamily,type,protocol)close過程該過程告訴系統(tǒng)終止對套接字的使用。close(socket)bind過程服務(wù)器使用該過程來提供服務(wù)器所使用的、用于等待連接的協(xié)議端口號。bind(socket,localaddr,addrlen)46第46頁,共64頁,2023年,2月20日,星期一listen過程服務(wù)器調(diào)用該過程來等待來自客戶的連接。
listen(socket,queuesize)accept過程面向連接的服務(wù)器必須調(diào)用accept過程才能接收下一個連接請求。newsock=accept(socket,caddress,caddresslen)connect過程客戶調(diào)用該過程建立與特定服務(wù)器之間的連接。connect(socket,saddress,saddresslen)47第47頁,共64頁,2023年,2月20日,星期一send過程如果套接字被連接,可以利用該過程發(fā)送數(shù)據(jù)。
send(socket,data,length,flags)sendto過程和sendmsg過程允許客戶或服務(wù)器使用無連接套接字發(fā)送數(shù)據(jù)。sendto(socket,data,length,flags,destaddress,addresslen)sendmsg(socket,msgstruct,flags)是一個結(jié)構(gòu),該結(jié)構(gòu)包含了關(guān)于目的地址,目的地址的長度,發(fā)送的消息,以及消息的長度等信息。48第48頁,共64頁,2023年,2月20日,星期一recv過程應(yīng)用可以調(diào)用該過程從連接套接字中接收數(shù)據(jù)。
recv(socket,buffer,length,flags)recvfrom過程和recvmsg過程如果套接字并沒有被連接,應(yīng)用可以用于接收來自任意發(fā)送者的消息recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)recvmsg(socket,msgstruct,flags)是一個結(jié)構(gòu),該結(jié)構(gòu)含有接收消息的地址和發(fā)送者的IP地址。49第49頁,共64頁,2023年,2月20日,星期一實現(xiàn)套接字API的過程1、創(chuàng)建一個套接字并返回一個返回整型描述符DescriAptor=socket(pf,type,protocol)Pf:協(xié)議棧TCP/IP/AppleTalk,type:連接/無連接,protocol:具體協(xié)議tcp/udp2、Bind過程Bind(socket,locaaddr,addrlen)服務(wù)器使用Bind過程賦予套接字特定的端地址,實現(xiàn)socket和端地址聯(lián)編,使用無連接協(xié)議時已準(zhǔn)備好接收信息。Locaaddr是本地端地址的一般socket地址描述結(jié)構(gòu),TCP/IP地址和協(xié)議端口號將按socket地址結(jié)構(gòu)表達(dá)。50第50頁,共64頁,2023年,2月20日,星期一4、Listen過程Listen(socket,queuesize)如服務(wù)器是面向連接的,需要使用Listen過程將套接字設(shè)置為被動模式,然后必須接受一個連接請求。Queuesize:客戶請求隊列的長度,開始為空。3、Close過程close(socket)close過程的調(diào)用告訴系統(tǒng)終止對一個套接字socket的使用,系統(tǒng)對套接字進(jìn)行釋放,應(yīng)用程序與傳輸協(xié)議間停止數(shù)據(jù)交互。如果套接字在使用面向連接的傳輸時,在關(guān)閉套接字前先關(guān)閉連接。51第51頁,共64頁,2023年,2月20日,星期一5、Accept過程newsock=accept(caddress,caddresslen)使用面向連接通信時,Accept過程在套接字中確定了連接客戶的地址,服務(wù)器通過調(diào)用Accept過程接受下一個連接。然后Accept為該連接創(chuàng)建一個新套接字newsock返回調(diào)用者,服務(wù)器將用這個新套接字和客戶通信,直至與該客戶通信結(jié)束。caddress:按照socket地址結(jié)構(gòu)表達(dá)的客戶端IP地址。4-5步驟是面向連接通信時服務(wù)器必須的過程調(diào)用,完成被動地接受一個連接請求,然后創(chuàng)建一個服務(wù)器與特定客戶TCP連接的新的套接字,依次通信,同時原套接字仍保持不變;當(dāng)該客戶連接結(jié)束后,使用原套接字接受來自下一個客戶的連接。52第52頁,共64頁,2023年,2月20日,星期一6、客戶端Connect過程Connect(socket,saddress,saddresslen)當(dāng)使用面向連接的TCP,Connect過程啟動一個指定服務(wù)器的運輸層連接,本質(zhì)上說Connect是客戶與已經(jīng)調(diào)用了Accept過程的服務(wù)器進(jìn)行連接的過程。saddress是按一般socket地址結(jié)構(gòu)表達(dá)的服務(wù)器IP地址和協(xié)議端口號。非常有意思的是,當(dāng)客戶使用無連接的UDP協(xié)議時,也可以使用Connect過程,此時并不啟動一個連接,而僅僅使得socket與服務(wù)器端地址聯(lián)編。通常對無連接的傳輸一般每一個IP報指明目的地址,但許多應(yīng)用客戶只和一個服務(wù)器通信,也即具有同樣的端目的地址。此時客戶可以通過套接字的地址記錄,發(fā)送多條信息,而不必每條指明地址。無連接傳輸?shù)腃onnect過程調(diào)用,建立連續(xù)無地址的IP包傳輸,實際上理解為客戶程序不需要給API指明端地址,而使用API默認(rèn)地址。53第53頁,共64頁,2023年,2月20日,星期一7、Send過程send(socket,data,length,flags)當(dāng)套接字連接建立后,客戶與服務(wù)器就需要發(fā)送信息,客戶與服務(wù)器使用Send過程完成數(shù)據(jù)發(fā)送。data是內(nèi)存待發(fā)數(shù)據(jù)的地址,length是數(shù)據(jù)字節(jié)數(shù),flags特殊選項位(常用于系統(tǒng)調(diào)試)。sendto(socket,data,length,flags,destaddress,addresslen)sendto過程是客戶或服務(wù)器在未連接時發(fā)送信息,destaddress是目的地址的socket結(jié)構(gòu)表達(dá)。sendmgs(socket,mgsstrucct,flags)sendmgs過程完全同sendto,但定義結(jié)構(gòu)簡化參數(shù)表達(dá),mgsstrucct是包括目的地址、地址長度,待發(fā)信息位置和信息長度的結(jié)構(gòu)表達(dá)(具體不展開)。允許客戶或服務(wù)器使用無連接套接字發(fā)送數(shù)據(jù)。54第54頁,共64頁,2023年,2月20日,星期一8、Recv過程recv(socket,buffer,length,flags)當(dāng)套接字連接建立后,客戶與服務(wù)器也同樣需要接收信息,客戶與服務(wù)器使用Recv過程完成從一個連接的套接字中接收數(shù)據(jù)。buffer是內(nèi)存中存放接收到的數(shù)據(jù)的地址,length是緩沖區(qū)大小,flags控制細(xì)節(jié)選項。recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)recvfrom過程是客戶或服務(wù)器在未連接時接收任一客戶發(fā)來的信息,同時對應(yīng)每收到的信息返回發(fā)送地址作為應(yīng)答,sndraddr是發(fā)送地址的socket結(jié)構(gòu)表達(dá)。recvmgs(socket,mgsstrucct,flags)recvmgs過程完全同recvfrom,簡化參數(shù)的表達(dá),并和sendmgs過程對應(yīng)。mgsstrucct是一個結(jié)構(gòu),該結(jié)構(gòu)含有接收消息的地址和發(fā)送者的IP地址。55第55頁,共64頁,2023年,2月20日,星期一其他套接子過程:1.getpeername過程:服務(wù)器在調(diào)用accept過程接收連接請求之后,可以調(diào)用該過程,以獲得啟動連接的遠(yuǎn)程客戶的完整地址。2.gethostname過程:客戶或服務(wù)器可以調(diào)用該過程來獲取運行該程序的計算機的信息。3.gethostbyname過程:通過計算機名字返回該計算機的IP地址??蛻艚?jīng)常使用該過程將用戶輸入的名字轉(zhuǎn)換成相應(yīng)的協(xié)議軟件所需的IP地址。4.gethostbyaddr過程:給出一臺計算機的IP地址,它將返回該計算機的名字。當(dāng)要向人們顯示主機信息時,客戶或服務(wù)器就可以使用該過程。write(socket,buffer,length)read(socket,buffer,length)套接字API繼承Unix的I/O一般操作,對已建立連接的套接字,可通過write-read套接字進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸,其功能同send-recv過程。56第56頁,共64頁,2023年,2月20日,星期一客戶-服務(wù)器模式的socket實現(xiàn)框架服務(wù)器Socket()bind()listen()accept()阻塞,等待客戶連接請求recv()處理服務(wù)請求send()Socket()connect()send()recv()客戶建立連接服務(wù)請求服務(wù)響應(yīng)面向連接的客戶-服務(wù)器服務(wù)器必須首先啟動,直到它執(zhí)行完accept()調(diào)用,進(jìn)入等待狀態(tài)后,方能接受客戶請求。假如客戶先啟動,則connect()將返回出錯代碼,連接不成功。服務(wù)器端地址聯(lián)編創(chuàng)建套接字等待連接請求,請求隊列長度客戶地址新套接字建立連接服務(wù)器端地址獲取IP地址與定義端口57第57頁,共64頁,2023年,2月20日,星期一套接字、并發(fā)與線程套接字API設(shè)計需要適應(yīng)服務(wù)器并發(fā),當(dāng)服務(wù)器并發(fā)創(chuàng)建一個副本時,每個新創(chuàng)建的線程從創(chuàng)建的線程繼承所有套接字的一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年福建省公開遴選公務(wù)員403人備考題庫完整答案詳解
- 2026江蘇南京江北新區(qū)退役軍人服務(wù)中心招聘編外人員6人備考題庫及答案詳解(奪冠系列)
- 2026廣西河池市事業(yè)單位統(tǒng)一招聘662人備考題庫參考答案詳解
- 2026上半年安徽事業(yè)單位聯(lián)考霍山縣招聘43人備考題庫及1套參考答案詳解
- 2026四川省醫(yī)學(xué)科學(xué)院四川省人民醫(yī)院專職科研人員、工程師招聘3人備考題庫(二)(含答案詳解)
- 2026年1月重慶市萬州區(qū)高峰街道辦事處公益性崗位招聘1人備考題庫完整答案詳解
- 2026山東棗莊市滕州市校園招聘教師18人備考題庫(棗莊學(xué)院站)(含答案詳解)
- 項目管理嚴(yán)格遵循承諾書內(nèi)容5篇
- 2026年春季開學(xué)典禮校長講話:以春為序逐光而行筑夢新程
- 公司規(guī)范管理目標(biāo)要求承諾書范文7篇
- 浙江省寧波市鎮(zhèn)海中學(xué)2026屆高二上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- (2025年)電力交易員練習(xí)試題附答案
- 2026年咨詢工程師現(xiàn)代咨詢方法與實務(wù)模擬測試含答案
- 甘肅省酒泉市2025-2026學(xué)年高一上學(xué)期期末語文試題(解析版)
- GB/T 3634.1-2025氫氣第1部分:工業(yè)氫
- 2025年公務(wù)員(省考)測試卷附答案詳解
- JJG 499-2021 精密露點儀檢定規(guī)程
- T-CPQS A0011-2022 二手車車況檢測及評估通則
- 吸毒的危害性后果
- 2025年湖南邵陽經(jīng)開貿(mào)易投資有限公司招聘12人筆試考試參考試題及答案解析
- 白內(nèi)障手術(shù)術(shù)前準(zhǔn)備和術(shù)后護(hù)理流程
評論
0/150
提交評論