iOS 開發 網路程式設計詳解之TCP UDP

2021-07-24 23:35:47 字數 1941 閱讀 2874

ip位址(主機名)

.0.1 主機名:localhost

每台計算機都有乙個 127.0

.0.1

如果 127.0

.0.1

ping 不通,說明網絡卡不工作

如果本機位址 ping 不通,說明網線壞了

埠號

用於標示程序的邏輯位址,不同程序的標示

有效埠:0~65535

其中 0~1024由系統使用或者保留埠

開發中不要使用 1024 以下的埠

注意 : 跟http相關的埠一定是80.伺服器上有個程序是專門處理http請求的,埠號是80.

傳輸協議

http網路傳輸協議在傳輸層選擇的是tcp/ip協議

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進 入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入 連線狀態,完成三次握手,客戶端與伺服器開始傳送資料.

握手過程中傳送的包裡」不包含資料 「,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,tcp連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,tcp連線都將被一直保持下去。

由於 tcp 連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個fin 來終止這個方向的傳送通道。收到乙個 fin 只意味著這一方向上沒有資料流動,乙個 tcp 連線在收到乙個 fin 後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

( 1 )客戶端 a 傳送乙個 fin ,用來關閉客戶 a 到伺服器 b 的資料傳送。

( 2 )伺服器 b 收到這個 fin ,它返回乙個 ack ,確認序號為收到的序號加 1 。和 syn 一樣,乙個fin 將占用乙個序號。

( 3 )伺服器 b 關閉與客戶端 a 的連線,傳送乙個 fin 給客戶端 a 。

( 4 )客戶端 a 發回 ack 報文確認,並將確認序號設定為收到序號加 1 ,客服端關閉與伺服器的連線。

為什麼tcp建立連線協議是三次握手,而關閉連線卻是四次握手呢?

為什麼time_wait狀態還需要等2msl後才能返回到closed狀態?

因為雖然雙方都同意關閉連線了,而且握手的4個報文也都傳送完畢,按理可以直接回到closed 狀態(就好比從syn_sent 狀態到establish 狀態那樣),但是我們必須假想網路是不可靠的,你無法保證你(客戶端)最後傳送的ack報文一定會被對方收到,就是說對方處於last_ack 狀態下的socket可能會因為超時未收到ack報文,而重發fin報文,所以這個time_wait 狀態的作用就是用來重發可能丟失的ack報文。

關閉tcp連線一定需要4次揮手嗎?

我們可以通過設定socket變數的so_linger標誌來避免socket在close()之後進入time_wait狀態,這時將通過傳送rst強制終止tcp連線(取代正常的tcp四次握手的終止方式)。但這並不是乙個很好的主意,time_wait 對於我們來說往往是有利的

iOS 開發 網路程式設計詳解之Socket詳解

注意 socket使用步驟 1.建立客戶端socket.2.連線到伺服器socket.3.客戶端socket傳送資料到伺服器socket.4.客戶端socket接收伺服器返回的資料.5.關閉客戶端socket.import viewcontroller.h import import import ...

iOS 開發 網路程式設計詳解之基本網路通訊過程

http協議規定 乙個完整的由客戶端發給伺服器的 http 請求 需要包含以下內容 get http 1.1get 後面的 表示訪問根目錄 客戶端要訪問的伺服器主機位址 中還可以包含以下資訊,告訴伺服器一些額外的資訊 訪問結束後,是否斷開連線 connection keep alive 是否快取資料...

IOS開發網路篇 網路程式設計基礎

ios開發網路篇 網路程式設計基礎 一 為什麼要學習網路程式設計 1.簡單說明 在移動網際網路時代,移動應用的特徵有 2 只有通過網路跟外界進行資料互動 資料更新,應用才能保持新鮮 活力 3 如果沒有了網路,也就缺少了資料變化,無論外觀多麼華麗,終將變成一潭死水 流動網路應用 良好的ui 良好的使用...