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