1 Socket程式設計 網路協議一

2021-06-27 02:48:22 字數 2136 閱讀 2087

「我們在傳輸資料時,可以只使用(傳輸層)tcp/ip協議,但是那樣的話,如果沒有應用層,便無法識別資料內容「
tcp/ip只是乙個協議棧,就像程式執行一樣,必須要實現執行,同時還要提供對外的操作介面

網路從下往上分為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。ip協議對應於網路層,tcp協議對應於傳輸層,而http協議對應於應用層,應用層協議有很多,比如http、ftp、telnet等,也可以自己定義應用層協議。

通過socket,我們才能使用tcp/ip協議;實際上,socket跟tcp/ip協議沒有必然的聯絡。

socket程式設計介面在設計的時候,希望也能適應其他的網路協議。

所以說,socket的出現只是使得程式設計師方便地使用tcp/ip協議,是對tcp/ip協議的抽象,從而形成了一些基本的函式介面,比如create、listen、connect、accept、send、read和write等等。

實際上,傳輸層的tcp是基於網路層的ip協議的,而應用層的http協議又是基於傳輸層的tcp協議的,而socket本身不算是協議,就像上面所說,它只是提供了乙個針對tcp或者udp程式設計的介面。

一、什麼是tcp連線的三次握手

第一次握手:客戶端傳送syn包(synchronous 同步的; sɪŋkrənəs,

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的資料收發進行驗證,比如傳送方對每個資料報進行編號然後由接收方進行驗證。

1 Socket網路程式設計

1.借助伺服器實現小寫轉大寫的程式 客戶端 傳送任意小寫字母到伺服器端。伺服器端 接收小寫字母,轉為大寫,回傳給客戶端,然後客戶端顯示到螢幕。結構體struct sockaddr in的標頭檔案 include toupper 函式標頭檔案 define serv ip 127.0.0.1 ip位址...

網路程式設計(1) Socket收發

短連線 只進行一次收發就是短連線 長連線 傳送訊息後不關閉就是長連線,但會存在粘包等問題。接收 可以寫入乙個迴圈一直接收 trycatch exception e finally if outputstream null catch ioexception e catch exception e 沒...

網路協議棧1 socket函式呼叫之前

client 中,第乙個被呼叫的函式是socket 在這個函式被呼叫之前,系統做了什麼事情,讓socket 可以正常呼叫?首先,socket函式實際上是乙個系統呼叫,它是核心中的 我們應用層通過系統呼叫,呼叫了系統的函式。其次,在系統啟動時,已經呼叫sock init 對socket進行了初始化,在...