TCP UDP及socket編程學習(二)

Linux socket編程


基本流程
準備階段
Server
1. 調用socket函數,創建某一類型的socket
2. 調用listen函數,設置傾聽隊列的長度,爲接受來自client的請求做準備
3. 調用accept函數,開始在所綁定的端口傾聽來自client端的連接請求
     如果socket被設置爲阻塞,那麼accept將被阻塞,進程被掛起,直到有client連接

Client
1. 調用socket函數,創建某一類型(和server一樣)的socket
2. 調用connect函數,向server發起連接請求
     連接的報文包含了client端的初始的序號SYN a 和 MSS=1460信息(最大數據段的大小)

server接收到client的連接請求後,server從accept函數返回,server向client發送server端的初始序號SYN b,和對client端的SYN a的確認ACK=a+1,還有最大數據段大小 MSS
client接收到server的迴應時,將發出對server請求的迴應ACK=b+1。然後client從connect函數中返回
server接收到client端響應時,從accept函數返回

發送數據階段
雙方使用write將要發送的數據寫到TCP緩衝區,read從TCP緩衝區讀出


關閉連接

雙方發送完數據後,close關閉socket描述符

client調用close函數,client的TCP層發送FIN控制信息的數據段,server端接收到client的FIN關閉連接請求,對client端的FIN的確認,server端的讀管道被關閉,從這個TCP連上的read將返回0。

server調用close函數,發送關閉請求FIN,client發送確認信息,進入CLOSE狀態,server接收到確認信息,server進入CLOSE狀態,此時連接關閉。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章