當前位置:編程學習大全網 - 編程語言 - iOS 開發基礎(6)--網絡通信

iOS 開發基礎(6)--網絡通信

OSI 的七層協議體系結構的概念清晰,理論完整,當時它既復雜又不實用; TCP/IP 體系結構則不同,但是它現在卻得到了非常廣泛的應用,不過從實質上講, TCP/IP 只是最上面的三層,因為最下面的網絡接口層並沒有什麽具體內容;因此在學習計算機網絡的時候往往采取折中的方法,即綜合 OSI 和 TCP/IP 的優點,采用壹種只有五層協議的體系結構;

iOS 開發中的網絡通信主要是在傳輸層和應用層進行壹些網絡 IP 地址,端口以及協議的壹些處理;首先是網絡層的兩種傳輸協議 UDP 和 TCP 的含義以及區別:

用戶數據包協議;UDP 在傳輸數據之前不需要先建立連接.遠地主機的運輸層在收到 UDP 報文後,不需要給出任何確認;

主要特點:

傳輸控制協議; TCP 提供面向連接的服務;在傳輸數據之前必須先建立連接,數據傳輸完成後要釋放連接;建立連接需要通過三次握手,而釋放連接需要四次握手;

主要特點:

第壹次握手:客戶端發送syn包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送壹個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接壹旦建立,在通信雙方中的任何壹方主動關閉連接之前,TCP 連接都將被壹直保持下去。

這個問題的本質就是信道不可靠,但是通信雙方需要中間傳輸的數據是可靠的,而要解決這個問題,無論妳是在信息中包含什麽信息,三次通信是理論上的最小值,所以三次握手不是TCP本身的要求,而是為了滿足在不可靠信道上可靠的傳輸信息這壹需求所致的;這裏的本質需求就是,信道不可靠,數據傳輸要可靠,三次握手之後妳先繼續握手還是發數據也好,跟進行可靠信息傳輸的需求就沒關系了,因此如果信道可靠,無論什麽時候發出消息,對方壹定能收到,或者妳不關心是否要保證對方收到妳的消息,那就能像UDP那樣直接發送消息就可以;

1.當主機A確認發送完數據且知道B已經接受完了,想要關閉發送數據接口(當然確認信號還是可以發),就會發FIN給主機B;

2.主機B收到A發送的FIN,表示收到了,就會發送ACK回復;

3.但是這時B可能還在發送數據,沒有想要關閉數據口的意思,所以FIN和ACK不是同時發送的,而是等到B數據發送完,才會發送FIN給主機A;

4.A收到B發來的FIN,知道B的數據也發送完了,回復ACK,A等待2MSL以後,沒有收到B傳來的任何消息,知道B已經收到自己的ACK了,A就關閉鏈接,B也關閉鏈接;

在客戶端發送最後的ACK回復,但是該ACK可能丟失。服務端如果沒有收到ACK,將不斷重復發送FIN片段。所以客戶端不能立即關閉,它必須確認服務端接收到了該ACK,客戶端會在發送出ACK之後進入到TIME_WAIT狀態,客戶端會設置壹個計時器,等待2MSL的時間,如果在該時間內再次收到FIN,那麽客戶端會重發ACK並再次等待2MSL;所謂2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指壹個片段在網絡中最大的存活時間,2MSL就是壹個發送和壹個回復所需的最大時間。如果知道2MSL,客戶端都沒有再次收到FIN,那麽客戶端推斷ACK已經成功接收,則結束TCP連接;

HTTP是壹種無狀態的連接,客戶端每次讀取web網頁時,服務器都會認為這是壹次新的會話。但有時候我們需要持久保存壹些用戶信息,比如登錄時的用戶名和密碼等;而這些信息都是需要Cookie和Session來保存;

這兩個的本質區別就是Cookie是保存在客戶端的,而Session是保存在服務器上的;

當服務器接收到 cookie 後,會根據 cookie 中的 SessionID 來找到這個客戶的 session。如果沒有,則會生成壹個新的 SessionID 發送給客戶端。

HTTP 連接使用的是"請求--響應"的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發出請求後,服務器端才能回復數據;壹次請求後立即斷開;HTTP 使用的的面向連接的 TCP 作為傳輸層協議,保證了數據的可靠性;但是 HTTP屬於無狀態,無連接;雖然使用了 TCP 連接,但通信的雙方不需要先建立連接;

socket 連接通常情況下就是 TCP 連接,因此 socket 連接壹旦建立,通信雙方即可開始互相發送數據內容,直到雙方的連接斷開;但在實際應用中,客戶端和服務器之間的通行防火墻會關閉長時間處於非活躍狀態的連接而導致 socket 連接中斷,因此需要通過輪詢告訴網絡該連接處於活躍狀態;

連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認;

服務器監聽 :服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接狀態,實時監測網絡狀態,等待客戶端的連接請求;

客戶端的連接請求 :指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字,為此客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端的套接字的地址和端口號,然後就向服務器端套接字提出連接請求;

連接確認 :當服務器端套接字監聽到或者說收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立壹個新的線程,把服務器端套接字的描述發給客戶端,壹旦客戶端確認了此描述,雙方就正式建立連接,而服務器端的套接字繼續處於監聽狀態,繼續接受其它客戶端套接字的連接請求;

HTTP的 URL 的壹般形式是: http://<主機>:<端口>/<路徑>

HTTP 的默認端口號是:80;

HTTP 有兩類報文:

1.請求報文---從客戶端向服務器發送的請求報文

2.響應報文---從服務器到客戶的回答

特點:所有的請求參數都拼接都 URL 的後面;

缺點:

特點:

1xx 保留.響應保留;

2xx 請求成功接收;

3xx 為完成請求客戶端需要進壹步細化請求;

4xx 客戶端請求錯誤(參數,方式不正確);

5xx 服務器端有錯誤;

  • 上一篇:武漢plc編程
  • 下一篇:20世紀的科技成果呢?
  • copyright 2024編程學習大全網