導航:首頁 > IDC知識 > tcp伺服器流程

tcp伺服器流程

發布時間:2020-11-24 10:51:59

1、TCP協議的通訊過程

你大概說的是3步握手吧,這跟傳真機的5部握手很類似。
下面的資料希望對你有用

TCP/IP 是很多的不同的協議組成,實際上是一個協議組,TCP 用戶數據報表協議(也

稱作TCP 傳輸控制協議,Transport Control Protocol。可靠的主機到主機層協議。這里要先

強調一下,傳輸控制協議是OSI 網路的第四層的叫法,TCP 傳輸控制協議是TCP/IP 傳輸的

6 個基本協議的一種。兩個TCP 意思非相同。)。TCP 是一種可靠的面向連接的傳送服務。

它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據

被作為無結構的位元組流。通過每個TCP 傳輸的欄位指定順序號,以獲得可靠性。是在OSI

參考模型中的第四層,TCP 是使用IP 的網間互聯功能而提供可靠的數據傳輸,IP 不停的把

報文放到網路上,而TCP 是負責確信報文到達。在協同IP 的操作中TCP 負責:握手過程、

報文管理、流量控制、錯誤檢測和處理(控制),可以根據一定的編號順序對非正常順序的

報文給予從新排列順序。關於TCP 的RFC 文檔有RFC793、RFC791、RFC1700。

在TCP 會話初期,有所謂的「三握手」:對每次發送的數據量是怎樣跟蹤進行協商使

數據段的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完

畢後何時撤消聯系,並建立虛連接。為了提供可靠的傳送,TCP 在發送新的數據之前,以

特定的順序將數據包的序號,並需要這些包傳送給目標機之後的確認消息。TCP 總是用來

發送大批量的數據。當應用程序在收到數據後要做出確認時也要用到TCP。由於TCP 需要

時刻跟蹤,這需要額外開銷,使得TCP 的格式有些顯得復雜。下面就讓我們看一個TCP 的

經典案例,這是後來被稱為MITNICK 攻擊中KEVIN 開創了兩種攻擊技術:

TCP 會話劫持

SYN FLOOD(同步洪流)

在這里我們討論的時TCP 會話劫持的問題。

先讓我們明白TCP 建立連接的基本簡單的過程。為了建設一個小型的模仿環境我們假

設有3 台接入互聯網的機器。A 為攻擊者操縱的攻擊機。B 為中介跳板機器(受信任的服務

器)。C 為受害者使用的機器(多是伺服器),這里把C 機器鎖定為目標機器。A 機器向B

機器發送SYN 包,請求建立連接,這時已經響應請求的B 機器會向A 機器回應SYN/ACK

表明同意建立連接,當A 機器接受到B 機器發送的SYN/ACK 回應時,發送應答ACK 建立

A 機器與B 機器的網路連接。這樣一個兩台機器之間的TCP 通話信道就建立成功了。

B 終端受信任的伺服器向C 機器發起TCP 連接,A 機器對伺服器發起SYN 信息,使

C 機器不能響應B 機器。在同時A 機器也向B 機器發送虛假的C 機器回應的SYN 數據包,

接收到SYN 數據包的B 機器(被C 機器信任)開始發送應答連接建立的SYN/ACK 數據包,

這時C 機器正在忙於響應以前發送的SYN 數據而無暇回應B 機器,而A 機器的攻擊者預

測出B 機器包的序列號(現在的TCP 序列號預測難度有所加大)假冒C 機器向B 機器發送

應答ACK 這時攻擊者騙取B 機器的信任,假冒C 機器與B 機器建立起TCP 協議的對話連

接。這個時候的C 機器還是在響應攻擊者A 機器發送的SYN 數據。

TCP 協議棧的弱點:TCP 連接的資源消耗,其中包括:數據包信息、條件狀態、序列

號等。通過故意不完成建立連接所需要的三次握手過程,造成連接一方的資源耗盡。

通過攻擊者有意的不完成建立連接所需要的三次握手的全過程,從而造成了C 機器的

資源耗盡。序列號的可預測性,目標主機應答連接請求時返回的SYN/ACK 的序列號時可預

測的。(早期TCP 協議棧,具體的可以參見1981 年出的關於TCP 雛形的RFC793 文檔)

TCP 頭結構

TCP 協議頭最少20 個位元組,包括以下的區域(由於翻譯不禁相同,文章中給出

相應的英文單詞):

