TCP IP高效程式設計》讀書筆記

2022-02-19 17:03:20 字數 1403 閱讀 2527

技巧6:tcp是一種流協議

tcp是乙個流協議,跟流水一樣,是沒有邊界的,也就是說如果b端第一次傳送100個位元組,第二次傳送200個位元組,當我們讀取的時候,是根據緩衝區的大小來看讀取結果的,如果我們緩衝區大於300,那麼將會把全部讀取出來,如果小於300,例如150,則會讀取第乙個和第二個的50個位元組,這樣需要我們去處理邊界的問題,一般是通過加訊息頭來確定,而udp則沒有這個問題

技巧9:tcp是個可靠的,但不是完全可靠的

1.假設乙個a主機tcp資料報傳送給b主機,b主機成功收到,但是還沒有複製到應用程式,這個時候b主機已經把ack已經發給了傳送a主機,a主機確認b主機已經接收到資料報,但是b注意在將資料複製到應用程式的時候,崩潰了,應用程式並沒有收到資料報。tcp不能保證應用程式b主機收到所有資料,只能保證b主機收到的資料都是無損且按序的(據我所致tcp收到的資料也不能保證無損,因為tcp使用的校驗機制不是個很好的演算法)

2.網線突然中斷,tcp無法檢測到,除非中間路由器傳送乙個icmp報文,否則無法知道網路是否終端

3.對方突然崩潰,但是自己的應用程式剛好阻塞了,比如a主機和b主機,a主機應用程式突然崩潰了,這個時候a主機傳送fin給b主機,但是b主機在執行fgets函式,被阻塞了,無法處理fin

技巧10:tcp不是輪詢的

tcp無法立即知道連線是否丟失(技巧9說的情況),這樣做的原因:

1.是減少網路頻寬的耗費

2.靈活,由應用程式來決定是否提供這個功能

3.連線中斷可能只是暫時的,比如可能通過查詢另外一條路由器路徑來修復連線終端的問題

tcp有keep-live機制,但是對於應用程式來說基本沒什麼用,主要是通過傳送乙個包給對方,如果對方收到會傳送乙個ack給本機,如果超過一定時間沒回應則被認為網路中斷(也可能要超過一定的次數沒回應,bsd是9次沒回應則是認為連線終端,兩次傳送間隔75秒)

一般都是利用心跳來解決應用程式是否中斷的問題,有時候會獨立乙個埠來使用心跳,這樣做的好處是可以防止心跳訊息與其他訊息混雜一起,並且可以防止丟失(技巧6),<技巧16:

shutdown(int fd,int how)

how = 0:

關閉連線的接收方,即不再接收資料,如果之後有接收資料的操作,則返回eof

how = 1:

關閉傳送方的連線,在將緩衝區的資料傳送完以後,才會傳送fin給對方,在緩衝區傳送完之前,寫操作將錯誤,這個就是所謂的half  close

how = 2:

關閉雙方的連線,即shutdown(fd,1)和shutdown(fd,2),但和close不同,shutdown並沒有關閉套接字,也沒有釋放資源,close會減少sockfd的引用技術,只有當引用技術為0的時候對方才會收到fin,而shutdown則能保證傳送fin給對方

TCP IP高效程式設計》筆記

1 socket socket int domain,int type,int protocol protocol欄位說明了應該在套接字上使用哪種協議。對tcp ip來說,這幾個字段通常都由套接字型別隱式說明,引數被設定為零。在某些情況下,比如對原始套接字來說,有幾種可能的協議,就要指定希望使用的協...

TCP IP詳解讀書筆記

igmp協議 icmp資料報結構 udphdr結構 tcphdr結構 iphdr結構 tcp ip詳解讀書筆記 第13章igmp internet組管理協議 tcp ip詳解讀書筆記 第12章 廣播和多播 tcp ip詳解讀書筆記 第11章 udp 使用者資料報協議 tcp ip詳解讀書筆記 第10...

《如何高效學習》讀書筆記

一.學習策略 道 2.學習順序 獲取 理解 拓展 糾錯 應用 覆盤。獲取知識要有選擇,並且制定學習計畫 拓展,知識的關聯 覆盤,檢查獲取 理解 拓展 糾錯 應用中的錯誤。二.學習方法 術 breakthrough rapid reading 指讀法注意事項 這一章節的主要觀點是什麼?怎樣記住主要觀點...