socket程式設計技術
http協議的四個特徵
七層網路模型
應用層
http協議,郵件伺服器,檔案伺服器
表示層
將資料進行轉換,使各種系統之間能夠進行通訊
會話層
建立會話的連線
傳輸層
使用tcp和udp協議進行資料傳輸
網路層
使用路由器和交換機等物理機器進行節點布置,進行路由,形成網路
資料鏈路層
傳輸的位址的幀以及錯誤檢測,判斷傳輸的流是否有問題
物理層
以二進位制的形式在光線和專線上進行傳輸
socket程式設計技術
傳輸層實現端到端的通訊,因此,每乙個傳輸層連線有兩個端點。傳輸層連線的端點叫做套接字(socket)。如果ip位址是210.37.145.1,而埠號是23,那麼得到套接字就是(210.37.145.1:23)
socket的實現流程socket():建立套接字。
bind():指定本地位址。乙個套接字用socket()建立後,它其實還沒有與任何特定的本地或目的位址相關聯。在很多情況下,應用程式並不關心它們使用的本地位址,這時就可以不用呼叫bind指定本地的位址,而由協議軟體為它們選擇乙個。但是,在某個知名埠(well-known port)上操作的伺服器程序必須要對系統指定本地埠。所以一旦建立了乙個套接字,伺服器就必須使用bind()系統呼叫為套接字建立乙個本地位址。
connect():將套接字連線到目的位址。初始建立的套接字並未與任何外地目的位址關聯。客戶機可以呼叫connect()為套接字繫結乙個永久的目的位址,將它置於已連線狀態。對資料流方式的套接字,必須在傳輸資料前,呼叫connect()構造乙個與目的地的tcp連線,並在不能構造連線時返回乙個差錯**。如果是資料報方式,則不是必須在傳輸資料前呼叫connect。如果呼叫了connect(),也並不像資料流方式那樣傳送請求建連的報文,而是只在本地儲存目的位址,以後該socket上傳送的所有資料都送往這個位址,程式設計師就可以免去為每一次傳送資料都指定目的位址的麻煩。
listen():設定等待連線狀態。對於乙個伺服器的程式,當申請到套接字,並呼叫bind()與本地位址繫結後,就應該等待某個客戶機的程式來要求連線。listen()就是把乙個套接字設定為這種狀態的函式。
accept():接受連線請求。伺服器程序使用系統呼叫socket,bind和listen建立乙個套接字,將它繫結到知名的埠,並指定連線請求的佇列長度。然後,伺服器呼叫accept進入等待狀態,直到到達乙個連線請求。
send()/recv()和sendto()/recvfrom():傳送和接收資料 。在資料流方式中,乙個連線建立以後,或者在資料報方式下,呼叫了connect()進行了套接字與目的位址的繫結後,就可以呼叫send()和reev()函式進行資料傳輸。
closesocket():關閉套接字。
socket流程圖輪詢方式。阻塞方式建立socket,快速輪詢方式接收訊息,不判斷是否可寫(不考慮網絡卡滿的極端情況)直接傳送訊息。套接字工作流程結構圖如下:
select偵聽及管道中斷方式。非阻塞方式建立socket,把本地管道檔案描述符和socket可讀檔案描述符加入fd_set,用select函式偵聽訊息。當需要立即傳送訊息,通過本地管道寫檔案描述符寫入訊息。當伺服器端傳送過來訊息或接收到本地管道訊息,select立即結束等待並且返回是超時還是收到訊息或socket異常。
tcp協議和udp協議
tcp協議:
面向有連線協議,具有三次握手和四次揮手,是一種安全的協議
協議可靠
效率低udp協議:
面向無連線協議
協議不可靠
效率高
tcp三次握手tcp三次握手的字元意思:
syn:代表請求建立連線,所以在三次握手中前兩次要syn=1,表示這兩次用於建立連線,至於第三次什麼用,在疑問三里解答。
fin:表示請求關閉連線,在四次分手時,我們發現fin發了兩遍。這是因為tcp的連線是雙向的,所以一次fin只能關閉乙個方向。
ack:代表確認接受,從上面可以發現,不管是三次握手還是四次分手,在回應的時候都會加上ack=1,表示訊息接收到了,
並且在建立連線以後的傳送資料時,都需加上ack=1,來表示資料接收成功。
seq:序列號,什麼意思呢?當傳送乙個資料時,資料是被拆成多個資料報來傳送,序列號就是對每個資料報進行編號,這樣接受方才能對資料報進行再次拼接。
初始序列號是隨機生成的,這樣不一樣的資料拆包解包就不會連線錯了。(例如:兩個資料都被拆成1,2,3和乙個資料是1,2,3乙個是101,102,103,很明顯後者不會連線錯誤)
ack:這個代表下乙個資料報的編號,這也就是為什麼第二請求時,ack是seq+1
tcp 三次握手的過程
1.客戶端首先要syn=1,表示要建立連線,
2.服務端接收到後,要告訴客戶端:我接受到了!所以加個ack=1,就變成了ack=1,syn=1
3.理論上這時就建立連線成功了,但是要防止乙個意外(見疑問三),所以客戶端要再發乙個訊息給服務端確認一下,這時只需要ack=1就行了。
在四次分手時
1.首先客戶端請求關閉客戶端到服務端方向的連線,這時客戶端就要傳送乙個fin=1,表示要關閉乙個方向的連線(見上面四次分手的圖)
2.服務端接收到後是需要確認一下的,所以返回了乙個ack=1
3.這時只關閉了乙個方向,另乙個方向也需要關閉,所以服務端也向客戶端發了乙個fin=1 ack=1
4.客戶端接收到後傳送ack=1,表示接受成功
四次分手完成!
http協議的四個特徵
請求和響應模型
請求:
請求頭請求體
響應: 相應頭
響應體
http協議分類
http協議1.0 不支援長連線
http協議1.1 支援長連線
長連線和短連線
長連線:
當客戶端和伺服器端建立連線,並不會馬上斷開連線,會保持一定服用機制,當連線閒置了300ms才會斷開
短連線:
當客戶端和伺服器端建立連線,傳送完訊息,就會斷開連線
網路 OSI七層網路模型
ip資料鏈路層 物理層osi七層模型中,每一層的資料報都是誰生成和解包的?wireshark 抓包 例項分析tcp三次握手過程 tcp 半連線佇列和全連線佇列滿了會發生什麼?又該如何應對?自己電腦上的 tcp ip pdf ipv6原理 應用與實踐 疑問 鏈路本地位址 唯一本地位址 ra route...
OSI七層網路模型
osi 模型 open systeminterconnection model 為計算機和網路在世界範圍內實現互聯的標準框架,他將計算機體系結構劃分為七層,每層都可以實現抽象的介面。tcp ip 協議為實際上的網際網路絡的工業標準。這實際上是一種衍生的關係。上是osi七層模型在工作時的表現情況 七層...
OSI七層網路模型
主要功能 利用傳輸介質為資料鏈路層提供物理連線,實現位元流的透明傳輸。資料單位 位元 bit 常用裝置 集線器,hub,網線,中繼器。主要功能 通過各種控制協議,將有差錯的物理通道變為無差錯的 能可靠傳輸資料幀的資料鏈路。資料單位 幀 frame 常用裝置 網絡卡,網橋,二層交換機。主要功能 通過路...