TCP 源埠(Source Port):16 位的源埠其中包含初始化通信的埠。源埠和

源IP 地址的作用是標示報問的返回地址。

TCP 目的埠(Destination port):16 位的目的埠域定義傳輸的目的。這個埠指

明報文接收計算機上的應用程序地址介面。

TCP 序列號(序列碼,Sequence Number):32 位的序列號由接收端計算機使用,重

新分段的報文成最初形式。當SYN 出現,序列碼實際上是初始序列碼(ISN),而第一個數

據位元組是ISN+1。這個序列號(序列碼)是可以補償傳輸中的不一致。

TCP 應答號(Acknowledgment Number):32 位的序列號由接收端計算機使用,重

組分段的報文成最初形式。,如果設置了ACK 控制位,這個值表示一個准備接收的包的序

列碼。

數據偏移量(HLEN):4 位包括TCP 頭大小,指示何處數據開始。

保留(Reserved):6 位值域,這些位必須是0。為了將來定義新的用途所保留。

標志(Code Bits):6 位標志域。表示為:緊急標志、有意義的應答標志、推、重置

連接標志、同步序列號標志、完成發送數據標志。按照順序排列是:URG、ACK、PSH、

RST、SYN、FIN。

窗口(Window):16 位,用來表示想收到的每個TCP 數據段的大小。

校驗位(Checksum):16 位TCP 頭。源機器基於數據內容計算一個數值,收信息機

要與源機器數值結果完全一樣,從而證明數據的有效性。

優先指針(緊急,Urgent Pointer):16 位,指向後面是優先數據的位元組,在URG

標志設置了時才有效。如果URG 標志沒有被設置,緊急域作為填充。加快處理標示為緊急

的數據段。

選項(Option):長度不定,但長度必須以位元組。如果沒有選項就表示這個一位元組

的域等於0。

填充:不定長,填充的內容必須為0,它是為了數學目的而存在。目的是確保空

間的可預測性。保證包頭的結合和數據的開始處偏移量能夠被32 整除,一般額外的零以保

證TCP 頭是32 位的整數倍。

標志控制功能

URG:緊急標志

緊急(The urgent pointer) 標志有效。緊急標志置位,

ACK:確認標志

確認編號(Acknowledgement Number)欄有效。大多數情況下該標志位是置位的。

TCP 報頭內的確認編號欄內包含的確認編號(w+1,Figure:1)為下一個預期的序列編號,同

時提示遠端系統已經成功接收所有數據。

PSH:推標志

該標志置位時,接收端不將該數據進行隊列處理,而是盡可能快將數據轉由應用

處理。在處理telnet 或rlogin 等交互模式的連接時,該標志總是置位的。

RST:復位標志

復位標志有效。用於復位相應的TCP 連接。

SYN:同步標志

同步序列編號(Synchronize Sequence Numbers)欄有效。該標志僅在三次握手建立

TCP 連接時有效。它提示TCP 連接的服務端檢查序列編號,該序列編號為TCP 連接初始端

(一般是客戶端)的初始序列編號。在這里,可以把TCP 序列編號看作是一個范圍從0 到4,

294,967,295 的32 位計數器。通過TCP 連接交換的數據中每一個位元組都經過序列編號。

在TCP 報頭中的序列編號欄包括了TCP 分段中第一個位元組的序列編號。

FIN:結束標志

帶有該標志置位的數據包用來結束一個TCP 回話,但對應埠仍處於開放狀態,

准備接收後續數據。

服務端處於監聽狀態,客戶端用於建立連接請求的數據包(IP packet)按照TCP/IP

協議堆棧組合成為TCP 處理的分段(segment)。

分析報頭信息: TCP 層接收到相應的TCP 和IP 報頭,將這些信息存儲到內存中。

檢查TCP 校驗和(checksum):標準的校驗和位於分段之中(Figure:2)。如果檢驗

失敗,不返回確認,該分段丟棄,並等待客戶端進行重傳。

查找協議控制塊(PCB{}):TCP 查找與該連接相關聯的協議控制塊。如果沒有找

到,TCP 將該分段丟棄並返回RST。(這就是TCP 處理沒有埠監聽情況下的機制) 如果該

協議控制塊存在,但狀態為關閉,服務端不調用connect()或listen()。該分段丟棄,但不返

回RST。客戶端會嘗試重新建立連接請求。

建立新的socket:當處於監聽狀態的socket 收到該分段時,會建立一個子socket,

