## TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是[TCP](https://baike.baidu.com/item/TCP/33012)和[IP](https://baike.baidu.com/item/IP/224599)兩個協議,而是指一個由[FTP](https://baike.baidu.com/item/FTP/13839)、[SMTP](https://baike.baidu.com/item/SMTP/175887)、TCP、[UDP](https://baike.baidu.com/item/UDP/571511)、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。
#### TCP/IP OSI簡易對比

國際標準組織(國際標準化組織)制定了OSI(Open System Interconnection)模型。這個模型把[網絡通信](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1)的工作分為7層,分別是[物理層](https://baike.baidu.com/item/%E7%89%A9%E7%90%86%E5%B1%82),[數據鏈路層](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82),[網絡層](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%B1%82),[傳輸層](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82),會話層,[表示層](https://baike.baidu.com/item/%E8%A1%A8%E7%A4%BA%E5%B1%82)和[應用層](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E5%B1%82)。1至4層被認為是低層,這些層與數據移動密切相關。5至7層是高層,包含應用程序級的數據。每一層負責一項具體的工作,然后把[數據傳送](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%81)到下一層。上一層的協議都以下一層的協議為基礎。
#### TCP/IP

1. 應用層:應用層負責傳送各種**最終形態的數據**,是直接與用戶打交道的層,數據內容按照http協議里要求的格式進行封裝,然后給到下一層,典型協議是HTTP、FTP、DNS等;
2. 傳輸層:負責兩臺設備之間的**數據運輸**,TCP和UDP協議都屬于這層,TCP為兩臺設備傳輸提供高可靠性的數據通信。將應用程序交給它的數據分成合適的小塊交給下面的網絡層,為了提供可靠的服務,TCP采用了超時重傳、發送和接收端到端的確認分組等機制。(三次握手,四次揮手。)
* TCP協議適用于對數據準確性要求高,但是速度可以相對較慢的應用。 比如文件傳輸、收發郵件、web訪問
* UDP協議適用于有實時要求但是對質量要求沒那么高的程序。如直播、實時游戲等;
3. 網絡層:網絡層告訴我們傳輸的時候如何**找到對方**, 主要協議是IP協議,IP協議的作用就是規劃數據可以走哪條路到達對方計算機,并把數據給對方。
4. 連接層(鏈路層):用來處理連接網絡的**硬件部分**。包括控制操作系統、硬件的設備驅 動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等 物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在 鏈路層的作用范圍之內。
##### **數據處理流程**

1. 應用程序處理
* 應用程序會對數據進行編碼處理,編碼成功后,數據不一定馬上被發出。
2. TCP模塊處理
* `TCP`模塊根據應用層的指示,負責建立連接、發送數據以及斷開連接。`TCP`提供將應用層發來的數據順利發送至對端的可靠傳輸。為了實現這一功能,需要在應用層數據的前端附加一個`TCP`首部。(三次握手,四次揮手)
3. IP模塊處理
* `IP`將`TCP`傳過來的數據合起來當做自己的數據,并在前端加上自己的 `IP` 首部。`IP`包生成后,參考路由控制表決定接受此`IP`包的路由或主機。
4. 網絡接口(以太網)處理
* 從`IP`層傳過來的對于以太網來說就是數據。給這些數據附加上以太網首部并進行發送處理,生成的以太網數據包將通過物理層傳輸給接收端。
5. 網絡接口(以太網)處理 - `接收端`
* 主機收到以太網包后,首先從以太網包首部找到 MAC 地址判斷是否為發送給自己的包,若不是則丟棄數據。如果 是發送給自己的包,則從以太網包首部中的類型確定數據類型,再傳給相應的模塊。
6. IP模塊處理
* 從包首部中判斷此`IP`地址是否與自己的`IP`地址匹配,如果匹配則根據首部的協議類型將數據發送給對應的模塊。
7. TCP模塊處理
* 在`TCP`模塊中,首先會計算校驗和判斷數據是否被破壞。然后檢查是否按照序號接收數據。然后檢查端口號,確定具體的應用程序。數據被完整地接收以后,會傳給端口號識別的應用程序。
8. 應用程序處理
* 接收端應用程序會直接接收發送端發送的數據。通過解析數據,展示相應的內容。
- 版本控制之Git簡介
- Git工作流程
- Git工作區、暫存區、版本庫
- Git 指令匯總
- Git 忽略文件規則 .gitignore
- pull request
- HTTP簡介
- HTTP - Keep-Alive
- HTTP緩存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息頭
- TCP/IP
- TCP首部
- IP首部
- IP 協議
- TCP/IP漫畫
- 前端開發規范
- 前端開發規范整理
- 前端未來規劃
- HTML思維導圖
- CSS思維導圖
- 布局
- position,float,display的關系和優先級
- line-height、height、font-size
- 移動端適配
- JS 對象
- JS 原型模式 - 創建對象
- JS 預編譯
- 探索JS引擎
- ES