網路由下往上分為: 對應
物理層--
資料鏈路層--
網路層-- ip協議
傳輸層-- tcp協議
會話層--
表示層和應用層-- http協議
socket則是對tcp/ip協議的封裝和應用(程式設計師層面上)。也可以說,tpc/ip協議是傳輸層協議,主要解決資料 如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。關於tcp/ip和http協議的關係,網路有一段比較容易理解的介紹:
「我 們在傳輸資料時,可以只使用(傳輸層)tcp/ip協議,但是那樣的話,如 果沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如http、ftp、telnet等,也 可以自己定義應用層協議。web使用http協議作應用層協議,以封裝http文字資訊,然後使用tcp/ip做傳輸層協議將它發到網路上。」
我 們平時說的最多的socket是什麼呢,實際上socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面(api),通過 socket,我們才能使用tcp/ip協議。 實際上,socket跟tcp/ip協議沒有必然的聯絡。socket程式設計介面在設計的時候,就希望也能適應其他的網路協議。所以說,socket的出現 只是使得程式設計師更方便地使用tcp/ip協議棧而已,是對tcp/ip協議的抽象,從而形成了我們知道的一些最基本的函式介面,比如create、 listen、connect、accept、send、read和write等等。網路有一段關於socket和tcp/ip協議關係的說法比較容易理 解:
「tcp/ip只是乙個協議棧,就像作業系統的執行機制一樣,必須要具體實現,同時還要提供對外的操作介面。這個就像作業系統會提供標準的程式設計介面,比如win32程式設計介面一樣,tcp/ip也要提供可供程式設計師做網路開發所用的介面,這就是socket程式設計介面。」
總結一些基於基於tcp/ip協議的應用和程式設計介面的知識,也就是剛才說了很多的 http和socket。
csdn上有個比較形象的描述:http是轎車,提供了封裝或者顯示資料的具體形式;socket是發動機,提供了網路通訊的能力。
實際上,傳輸層的tcp是基於網路層的ip協議的,而應用層的http協議又是基於傳輸層的tcp協議的,而socket本身不算是協議,就像上面所說,它只是提供了乙個針對tcp或者udp程式設計的介面。
下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。
一。什麼是tcp連線的三次握手
第一次握手:客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。
握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,tcp連線一旦建立,在通訊雙方中的任何一方主動關閉 連線之前,tcp 連線都將被一直保持下去。斷開連線時伺服器和客戶端均可以主動發起斷開tcp連線的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客 戶端互動,最終確定斷開)
二。利用socket建立網路連線的步驟
建立socket連線至少需要一對套接字,其中乙個執行於客戶端,稱為clientsocket ,另乙個執行於伺服器端,稱為serversocket 。
套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。
1。伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。
2。客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。
3。 連線確認:當服 務器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端 確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。
三。http鏈結的特點
http協議即超文字傳送協議(hypertext transfer protocol ),是web聯網的基礎,也是手機聯網常用的協議之一,http協議是建立在tcp協議之上的一種應用。
http連線最顯著的特點是客戶端傳送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連線。從建立連線到關閉連線的過程稱為「一次連線」。
四。tcp和udp的區別
1。 tcp是面向鏈 接的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證連線的可靠性,但tcp的三次握手在最低限度上(實際上也很大程度上保證了)保證了連線的 可靠性;而udp不是面向連線的,udp傳送資料前並不與對方建立連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,當然也不用重 發,所以說udp是無連線的、不可靠的一種資料傳輸協議。
2。也正由於1所說的特點,使得udp的開銷更小資料傳輸速率更高,因為不必進行收發資料的確認,所以udp的實時性更好。
知 道了tcp和 udp的區別,就不難理解為何採用tcp傳輸協議的msn比採用udp的qq傳輸檔案慢了,但並不能說qq的通訊是不安全的,因為程式設計師可以手動對udp 的資料收發進行驗證,比如傳送方對每個資料報進行編號然後由接收方進行驗證啊什麼的,即使是這樣,udp因為在底層協議的封裝上沒有採用類似tcp的「三 次握手」而實現了tcp所無法達到的傳輸效率
網路七層由下往上分別為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。
其中物理層、資料鏈路層和網路層通常被稱作**層,是網路工程師所研究的物件;
傳輸層、會話層、表示層和應用層則被稱作主機層,是使用者所面向和關心的內容。
http協議 對應於應用層
頭資訊又稱為元資訊,即資訊的資訊,利用元資訊可以實現有條件的請求或應答 。
請求頭——告訴伺服器怎樣解釋本次請求,主要包括使用者可以接受的資料型別、壓縮方法和語言等。
實體頭——實體資訊型別、長度、壓縮方法、最後一次修改時間、資料有效期等。
實體——請求或應答物件本身。
3.傳送響應
伺服器在處理完客戶的請求之後,要向客戶機傳送響應訊息。
http/1.0的響應訊息格式如下:
響應訊息=狀態行(通用資訊頭|響應頭|實體頭) crlf 〔實體內容〕
狀 態 行=http版本號 狀態碼 原因敘述
狀態碼表示響應型別
1×× 保留
2×× 表示請求成功地接收
3×× 為完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 伺服器錯誤
響應頭的資訊包括:服務程式名,通知客戶請求的url需要認證,請求的資源何時能使用。
4.關閉連線
客戶和伺服器雙方都可以通過關閉套接字來結束tcp/ip對話解決
iOS 網路請求
pragma mark 網路請求 方式 非同步 ibaction delegatebuttondidclicked uibutton sender 方法 客戶端收到伺服器的響應 pragma mark 客戶端收到伺服器的響應 void connection nsurlconnection conne...
iOS的網路請求
首先建立乙個 uiviewcontroller,然後在.m檔案中寫入 簽訂協議 inte ce mainviewcontroller 可變的資料屬性,用來拼接每一小塊資料 property nonatomic,retain nsmutabledata data property nonatomic,...
IOS 網路非同步請求
非同步請求使用與同步和佇列式非同步請求相同的物件,只不過又增加了另乙個物件,即nsurlconnectiondelegate 上 import viewcontroller.h nsinteger totaldownloaded 0 inte ce viewcontroller end implem...