同時還有socket{},tcpcb{}和pub{}建立。這時如果有錯誤發生,會通過標志位來拆除相應

的socket 和釋放內存,TCP 連接失敗。如果緩存隊列處於填滿狀態,TCP 認為有錯誤發生,

所有的後續連接請求會被拒絕。這里可以看出SYN Flood 攻擊是如何起作用的。

丟棄:如果該分段中的標志為RST 或ACK,或者沒有SYN 標志,則該分段丟棄。

並釋放相應的內存。

發送序列變數

SND.UNA : 發送未確認

SND.NXT : 發送下一個

SND.WND : 發送窗口

SND.UP : 發送優先指針

SND.WL1 : 用於最後窗口更新的段序列號

SND.WL2 : 用於最後窗口更新的段確認號

ISS : 初始發送序列號

接收序列號

RCV.NXT : 接收下一個

RCV.WND : 接收下一個

RCV.UP : 接收優先指針

IRS : 初始接收序列號

當前段變數

SEG.SEQ : 段序列號

SEG.ACK : 段確認標記

SEG.LEN : 段長

SEG.WND : 段窗口

SEG.UP : 段緊急指針

SEG.PRC : 段優先順序

CLOSED 表示沒有連接,各個狀態的意義如下:

LISTEN : 監聽來自遠方TCP 埠的連接請求。

SYN-SENT : 在發送連接請求後等待匹配的連接請求。

SYN-RECEIVED : 在收到和發送一個連接請求後等待對連接請求的確認。

ESTABLISHED : 代表一個打開的連接,數據可以傳送給用戶。

FIN-WAIT-1 : 等待遠程TCP 的連接中斷請求,或先前的連接中斷請求的確認。

FIN-WAIT-2 : 從遠程TCP 等待連接中斷請求。

CLOSE-WAIT : 等待從本地用戶發來的連接中斷請求。

CLOSING : 等待遠程TCP 對連接中斷的確認。

LAST-ACK : 等待原來發向遠程TCP 的連接中斷請求的確認。

TIME-WAIT : 等待足夠的時間以確保遠程TCP 接收到連接中斷請求的確認。

CLOSED : 沒有任何連接狀態。

TCP 連接過程是狀態的轉換,促使發生狀態轉換的是用戶調用:OPEN,SEND,

RECEIVE,CLOSE,ABORT 和STATUS。傳送過來的數據段,特別那些包括以下標記的數

據段SYN,ACK,RST 和FIN。還有超時,上面所說的都會時TCP 狀態發生變化。

序列號

請注意,我們在TCP 連接中發送的位元組都有一個序列號。因為編了號,所以可以

確認它們的收到。對序列號的確認是累積性的。TCP 必須進行的序列號比較操作種類包括

以下幾種:

①決定一些發送了的但未確認的序列號。

②決定所有的序列號都已經收到了。

③決定下一個段中應該包括的序列號。

對於發送的數據TCP 要接收確認,確認時必須進行的:

SND.UNA = 最老的確認了的序列號。

SND.NXT = 下一個要發送的序列號。

SEG.ACK = 接收TCP 的確認,接收TCP 期待的下一個序列號。

SEG.SEQ = 一個數據段的第一個序列號。

SEG.LEN = 數據段中包括的位元組數。

SEG.SEQ+SEG.LEN-1 = 數據段的最後一個序列號。

如果一個數據段的序列號小於等於確認號的值,那麼整個數據段就被確認了。而

在接收數據時下面的比較操作是必須的:

RCV.NXT = 期待的序列號和接收窗口的最低沿。

RCV.NXT+RCV.WND:1 = 最後一個序列號和接收窗口的最高沿。

SEG.SEQ = 接收到的第一個序列號。

SEG.SEQ+SEG.LEN:1 = 接收到的最後一個序列號。

2、TCP連接建立過程

在TCP/IP中,TCP協議通過三次握手來建立連接,從而提供可靠的連接服務。

第一次握手:建立連接後,客戶端向伺服器發送syn包(syn=j),進入SYN_SEND狀態,等待伺服器確認;

第二次握手:當伺服器收到syn包時,必須確認客戶端的syn(ack=j+1)並發送一個syn包(syn=k),即syn+ack包。此時,伺服器進入SYN_RECV狀態。

第三次握手:SYN+ACK包,客戶端收到伺服器端發來的確認包ACK(ACK=k+1),來發送這個包來發送,客戶端和伺服器端進入建立狀態,完成三路握手。

