計算曆:7e3 年 af 月 5e 日。天氣:晴。在 Chrome
實習的第一天。緩存
終於擺脫學校開始在 Chrome
實習啦,真是不錯的一天,網絡很好,沒有丟包狀況出現,現實的狀況也沒老師說的那麼糟糕嘛。網絡
前輩的工做臺也太炫酷了吧,就是不知道在 FireFox
實習的同窗怎麼樣,IE
那的同窗,估計是手動操做吧!哈哈!!tcp
今天用這工做臺發了很多報文,工做臺用起來比學校裏手動操做報文快了很多,但基礎不能忘,今天沒什麼須要記錄的,就複習下 TCP
報文基礎吧。spa
TCP
,Transmission Control Protocol
,傳輸控制協議,傳輸層的一個協議,其目的爲:在複雜網絡狀況下(不可靠的 IP
協議下),提供一個可靠的字節流傳輸通道。指針
可靠意味着數據的完整,也就是,在網絡連通的狀況下,排除一切可能的錯誤,將應用層的數據完完整整的發送到對方的應用層。code
那麼如何排除錯誤,對於未到達對方的報文(包括可能已經到達但對方未返回確認的),進行不斷的重發!直到對方確認收到爲止。blog
OK
如今先過一過基礎。進程
首先,先複習下報文的組成:資源
一個完整的報文包含以上信息,按照順序有以下做用:rem
區域 | 佔用字節 | 含義 |
---|---|---|
源端口 | 16 | TCP 通道所在進程的端口號,也就是個人工做間的門牌號。 |
目標端口 | 16 | TCP 通道另外一側進程所在的端口號,估計也是和我同樣的工做間。 |
序號 | 32 | 當前報文中所攜帶數據中第一個字節的序號,對方會根據該序號進行數據的拼接,號碼是多少不重要,重要的是要連續。 |
確認序號 | 32 | 確認報文中使用,告知對方該序號前的報文已成功接收。 |
數據偏移 | 4 | 因爲 TCP 首部長度不肯定,對方根據該字段就能夠知道 TCP 首部長度。 |
保留位 | 6 | 目前未使用,置 0 便可。 |
URG |
1 | 緊急標誌位,標誌該報文是否須要優先處理,主要是對本身這邊的進程起做用。 |
ACK |
1 | 代表當前爲確認報文,告知對方確認序號以前的數據已完整接收。 |
PSH |
1 | 推送標誌位,通知進程將將緩存區的數據推送出去。 |
RST |
1 | 通道重置標誌位,通知對方重置 TCP 通道。 |
SYN |
1 | 同步標誌位,通知對方開啓 TCP 通道。 |
FIN |
1 | 結束標誌位,通知對方請求單向關閉 TCP 通道。 |
窗口 | 16 | 告訴對方,本身目前還有多少的緩存區可使用,避免 TCP 報文由於沒有緩衝區而不接受的狀況。 |
校驗和 | 16 | 驗證當前數據的完整性,由己方生成,並在對方校驗。 |
緊急指針 | 16 | 與 URG 配合使用,標誌緊急數據的大小。 |
選項 | 不固定 | 一些其餘選項,爲 TCP 發展後的一些補充。 |
填充 | 不固定 | 使得 TCP 報文首部長度爲 32 的整數倍。 |
數據 | 不固定 | 須要傳輸的數據。 |
其中選項中還有很多內容,下次主要複習這塊,這裏先過。
TCP
既然表現爲一個通道,那麼通道的鏈接與釋放固然是重中之重。
網絡是個複雜的環境,一個穩定的通道須要雙方都清楚對方已經本身發送和接收的能力,這就是三次握手的由來。
第一次握手(客戶端請求創建鏈接):
* | 客戶端發送能力 | 客戶端接收能力 | 服務端發送能力 | 服務端接收能力 |
---|---|---|---|---|
客戶端 | × | × | × | × |
服務端 | √ | × | × | √ |
第二次握手(服務端收到報文,確認鏈接並請求鏈接):
* | 客戶端發送能力 | 客戶端接收能力 | 服務端發送能力 | 服務端接收能力 |
---|---|---|---|---|
客戶端 | √ | √ | √ | √ |
服務端 | √ | × | × | √ |
第三次握手(客戶端收到報文,確認鏈接):
客戶端 | √ | √ | √ | √ |
服務端 | √ | √ | √ | √ |
至此一個穩定的通道創建成功。
通道的創建須要消耗計算機資源,所以當數據傳輸完畢後,如何進行釋放,也是重要的一環。
如何正確的關閉通道,是咱們須要思考的問題。
一個通道的關閉,和開啓同樣,一個巴掌拍不響,須要雙方都進行確認。
通過四次揮手,通道在雙方都知曉的狀況下銷燬,而不會出現一方銷燬另外一方卻仍存在的狀況,計算機資源也可獲得相應的釋放。
那麼爲什麼不能像創建通道同樣,只進行三次?
很簡單,通道的開啓是雙方同時開啓,而關閉卻不是,當客戶端關閉了通道,僅僅表明客戶端不發送數據了,而服務端卻能夠繼續發送數據,客戶端仍能夠接收數據。
通道的開啓與關閉,實際上是相同的,須要 4
個步驟
只不過通道的開啓過程當中,第 2
步和第 3
步進行了合併。
OK
整理的差很少,這些是基礎,也是最重要的部分,雖然前輩的工做臺會幫忙作掉這些步驟,但萬一機器出故障了呢,做爲 TCP
學院的優等生,我要確保數據始終能到達服務端!!
對了!前輩的工做臺仍是有一些東西沒有用到,那個大屏幕上的信息還沒充分了解,不過也瞭解個大概了,明天在去仔細研究研究。