tcp三次握手的過程中,接受發生在三次握手的哪乙個階段?
答案是:接受過程發生在三次握手之後,三次握手完成後,客戶端和伺服器就建立了tcp連線並可以進行資料互動了這時可以呼叫接受函式獲得此連線。也許這個圖描述的更加清晰。
我們今天就學習下tcp接受
posix程式設計師的manua對tcp接受的說明
接受函式的原型是:
int accept(int socket,struct sockaddr * restrict address,socklen_t * restrict address_len);
功能描述的:
accept()函式將提取掛起連線佇列上的第乙個連線,使用與指定套接字相同的套接字型別協議和位址族建立新套接字,並為該套接字分配新的檔案描述符。
posix程式設計師手冊還說了這麼兩句話
接受的套接字本身不能接受更多連線。原始套接字保持開啟狀態,可以接受更多連線。
新建的這個插座自身是無法再接收連線了,但是最開始的那個插座仍然是處於開放狀態,而且可以接收更多連線。
如果偵聽佇列沒有連線請求且未在套接字的檔案描述符上設定o_nonblock,則accept()將阻塞,直到存在連線。如果listen()佇列沒有連線請求並且在套接字的檔案描述符上設定了o_nonblock,則accept()將失敗並將errno設定為[eagain]或[ewouldblock]。
意思就是:在連線的監聽隊列為空並且o_nonblock沒有置位的情況下,accpet頭是阻塞的如果監聽隊列為空,但是o_nonblock置位的情況下,accpet頭會立即返回。
tcp接受是三次握手以後,接受正確返回以後tcp伺服器可以和客戶端的連線已建立並可以通訊了
注意區分listen socket和accept socket。
socket分為兩種,一種套接字正如接受的引數sockfd,它是listen socket,在呼叫listen函式之後,乙個socket會從主動連線的套接字變為聽套套接字;而接受返回是乙個連線套接字,它代表著乙個網路已經存在的點對點連線。以後的資料互動就是基於這個連線套接字,而之前的那個監聽套接字可以繼續工作,從而接接更多的連線。
接受缺省會阻塞程序,直到有乙個客戶連線建立後返回
tcp的三次握手 傳輸層 TCP 三次握手
使用tcp協議進行通訊的雙方必須先建立連線,然後才能開始傳輸資料。為了確保連線雙方可靠性,在雙方建立連線時,tcp協議採用了三次握手策略。如圖 客戶端傳送帶有syn標誌的連線請求報文段,然後進入syn send狀態,等待服務端的確認。服務端接收到客戶端的syn報文段後,需要傳送ack資訊對這個syn...
TCP的三次握手
tcp的三次握手分類 網路分析 第一步 請求方向服務方傳送syn,表示想發起一次tcp連線。我們假定這次的序列號是某個數值x 初始的ack號為0 trust target syn seq x ack 0 第二步 服務方產生syn,ack響應,並向請求方傳送ack,ack的值為x 1,表示資料成功接收...
TCP的三次握手
tcp被稱為可靠的資料傳輸協議,主要是通過許多機制來實現的,其中最重要的就是三次握手的功能。如何利用tcp的報頭來確認這個資料報已經被對方接受,並進一步與對方主機實現連線呢?看下圖 我們把上述過程分為a.b.c.d四個階段來說明 a 資料報發起 當客戶端想要對伺服器端發起連線時,就必須要送出乙個要求...