如何利用tcp或udp实现应用层协议_HTTP协议开发应用总结?
HTTP協(xié)議介紹
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。由于HTTP協(xié)議是目前Web開(kāi)發(fā)的主流協(xié)議,基于HTTP的應(yīng)用非常廣泛,因此,掌握HTTP的開(kāi)發(fā)非常重要。
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,適用于分布
式超媒體信息系統(tǒng)。
OSI(Open System Interconnection)七層模型
應(yīng)用層網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口。協(xié)議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示層數(shù)據(jù)的表示、安全、壓縮。(在五層模型里面已經(jīng)合并到了應(yīng)用層)格式有,JPEG、ASCll、DECOIC、加密格式等會(huì)話層建立、管理、終止會(huì)話。(在五層模型里面已經(jīng)合并到了應(yīng)用層)對(duì)應(yīng)主機(jī)進(jìn)程,指本地主機(jī)與遠(yuǎn)程主機(jī)正在進(jìn)行的會(huì)話傳輸層定義傳輸數(shù)據(jù)的協(xié)議端口號(hào),以及流控和差錯(cuò)校驗(yàn)。協(xié)議有:TCP UDP,數(shù)據(jù)包一旦離開(kāi)網(wǎng)卡即進(jìn)入網(wǎng)絡(luò)傳輸層網(wǎng)絡(luò)層進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇。協(xié)議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP數(shù)據(jù)鏈路層建立邏輯連接、進(jìn)行硬件地址尋址、差錯(cuò)校驗(yàn) [2] 等功能。(由底層網(wǎng)絡(luò)定義協(xié)議)將比特組合成字節(jié)進(jìn)而組合成幀,用MAC地址訪問(wèn)介質(zhì),錯(cuò)誤發(fā)現(xiàn)但不能糾正。物理層建立、維護(hù)、斷開(kāi)物理連接。(由底層網(wǎng)絡(luò)定義協(xié)議)TCP/IP 層級(jí)模型結(jié)構(gòu),應(yīng)用層之間的協(xié)議通過(guò)逐級(jí)調(diào)用傳輸層(Transport layer)、網(wǎng)絡(luò)層(Network Layer)和物理數(shù)據(jù)鏈路層(Physical Data Link)而可以實(shí)現(xiàn)應(yīng)用層的應(yīng)用程序通信互聯(lián)。
HTTP協(xié)議的主要特點(diǎn)如下
1、支持Client/Server模式;
2、簡(jiǎn)單——客戶向服務(wù)器請(qǐng)求服務(wù)時(shí),只需指定服務(wù)URL,攜帶必要的請(qǐng)求參數(shù)或消息體:
3、靈活——HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象,傳輸?shù)膬?nèi)容類由HTTP消息頭
屮的Content-Type加以標(biāo)記:
4、無(wú)狀態(tài)——HTTP協(xié)議是無(wú)狀態(tài)協(xié)議,無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能
力。缺少狀態(tài)意味著如果后續(xù)處理需要之前的信息,則它必須重傳,這樣可能導(dǎo)
致每次連接傳送的數(shù)據(jù)量增大,另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答
就較快,負(fù)我較輕。
URI與URL的理解
1、URI(Uniform Resource Identifier,統(tǒng)一資源標(biāo)識(shí)符)
就是在IMS網(wǎng)絡(luò)中IMS用戶的“名字”,也就是IMS用戶的身份標(biāo)識(shí)。
URI一般由三部分組成:
1. 訪問(wèn)資源的命名機(jī)制。
2. 存放資源的主機(jī)名。
3. 資源自身的名稱,由路徑表示。
語(yǔ)法:[scheme:] scheme-specific-part
URI以scheme和冒號(hào)開(kāi)頭。Scheme用大寫(xiě)/小寫(xiě)字母開(kāi)頭,后面為空或者跟著更多的大寫(xiě)/小寫(xiě)字母、數(shù)字、加號(hào)、減號(hào)和點(diǎn)號(hào)。冒號(hào)把 scheme與scheme-specific-part分開(kāi)了,并且scheme-specific-part的語(yǔ)法和語(yǔ)義(意思)由URI的名字空間決定。
如下面的例子:
http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,并且它的scheme與scheme-specific-part被冒號(hào)分開(kāi)了。
2、url是統(tǒng)一資源定位符 (Uniform Resource Locator)
統(tǒng)一資源定位符,是URI的子集;它除了標(biāo)識(shí)資源的位置,還提供一種定位該資源的主要訪問(wèn)機(jī)制(如其網(wǎng)絡(luò)“位置”)。【即提供具體方式找到該資源(位置+方式)】
URL的格式由下列三部分組成:
schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme 指定低層使用的協(xié)議(例如:http, https, ftp)
host HTTP服務(wù)器的IP地址或者域名
port# HTTP服務(wù)器的默認(rèn)端口是80,這種情況下端口號(hào)可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/
path 訪問(wèn)資源的路徑
url-params
query-string 發(fā)送給http服務(wù)器的數(shù)據(jù)
anchor- 錨
URL 的一個(gè)例子:
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff
Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff
TCP握手連接以及斷開(kāi)
TCP通信過(guò)程包括三個(gè)步驟:建立TCP連接通道,傳輸數(shù)據(jù),斷開(kāi)TCP連接通道。
建立連接:
三次握手即可建立TCP連接
1、第一次握手:客戶端發(fā)送syn包(seq=x)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
2、第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(seq=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
3、第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
握手過(guò)程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。
數(shù)據(jù)傳輸:
建立好連接后,開(kāi)始傳輸數(shù)據(jù)。TCP數(shù)據(jù)傳輸牽涉到的概念很多:超時(shí)重傳、快速重傳、流量控制、擁塞控制等等。(這一切都是為了提供可靠的字節(jié)流服務(wù))
斷開(kāi)連接:
四次握手即可斷開(kāi)TCP連接
1、第一次握手:主動(dòng)關(guān)閉方發(fā)送一個(gè)FIN,用來(lái)關(guān)閉主動(dòng)方到被動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是主動(dòng)關(guān)閉方告訴被動(dòng)關(guān)閉方:我已經(jīng)不會(huì)再給你發(fā)數(shù)據(jù)了(當(dāng)然,在fin包之前發(fā)送出去的數(shù)據(jù),如果沒(méi)有收到對(duì)應(yīng)的ack確認(rèn)報(bào)文,主動(dòng)關(guān)閉方依然會(huì)重發(fā)這些數(shù)據(jù)),但此時(shí)主動(dòng)關(guān)閉方還可以接受數(shù)據(jù)。
2、第二次握手:被動(dòng)關(guān)閉方收到FIN包后,發(fā)送一個(gè)ACK給對(duì)方,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào))。
3、第三次握手:被動(dòng)關(guān)閉方發(fā)送一個(gè)FIN,用來(lái)關(guān)閉被動(dòng)關(guān)閉方到主動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是告訴主動(dòng)關(guān)閉方,我的數(shù)據(jù)也發(fā)送完了,不會(huì)再給你發(fā)數(shù)據(jù)了。
4、第四次握手:主動(dòng)關(guān)閉方收到FIN后,發(fā)送一個(gè)ACK給被動(dòng)關(guān)閉方,確認(rèn)序號(hào)為收到序號(hào)+1,至此,完成四次揮手。
HTTP的請(qǐng)求方法
1、GET:向特定的資源發(fā)出請(qǐng)求
2、POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
3、PUT:向指定資源位置上傳其最新內(nèi)容。
4、DELETE:請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。
5、HEAD: 向服務(wù)器索要與GET請(qǐng)求相一致的響應(yīng),只不過(guò)響應(yīng)體將不會(huì)被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。該方法常用于測(cè)試超鏈接的有效性,是否可以訪問(wèn),以及最近是否更新。
6、TRACE:請(qǐng)求服務(wù)器會(huì)送收到的請(qǐng)求信息,主要用于測(cè)試或診斷。
7、OPTIONS:請(qǐng)求查詢服務(wù)器的性能,或者查詢與資源相關(guān)的選項(xiàng)和需求
8、CONNECT: HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。(即留為將來(lái)使用)
【注意:請(qǐng)求方法區(qū)分大小寫(xiě);所示請(qǐng)求方法應(yīng)為大寫(xiě)】
GET與POST的區(qū)別
1、GET提交的數(shù)據(jù)會(huì)放在URL之后,就是把數(shù)據(jù)放置在請(qǐng)求行(request line)以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,
如http://localhost:8080/xxx?postid=6810130&update=1 ;
POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中,數(shù)據(jù)不會(huì)在地址欄中顯示出來(lái)。
2、GET提交的數(shù)據(jù)大小有限制(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有限制),如:IE對(duì)URL長(zhǎng)度的限制是2083字節(jié)(2KB+35B),而POST方法提交的數(shù)據(jù)理論上沒(méi)有限制。
3、GET方式需要使用Request.QueryString來(lái)取得變量的值,而POST方式通過(guò)Request.Form來(lái)獲取變量的值。
4、GET方式提交數(shù)據(jù),會(huì)帶來(lái)安全問(wèn)題,比如一個(gè)登錄頁(yè)面,通過(guò)GET方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上,如果頁(yè)面可以被緩存或者其他人可以訪問(wèn)這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼。
總結(jié)
以上是生活随笔為你收集整理的如何利用tcp或udp实现应用层协议_HTTP协议开发应用总结?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python运算符括号_Python合集
- 下一篇: python delete_python