免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Web服務基礎

一、HTTP概述

在可克達拉等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站設計 網站設計制作定制設計,公司網站建設,企業網站建設,成都品牌網站建設,網絡營銷推廣,成都外貿網站制作,可克達拉網站建設費用合理。

HTTP是HyperText Transfer Protocol的縮寫,即超文本傳輸協議。HTTP是應用層協議,同其他應用層協議一樣,是為了實現某一類具體應用的協議,并由某一運行在用戶空間的應用程序來實現其功能。HTTP是一種協議規范,這種規范是記錄在文檔上的,為真正通過HTTP協議進行通信的HTTP的實現程序。我們知道,HTTP協議是基于C/S架構的進行通信的,而HTTP協議的服務器端實現程序有httpd、nginx等,其客戶端的實現程序主要是Web瀏覽器,例如Firefox、Internet Explorer、Google chrome、Safari、Opera等,此外,客戶端的命令行工具還有elink、crul等。Web服務是基于TCP的,因此為了能夠隨時響應客戶端的請求,Web服務器需要監聽在80/TCP端口。這客戶端瀏覽器和Web服務器之間就可以通過HTTP協議進行通信了。

二、IANA定義的端口

我們知道,Web服務器為了讓所有客戶瀏覽器程序能夠與之通信,通常都需要監聽在80端口。用戶在瀏覽器上鍵入URL時,例如:www.baidu.com,默認端口就是80。這一端口是由IANA(Internet Assigned Numbers Authority )分配指定的。另外,IANA是由ICANN管理的,其定義的端口如下:

0-1023:眾所周知的端口,永久地分配給固定的應用使用,這些端口的使用需要特定的應用去注冊,屬于特權端口,例如Web服務的80/tcp,FTP的21/tcp等。該類端口只有系統管理員才有權限啟用,并讓進程監聽,而普通用戶則沒有權限。

1024-41951:亦為注冊端口,但要求不是特別嚴格,這些端口分配給程序,并注冊為某個應用使用,但這些應用并不是很常見,例如MySQL服務的3306/tcp,memcache的11211/tcp等。

41952+:客戶端程序隨機使用的端口,為動態端口,或私有端口。在Linux上該類端口范圍定義在/proc/sys/net/ipv4/ip_local_port_range中。

三、BSD Socket

BSD Socket最早是BSD Unix系統的進程通信機制。Socket即為套接字,作為IPC(Inter-Process Communication,進程間通信)的一種實現,允許位于不同主機上(也可以是同一主機上)的進程間通信機制。Socket可理解為“插座”,只要電線插上了這個“插座”,就可以進行通信了。Socket本質上應該是Socket API,它封裝了內核中socket通信相關的通信細節,也就是封裝了通信子網(傳輸層、網絡層、數據鏈路層、物理層)要實現的具體的通信細節,而程序員通過調用Socket API就可以編寫能夠實現網絡通信的程序了。

Socket描述的是IP地址和端口。不同的服務所對應的端口號不同,每種服務需要綁定并監聽在一個端口上,打開一個Socket,而客戶端可以通過一個Socket跟服務器上的Socket建立連接,這樣二者就能實現通信了,我們把正處于通信狀態的一對套接字稱為已連接套接字。總的來說,Socket是應用層與傳輸層之間的橋梁,如圖。

Web服務基礎

前面提到,Socket是對IP地址和端口號的描述,一個IP地址+一個端口就是一個套接字(socket)。根據Socket在傳輸層使用的協議可分為以下三類:

(1)SOCK_STREAM:tcp套接字

(2)SOCK_DGRAM:udp套接字

(3)SOCK_RAW:raw套接字

這里的raw套接字指的是在不使用任何傳輸層協議(例如tcp, udp等)的情況下直接通過發送或接收IP數據包實現通信的一種方式,也就是應用層直接繞過像tcp/udp這樣的協議直接基于IP數據包通信。

根據Socket監聽的地址格式,Socket Domain可分為:

(1)AF_INET:Address Family,IPv4地址格式

(2)AF_INET6:Address Family,IPv6地址格式

(3)AF_UNIX:Address Family,同一主機上不同進程間基于Socket套接字通信所使用的一種地址格式,這種地址的表現形式就是一個套接字文件(Linux一切皆文件);這種地址又稱為Unix_SOCK.


接下來介紹TCP客戶端和服務器是如何通過TCP套接字接口進行通信的。如圖。

Web服務基礎

對于TCP服務器端來說,首先需要調用socket()函數,向內核注冊申請創建TCP套接字(IP地址+端口);一旦申請成功了,就要通過bind()函數綁定程序到這個套接字上;綁定之后,需要調用listen()函數,使服務器進程監聽在這個套接字上,允許套接字進行連接,但此時還不能接收用戶請求;只有再調用accept()函數之后才開始負責接收客戶端請求,并在客戶端請求到達之前一直處于阻塞狀態,此時TCP服務器進程的狀態為LISTEN。

對于TCP客戶端來說,同樣需要調用socket()函數創建套接字,但不需要監聽;當客戶端向服務器發起連接請求時,即調用connect()函數,其中在括號中的參數包括對方服務器的IP地址和端口;如果服務器接收連接請求,則雙方進行了tcp三次握手,建立雙向的虛鏈路,此時客戶端和服務器之間的套接字處于已連接狀態(ESTABLISHED),之后的http請求/響應報文都是基于此前建立的虛鏈路進行發送。

在Linux上,當連接建立之后,客戶端就可以在與服務器建立連接的socket文件上填寫需要請求的數據,寫入數據就相當于向服務器發送數據了,此過程通過調用write()函數完成;而服務器端則可以在與客戶端建立連接的socket文件上讀取數據,即調用read()函數,這一過程相當于接收客戶端請求的數據,二者之間具體的通信細節由底層的通信子網完成。服務器讀取到客戶端發送過來的請求報文后,接著進行解析請求、處理請求并構建響應報文,再通過調用write()函數把響應報文寫入socket文件,通過通信子網傳送到客戶端的socket文件上,客戶端就可以通過這個socket文件得到服務器的響應報文了。如此往復循環多次,直到客戶端請求斷開連接(一般是由客戶端主動請求斷開連接,在使用keep-alive連接方式時則有可能是服務器主動請求斷開連接)。

一旦客戶端請求斷開連接,TCP服務器通過調用read()函數讀取socket文件內的斷開請求數據,同意斷開連接。

網站欄目:Web服務基礎
文章鏈接:http://m.newbst.com/article32/jesjsc.html

成都網站建設公司_創新互聯,為您提供網站改版網頁設計公司靜態網站軟件開發Google網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司