1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Web服務(wù)基礎(chǔ)

      一、HTTP概述

      在可克達(dá)拉等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站制作,可克達(dá)拉網(wǎng)站建設(shè)費用合理。

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

      二、IANA定義的端口

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

      0-1023:眾所周知的端口,永久地分配給固定的應(yīng)用使用,這些端口的使用需要特定的應(yīng)用去注冊,屬于特權(quán)端口,例如Web服務(wù)的80/tcp,F(xiàn)TP的21/tcp等。該類端口只有系統(tǒng)管理員才有權(quán)限啟用,并讓進(jìn)程監(jiān)聽,而普通用戶則沒有權(quán)限。

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

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

      三、BSD Socket

      BSD Socket最早是BSD Unix系統(tǒng)的進(jìn)程通信機(jī)制。Socket即為套接字,作為IPC(Inter-Process Communication,進(jìn)程間通信)的一種實現(xiàn),允許位于不同主機(jī)上(也可以是同一主機(jī)上)的進(jìn)程間通信機(jī)制。Socket可理解為“插座”,只要電線插上了這個“插座”,就可以進(jìn)行通信了。Socket本質(zhì)上應(yīng)該是Socket API,它封裝了內(nèi)核中socket通信相關(guān)的通信細(xì)節(jié),也就是封裝了通信子網(wǎng)(傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層)要實現(xiàn)的具體的通信細(xì)節(jié),而程序員通過調(diào)用Socket API就可以編寫能夠?qū)崿F(xiàn)網(wǎng)絡(luò)通信的程序了。

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

      Web服務(wù)基礎(chǔ)

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

      (1)SOCK_STREAM:tcp套接字

      (2)SOCK_DGRAM:udp套接字

      (3)SOCK_RAW:raw套接字

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

      根據(jù)Socket監(jiān)聽的地址格式,Socket Domain可分為:

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

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

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


      接下來介紹TCP客戶端和服務(wù)器是如何通過TCP套接字接口進(jìn)行通信的。如圖。

      Web服務(wù)基礎(chǔ)

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

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

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

      一旦客戶端請求斷開連接,TCP服務(wù)器通過調(diào)用read()函數(shù)讀取socket文件內(nèi)的斷開請求數(shù)據(jù),同意斷開連接。


      分享題目:Web服務(wù)基礎(chǔ)
      本文地址:http://www.ef60e0e.cn/article/jesjsc.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        安阳县| 太原市| 宜川县| 汾西县| 漳浦县| 庆城县| 钟祥市| 汉中市| 廉江市| 日土县| 方城县| 余江县| 舒城县| 博客| 平远县| 临汾市| 锦屏县| 安泽县| 襄城县| 台东市| 绥棱县| 建始县| 双流县| 县级市| 沈丘县| 辉南县| 巴林左旗| 黔东| 犍为县| 塘沽区| 花莲市| 海丰县| 龙南县| 马龙县| 上思县| 内江市| 贡觉县| 会东县| 永福县| 天柱县| 仲巴县|