網路程式設計序列1 理解網路程式設計

2021-07-24 08:46:07 字數 2242 閱讀 8756

常用的tcp/ip協議的三種套接字型別:

流套接字(tcp協議);

資料報套接字(udp協議);

原始套接字(ip、icmo協議);

區別在於:原始套接字可以讀寫核心沒有處理的ip資料報,而流套接字只能讀取tcp協議的資料,資料報套接字只能讀取udp協議的資料。

tcp(transmission

control protocol傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。

在網路七層模型中,我編寫的網路應用程式就位於應用層,而tcp屬於傳輸層,大家知道在應用程式中我們用介面來分離實現,在應用層和傳輸層之間,則是使用套接字來進行分離。它就像是傳輸層為應用層開的乙個小口,應用程式通過這個小口向遠端傳送資料,或者接收遠端發來的資料;

當應用層向tcp層傳送用於網間傳輸的、用8位位元組表示的資料流,tcp則把資料流分割成適當長度的報文段,最大傳輸段大小(mss)通常受該計算機連線的網路的資料鏈路層的最大傳送單元(mtu)限制。之後tcp把資料報傳給ip層,由它來通過網路將包傳送給接收端實體的tcp層。

tcp為了保證報文傳輸的可靠,就給每個包乙個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的位元組發回乙個相應的確認(ack);如果傳送端實體在合理的往返時延(rtt)內未收到確認,那麼對應的資料(假設丟失了)將會被重傳。

1.2.3.1.連線建立

tcp是網際網路中的傳輸層協議,使用三次握手協議建立連線。當主動方發出syn連線請求後,等待對方回答

tcp的三次握手

syn+ack,並最終對對方的syn執行ack確認。這種建立連線的方法可以防止產生錯誤的連線,tcp使用的流量控制協議是可變大小的滑動視窗協議。

tcp三次握手的過程如下:

1.客戶端傳送syn(seq=x)報文給伺服器端,進入syn_send狀態。

2.伺服器端收到syn報文,回應乙個syn(seq=y)ack(ack=x+1)報文,進入syn_recv狀態。

3.客戶端收到伺服器端的syn報文,回應乙個ack(ack=y+1)報文,進入established狀態。

三次握手完成,tcp客戶端和伺服器端成功地建立連線,可以開始傳輸資料了。

1.2.3.2.連線終止

建立乙個連線需要三次握手,而終止乙個連線要經過四次握手,這是由tcp的半關閉(half-close)造成的。具體過程如下圖所示。

tcp連線的終止

(1)某個應用程序首先呼叫close,稱該端執行「主動關閉」(active

close)。該端的tcp於是傳送乙個fin分節,表示資料傳送完畢。

(2)接收到這個fin的對端執行「被動關閉」(passive close),這個fin由tcp確認。

注意:fin的接收也作為乙個檔案結束符(end-of-file)傳遞給接收端應用程序,放在已排隊等候該應用程序接收的任何其他資料之後,因為,fin的接收意味著接收端應用程序在相應連線上再無額外資料可接收。

(3)一段時間後,接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字。這導致它的tcp也傳送乙個fin。

(4)接收這個最終fin的原傳送端tcp(即執行主動關閉的那一端)確認這個fin。[1]

既然每個方向都需要乙個fin和乙個ack,因此通常需要4個分節。

注意:(1) 「通常」是指,某些情況下,步驟1的fin隨資料一起傳送,另外,步驟2和步驟3傳送的分節都出自執行被動關閉那一端,有可能被合併成乙個分節。

(2)在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動資料是可能的,這稱為「半關閉」(half-close)。

(3)當乙個unix程序無論自願地(呼叫exit或從main函式返回)還是非自願地(收到乙個終止本程序的訊號)終止時,所有開啟的描述符都被關閉,這也導致仍然開啟的任何tcp連線上也發出乙個fin。

無論是客戶還是伺服器,任何一端都可以執行主動關閉。通常情況是,客戶執行主動關閉,但是某些協議,例如,http/1.0卻由伺服器執行主動關閉。

udp是osi參考模型中一種無連線的傳輸層協議,它主要用於不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成,提供面向事務的簡單不可靠資訊傳送服務。這裡不作過多陳述。

網路程式設計 1

1.套接字位址結構 套接字程式設計需要指定套接字的位址作為引數,不同的協議族有不同的位址結構定義方式。這些位址結構通常以sockaddr 開頭,每乙個協議族有乙個唯一的字尾,例如對於乙太網,其結構名稱為sockaddr in。1.1 通用套接字位址結構 套接字位址結構 struct sockaddr...

網路程式設計 1

1.前言 公司要為別的公司提供伺服器防護,採用本地環迴,節點 的方法實現對伺服器真實ip進行隱藏。但是有乙個問題 我節點端要建立乙個埠接收對映資料和保活資料,採用固定埠的話,攻擊者很容易通過掃瞄埠來獲取我較多的節點,進行攻擊 2.解決 這裡採用的是通過節點ip來生成乙個隨機埠,客戶端和節點通過這個隨...

網路程式設計1

tcp ip四層模型 應用層 telent,ftp和e mail等 傳輸層 tcp udp 網路層 ip,icmp和igmp 鏈路層 裝置驅動程式及介面卡 如果兩台計算機在不同的網段中,那麼資料從一台計算機到另一台計算機傳輸過程中要經過乙個或多個路由器 鏈路層之下還有物理層,指的是電訊號的傳遞方式,...