谈谈tcp/ip协议
對于這個問題我想分3點來談tcp/ip協(xié)議,網(wǎng)絡(luò)接口api,常見問題和處理方法
說到tcp/ip協(xié)議就不得不說tcp建立連接的3次握手和斷開連接的4次握手以及tcp狀態(tài)轉(zhuǎn)換圖
客戶端發(fā)送一個syn帶初始序號M請求建立連接并且狀態(tài)由close轉(zhuǎn)換為syn_send,此時客戶端為半連接;服務(wù)端收到回復(fù)一個syn+ack,其中syn初始序號為N,ack確認序號為M+1;并且狀態(tài)由close轉(zhuǎn)換為syn_received,此時服務(wù)端為半連接;客戶端收到后回復(fù)ack帶確認序號為N+1,狀態(tài)由syn_send轉(zhuǎn)換為established,服務(wù)端收到后狀態(tài)由syn_received轉(zhuǎn)換為established,至此,tcp3次握手完成;假設(shè)客戶端發(fā)起斷開連接,客戶端發(fā)送fin帶初始序號J,狀態(tài)由established轉(zhuǎn)換為fin_wait_1;服務(wù)端收到后回復(fù)ack帶確認序號J+1,狀態(tài)由established轉(zhuǎn)換為close_wait狀態(tài);客戶端收到后發(fā)送fin帶初始序號K,狀態(tài)由fin_wait_1轉(zhuǎn)換為fin_wait_2狀態(tài);服務(wù)端收到后回復(fù)ack帶確認序號K+1,狀態(tài)由close_wait狀態(tài)轉(zhuǎn)換為last_ack狀態(tài);客戶端收到ack后狀態(tài)由fin_wait_2轉(zhuǎn)換為time_wait狀態(tài),并在等待2MSL(2倍的最大報文段生存時間,msl為30秒,1分鐘,2分鐘)后進入close狀態(tài);服務(wù)端收到ack后進入close狀態(tài),否則重發(fā)fin,因為客戶端處在time_wait狀態(tài),可以繼續(xù)收到fin并回復(fù)ack。實際上建立連接的第二步講syn和ack合并了,所以是3次握手,否則也是4次;為什么不是2次呢,因為tcp是全雙工,允許數(shù)據(jù)收發(fā),所以要分別發(fā)送與接收,關(guān)閉時也要關(guān)閉發(fā)送和接收,發(fā)出fin意味著關(guān)閉了這端的數(shù)據(jù)發(fā)送。
tcp為什么可以保證到達和有序,udp為什么不行
tcp包頭中由序列號,接收數(shù)據(jù)包講根據(jù)序號列排序保證數(shù)據(jù)有序到達,tcp由ack和超時機制,可以在沒有收到確認ack時重傳數(shù)據(jù)包,保證數(shù)據(jù)到達,而udp這沒有這些特性
ip分片,tcp分段,udp數(shù)據(jù)報
ip包有最大長度限制,對于從傳輸層發(fā)送的超過mtu的數(shù)據(jù)包ip協(xié)議棧將會分片處理,對于tcp對于應(yīng)用層發(fā)送的數(shù)據(jù),tcp是發(fā)送數(shù)據(jù)流,超過了mss則會分為多個tcp包發(fā)送,對于udp則是發(fā)送數(shù)據(jù)報,應(yīng)用成發(fā)送和接收都是根據(jù)整體報文大小收發(fā),過大則會引起ip層分片,而udp的網(wǎng)絡(luò)層并不分包處理。
網(wǎng)絡(luò)接口api,主要講listen第二個參數(shù),linger,keepalive,shutdown,useaddr,useport
bsd套接字在實現(xiàn)tcp3次握手的時候分為兩個隊列,未完成3次握手的連接和完成3次握手的連接,listen的第二個參數(shù)就是指完成3次握手隊列的長度(linux下實現(xiàn)為兩個隊列的總和),收到一個syn,內(nèi)核會放入未完成隊列等待握手完成,對于完成握手的連接,則從未完成隊列移到完成隊列,然后應(yīng)用程序調(diào)用accept接受連接則是從完成隊列種取出連接。
設(shè)置linger選項,將告訴底層,若有數(shù)據(jù)發(fā)送,將延遲套接字關(guān)閉,等待數(shù)據(jù)完成后在關(guān)閉套接字。
設(shè)置keepalive選項,將使用tcp自帶的心跳機制,周期性發(fā)送心跳包。
調(diào)用shutdown而不是close,發(fā)出fin的意義在于完成了這端的數(shù)據(jù)發(fā)送,關(guān)閉發(fā)送,但是仍然可以接收數(shù)據(jù)。
設(shè)置useaddr與useport選項,將允許使用本地處于2MSL狀態(tài)的地址和端口
dos攻擊與防御方法
什么是前攝器模式,什么是反應(yīng)器模式
同步,異步,阻塞,非阻塞的概念區(qū)分
iocp原理,epoll原理,什么是邊緣觸發(fā),什么是水平觸發(fā)
說說boost的asio和ace的兩種模式使用
總結(jié)
以上是生活随笔為你收集整理的谈谈tcp/ip协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。