# TCP/IP
## 1、什么是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協議



總體為:應用層、傳輸層、網絡層和數據鏈路
## 2、為什么TCP/IP可以取代NCP?
>IP是出于網絡層的協議。在上個世紀的時候,網絡層有2種交換模式,一種是[電路交換](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),一種是[分組交換](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)。[電路交換](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)需要實際的物理電路,對線路的穩定性要求高,比如早期的[電話網絡](https://www.baidu.com/s?wd=%E7%94%B5%E8%AF%9D%E7%BD%91%E7%BB%9C&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),最簡單的例子就是[抗日戰爭](https://www.baidu.com/s?wd=%E6%8A%97%E6%97%A5%E6%88%98%E4%BA%89&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)時期中的那種電話,電話線一被剪斷,整個就廢了。而另外一種交換方式[分組交換](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),這種方式是不需要實際[點對點](https://www.baidu.com/s?wd=%E7%82%B9%E5%AF%B9%E7%82%B9&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)的鏈路的,只要能到達目的點,多繞點路也沒有什么影響,一條線斷了,數據可以通過另外的線路進行傳輸,沒有專用線路可言。而IP正是基于這種模式,也可稱為[分組交換](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)中的[數據報](https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE%E6%8A%A5&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)模式。在[貝爾](https://www.baidu.com/s?wd=%E8%B4%9D%E5%B0%94&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)發明交換機之后,這種分組交換方式更為流行,逐漸替代了[電路交換](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)的方式。說到這里,就要談談[數據鏈路層](https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),在IP形成之前,其實有一種ATM技術,這種技術以完美和完善著稱,各項技術包括安全性、穩定性都無懈可擊,到目前很多銀行政府機要可能內部網絡還在采用ATM。但是因為ATM的過于精細和安全也對它的實現帶來了不少問題,高成本就是其中之一,所以ATM大大限制了網絡的發展和普及。這時,IP出現了,IP是基于盡力而為的服務,IP 是無連接的通信協議。它不會占用兩個正在通信的計算機之間的通信線路。這樣,IP 就降低了對網絡線路的需求。每條線可以同時滿足許多不同的計算機之間的通信需要。通過 IP,消息(或者其他數據)被分割為小的獨立的包,并通過因特網在計算機之間傳送。而IP就是負責把包送到目的地的。盡管在數據的可靠性和安全性有所損失,但是其效率大大超越了ATM技術,而且交換機的出現,也順利地解決了廣播沖突、鏈路穩定等種種問題。讓IP得以盛行起來。而之后ICMP、IGMP等IP伴侶的出現,大大提高了IP傳輸的穩定性,讓IP能夠提供超時、目的點不可達、擁塞、路由信息更改等信息反饋。成功讓IP走上了網絡層的巔峰。接下來說TCP,TCP是屬于傳輸層的協議,目前是TCP和UDP共同稱霸傳輸層的協議。TCP提供了信息流控制的方法,采用3步握手進行可靠的數據流傳輸,并且通過維護擁塞窗口和發送窗口保證網絡的通暢,從而提高了數據的準確性,主要運用就在于你的下載文件和文本傳輸中。而UDP恰恰與TCP相反,不保證任何的控制信息,不保證數據的準確性,但是UDP的實時性遠遠好于TCP,在線視頻播放其實多基于UDP.

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



** 在裝包的時候,每一層都會增加一些信息用于傳輸,這部分信息叫做報頭。當上層數據到達本層的時候,會將數據加上報頭打包在一起形成新的數據包繼續往下一層傳遞。拆包的時候就是反著來了,就像俄羅斯套娃一樣,拆完最外面一層得到需要的報頭,向上傳遞。**
**每個分層中,都會對所發送的數據附加一個首部,在這個首部中包含了該層必要的信息,如發送的目標地址以及協議相關信息。通常,為協議提供的信息為包首部,所要發送的內容為數據。在下一層的角度看,從上一層收到的包全部都被認為是本層的數據 **
**網絡中傳輸的數據包由兩部分組成:一部分是協議所要用到的首部,另一部分是上一層傳過來的數據。首部的結構由協議的具體規范詳細定義。在數據包的首部,明確標明了協議應該如何讀取數據。反過來說,看到首部,也就能夠了解該協議必要的信息以及所要處理的數據。包首部就像協議的臉**
* 八個過程
① 應用程序處理
首先應用程序會進行編碼處理,這些編碼相當于 OSI 的表示層功能;
編碼轉化后,郵件不一定馬上被發送出去,這種何時建立通信連接何時發送數據的管理功能,相當于 OSI 的會話層功能。
② TCP 模塊的處理
TCP 根據應用的指示,負責建立連接、發送數據以及斷開連接。TCP 提供將應用層發來的數據順利發送至對端的可靠傳輸。為了實現這一功能,需要在應用層數據的前端附加一個 TCP 首部。
③ IP 模塊的處理
IP 將 TCP 傳過來的 TCP 首部和 TCP 數據合起來當做自己的數據,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,參考路由控制表決定接受此 IP 包的路由或主機。
④ 網絡接口(以太網驅動)的處理
從 IP 傳過來的 IP 包對于以太網來說就是數據。給這些數據附加上以太網首部并進行發送處理,生成的以太網數據包將通過物理層傳輸給接收端。
⑤ 網絡接口(以太網驅動)的處理
主機收到以太網包后,首先從以太網包首部找到 MAC 地址判斷是否為發送給自己的包,若不是則丟棄數據。
如果是發送給自己的包,則從以太網包首部中的類型確定數據類型,再傳給相應的模塊,如 IP、ARP 等。這里的例子則是 IP 。
⑥ IP 模塊的處理
IP 模塊接收到 數據后也做類似的處理。從包首部中判斷此 IP 地址是否與自己的 IP 地址匹配,如果匹配則根據首部的協議類型將數據發送給對應的模塊,如 TCP、UDP。這里的例子則是 TCP。
另外嗎,對于有路由器的情況,接收端地址往往不是自己的地址,此時,需要借助路由控制表,在調查應該送往的主機或路由器之后再進行轉發數據。
⑦ TCP 模塊的處理
在 TCP 模塊中,首先會計算一下校驗和,判斷數據是否被破壞。然后檢查是否在按照序號接收數據。\*\*\*檢查端口號,確定具體的應用程序。數據被完整地接收以后,會傳給由端口號識別的應用程序。
⑧ 應用程序的處理
接收端應用程序會直接接收發送端發送的數據。通過解析數據,展示相應的內容。
## 4、傳輸層中的 TCP 和 UDP
TCP/IP 中有兩個具有代表性的傳輸層協議,分別是 TCP 和 UDP。
* TCP 是面向連接的、可靠的流協議。流就是指不間斷的數據結構,當應用程序采用 TCP 發送消息時,雖然可以保證發送的順序,但還是猶如沒有任何間隔的數據流發送給接收端。TCP 為提供可靠性傳輸,實行“順序控制”或“重發控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網絡利用率等眾多功能。
* UDP 是不具有可靠性的數據報協議,面向無連接的。細微的處理它會交給上層的應用去完成。在 UDP 的情況下,雖然可以確保發送消息的大小,卻不能保證消息一定會到達。因此,應用有時會根據自己的需要進行重發處理。
* TCP 和 UDP 的優缺點無法簡單地、絕對地去做比較:TCP 用于在傳輸層有必要實現可靠傳輸的情況;而在一方面,UDP 主要用于那些對高速傳輸和實時性有較高要求的通信或廣播通信。TCP 和 UDP 應該根據應用的目的按需使用。
------------------------------------------下期分享----------------------------------------
## 5、 接下來由上至下的分析整個TCP/IP協議的工作過程
**應用層作為TCP/IP協議的最上層,其實是我們接觸最多的。**
**由于在傳輸層的傳輸協議大致分成了TCP和UDP,所以在應用層對應的協議也就分成了兩部分**
>運行在TCP協議上的協議:
HTTP(Hypertext Transfer Protocol,超文本傳輸協議),主要用于普通瀏覽。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協議),HTTP協議的安全版本。
FTP(File Transfer Protocol,文件傳輸協議),由名知義,用于文件傳輸。
POP3(Post Office Protocol, version 3,郵局協議),收郵件用。
SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議),用來發送電子郵件。
TELNET(Teletype over the Network,網絡電傳),通過一個終端(terminal)登陸到網絡。
SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。
>運行在UDP協議上的協議:
BOOTP(Boot Protocol,啟動協議),應用于無盤設備。
NTP(Network Time Protocol,網絡時間協議),用于網絡同步。
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),動態配置IP地址。
**Http協議的工作流程**
**一次Http操作稱為一個事務,其整個工作流程如下:**
**1)地址解析**
比如客戶端瀏覽器請求瀏覽頁面:www.baidu.com。其實這是一個默認路徑,因為平常默認會省略協議名、端口號,訪問主頁的時候路徑也會省略,所以完整路徑寫法是http://www.baidu.com:80/index.html。這就是我們常說的URL統一資源定位符,用來定位我們訪問資源在服務器上的位置。
從這個URL中可以分解出協議名、主機名、端口號、訪問對象的路徑
協議名:http
主機名:www.baidu.com
端口號:80(http協議的默認端口)
路徑:/index.html
在這時候需要域名系統DNS協議解析域名,得到主機的ip。
**2)封裝http請求數據包**
**將以上部分(我們想要訪問的服務器頁面資源)結合自己的本機信息生成一個請求數據報文,封裝成一個HTTP請求數據包。至于http的請求數據報文什么樣**
DNS協議工作流程
1)通過域名訪問網頁
2)計算機會先將域名發送到一個解析域名的服務器上
? ? ?在其服務器上有很多服務器,能解析各種各樣的域名,比如有專門解析.org的,解析.com的,解析.net的。等等,最主要的有一個根域名服務器
? ? ?域名解析(在服務器上查找IP地址)的過程有兩種算法,迭代查詢,遞歸查詢。一般是兩種查詢的結合
? ??本機計算機找到其中一臺解析域名的服務器(可能是.com),如果沒有找到對應的IP地址,那么就會去找根域名服務器,根域名服務器知道所有的子服務器,所以他肯定知道該域名所對應的IP地址在那個子服務器中,所以告訴第一次查詢的服務器要他去另一臺服務器上找,找到了,就將其返回給計算機,以后在有另一臺計算機也通過這個域名訪問,那么第一臺服務器會有原來的域名IP地址的緩存,就不用去找根服務器了。
3)找到服務器ip地址就可以訪問了?
>cn是一級域名,是中國的意思。
jp:日本
fr:法國
.tv 電視臺
com : Commercial organizations,商業組織,公司性質的網站
edu : Educational institutions,教研機構
gov : Governmental entities,政府部門
int : International organizations,[國際組織](https://www.baidu.com/s?wd=%E5%9B%BD%E9%99%85%E7%BB%84%E7%BB%87&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)
mil : Military (U.S),美國軍部
net : Network operations and service centers,網絡服務商 ,為個人或是商業提供服務?
org : Other organizations,非盈利組織
# 2.傳輸層
**http封裝請求數據包以后傳給傳輸層,tcp協議部分開始運作。這里將數據包和TCP報頭生成TCP報文,打包成新的數據包。**

- git-第一天
- Git-第二天
- git-第三天
- http-基礎
- HTTP構成和狀態碼
- 瀏覽器輸入URL,經歷的過程
- TCP/IP 詳解三次握手 四次揮手
- http-DNS系統
- http與https之間的區別
- HTTPS握手和HTTP握手
- HTTP小試牛刀
- Tcp初探
- TCP報文格式
- HTML5
- HTML基礎
- Mock
- css 選擇器
- css 動畫
- css 定位
- position/display/float/z-index第一課時
- 行內、塊、脫標 三種狀態下的元素如何實現、水平、垂直居中
- clientHeight/offsetHeight/scrollHeight
- js 數據類型
- 變量提升
- 堆棧關系