(2)tcp伺服器流程擴展資料:

重要概念:

無關的隊列:三重握手協議、伺服器維護一個獨立隊列,為每個客戶的SYN包創建一個條目(SYN=j)表明伺服器已經收到了SYN包和確認發送到客戶,等待客戶的確認包。

這些條目標識的連接處於伺服器的Syn_RECV狀態,當伺服器接收到客戶機的確認包時,它將刪除該條目,伺服器將進入已建立的狀態。

Backlog參數:表示要保持的未連接隊列的最大數量。

當伺服器發送synack包時,如果沒有收到客戶端確認包,伺服器將進行第一次重傳,等待一段時間仍然沒有收到客戶端確認包,然後進行第二次重傳。

如果重傳號超過系統指定的最大重傳號,系統將從半連接隊列中刪除連接信息。注意每個重傳的等待時間可能不相同。

半連接生存時間:指半連接隊列中條目的最長生存時間,即從接收SYN包到確認無效消息的最長服務時間。這個時間值是所有重傳請求包的最長等待時間的總和。有時我們也稱半連接生存時間為超時時間,SYN_RECV生存時間。

3、公網的TCP客戶端與內網的TCP伺服器連接如何實現?

被動發起的。你訪問伺服器時,把自己的IP和埠信息已經提交到伺服器了,之後伺服器再按你這個信息,返回數據。
請給我的回答採納,謝謝!

4、TCP/IP建立連接的步驟是什麼?

TCP協議建立連接的過程:
在TCP/IP協議中,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狀態,完成三次握手。

完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念:

未連接隊列:在三次握手協議中,伺服器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
Backlog參數:表示未連接隊列的最大容納數目。

SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。

半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和,有時也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。

5、TCP socket 通信的流程?

server端:socket, bind, listen, accept, read, write
client端:socket, connect, write, read

更詳細的,google,搜,socket 編程

6、簡述TCP三次握手四次揮手過程及各過程中客戶端和伺服器端的狀態。

三次握手:
第一次握手:客戶端發送syn包(syn=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
四次揮手
與建立連接的「三次握手」類似,斷開一個TCP連接則需要「四次握手」。
第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但是,此時主動關閉方還可 以接受數據。
第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。

7、配置TCP/IP協議的步驟

1.右鍵網上鄰居屬性
2.右鍵本地連接屬性
3.單擊TCP/IP屬性
4.進入界面 輸入IP地址,掩碼一般為255.255.255.0
輸入網關,輸入DNS伺服器地址
5.確定,完成

8、TCP伺服器是什麼

TCP指的是傳輸控制協議。它是一種面向連接導向的、可靠地及基於位元組流的運輸層通信協議。而在接觸TCP中還有UDP,UDP也是一項重要的傳輸協議。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端
1、提供IP環境下的數據可靠傳輸(一台計算機發出的位元組流會無差錯的發往網路上的其他計算機,而且計算機A接收數據包的時候,也會向計算機B回發數據包,這也會產生部分通信量),有效流控,全雙工操作(數據在兩個方向上能同時傳遞),多路復用服務,是面向連接,端到端的傳輸;
2、面向連接:正式通信前必須要與對方建立連接。事先為所發送的數據開辟出連接好的通道,然後再進行數據發送,就像打電話。
3、TCP支持的應用協議:FTP 文件傳送、RLogin 遠程登錄、SMTP POP3 電子郵件、NFS 網路文件系統、遠程列印、遠程執行、名字伺服器終端伺服器等服務類型。

9、TCP連接的步驟

syn是同步信號,ack是應答信號
第一步客戶機向伺服器發送一個TCP數據包,表示請求建內立連接. 為此,客戶端容將數據包的SYN位設置為1。
第二步伺服器收到了數據包,並從SYN位為1知道這是一個建立請求的連接.於是伺服器也向客戶端發送一個TCP數據包.因為是響應客戶機的請求,於是伺服器設置ACK為1。
第三步客戶機收到了伺服器的TCP,並從ACK為1知道是從伺服器來的確認信息.於是客戶機也向伺服器發送確認信息.客戶機設置ACK=1
最後一步伺服器受到確認信息,也完成連接

10、TCP/IP建立連接的步驟是什麼

在TCP/IP協議中,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狀態,完成三次握手。

完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念:

未連接隊列:在三次握手協議中,伺服器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
Backlog參數:表示未連接隊列的最大容納數目。

SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。

半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。

與tcp伺服器流程相關的知識