1.背景介紹
????要想了解什么是TCP/IP協(xié)議,就要知道什么是網(wǎng)絡(luò)協(xié)議。書本上的定義:網(wǎng)絡(luò)協(xié)議是為計算機網(wǎng)絡(luò)中進行數(shù)據(jù)交換而建立的規(guī)則、標準或約定的集合。
????中國人之間交流使用漢語,要遵循漢語的語法結(jié)構(gòu)和發(fā)音;那如果我們跟英國人交流的話,就要使用英語的語法結(jié)構(gòu)和發(fā)音;我們?nèi)伺c人之間交流所用的語言就是一種協(xié)議。對于計算機來說,兩臺機器之間的通信就要制定各種各樣的協(xié)議,例如:文件傳輸使用TCP協(xié)議,域名系統(tǒng)使用DNS協(xié)議。數(shù)據(jù)根據(jù)協(xié)議規(guī)定的內(nèi)容進行傳輸,這樣就實現(xiàn)了兩臺機器之間的通信。
????總的來說:網(wǎng)絡(luò)協(xié)議就是人為規(guī)定的一套通信規(guī)范,只要雙方都遵循這個規(guī)范,就能實現(xiàn)交流。
????TCP/IP具體含義:從字面意義上講,可能會認為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議。然而多數(shù)情況下,它只是利用ip進行通信時所必須用到的協(xié)議群的統(tǒng)稱。具體來說,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協(xié)議。他們與 TCP 或 IP 的關(guān)系緊密,是互聯(lián)網(wǎng)必不可少的組成部分。TCP/IP 一詞泛指這些協(xié)議,因此,有時也稱 TCP/IP 為網(wǎng)際協(xié)議群。
2.知識剖析
????TCP/IP協(xié)議族中有一個重要的概念是分層,TCP/IP協(xié)議按照層次分為以下四層:
????應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層。提到協(xié)議分層,通常會聯(lián)想到OSI的七層協(xié)議經(jīng)典架構(gòu),但是TCP/IP協(xié)議族的結(jié)構(gòu)則稍有不同。如圖所示
????TCP/IP協(xié)議族按照層次由上到下,層層包裝。
(1)最上面的就是應(yīng)用層了,這里面有http,ftp,等等我們熟悉的協(xié)議。
????TCP/IP的分層中,將OSI參考模型中的會話層、表示層和應(yīng)用層的功能都集中到了應(yīng)用程序中實現(xiàn)。
????TCP/IP應(yīng)用的架構(gòu)絕大多數(shù)屬于客戶端/服務(wù)器模型。
應(yīng)用層的主要應(yīng)用場景:
????瀏覽器和服務(wù)端之間通信所用的協(xié)議是HTTP協(xié)議,所傳輸數(shù)據(jù)的主要格式為HTML。
????發(fā)送電子郵件時用到的協(xié)議是SMTP。
????文件傳輸(FTP)
????遠程登錄常用TELNET與SSH兩種協(xié)議。遠程登錄是指登錄到遠程的計算機上,使那臺計算機上的程序得以運行的一種功能。
????網(wǎng)絡(luò)管理(SNMP)
(2)第二層則是傳輸層,著名的TCP和UDP協(xié)議就在這個層次。
????傳輸層最主要的功能是能夠讓應(yīng)用程序之間實現(xiàn)通信,并且定義了兩種服務(wù)質(zhì)量不同的協(xié)議,即:傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報協(xié)議UDP。
????TCP協(xié)議是一個面向連接的、可靠的協(xié)議。它可以保證兩端通信主機之間的通信可達。在發(fā)送端,它負責把上層傳送下來的字節(jié)流分成報文段并傳遞給下層。在接收端,它負責把收到的報文進行重組后遞交給上層。TCP協(xié)議還要處理端到端的流量控制,以避免緩慢接收的接收方?jīng)]有足夠的緩沖區(qū)接收發(fā)送方發(fā)送的大量數(shù)據(jù).
????UDP傳送數(shù)據(jù)前并不與對方建立連接,對接收到的數(shù)據(jù)也不發(fā)送確認信號,發(fā)送端不知道數(shù)據(jù)是否會正確接收,當然也不用重發(fā),所以說UDP是無連接的、不可靠的一種數(shù)據(jù)傳輸協(xié)議。
????UDP常用在分組數(shù)據(jù)較少或多播、廣播通信以及視頻通信等多媒體領(lǐng)域(即時通信)。
(3)第三層是網(wǎng)絡(luò)層,IP協(xié)議就在這里,它負責對數(shù)據(jù)加上IP地址和其他的數(shù)據(jù)以確定傳輸?shù)哪繕恕?/p>
????也稱作互聯(lián)網(wǎng)層,是整個TCP/IP協(xié)議棧的核心。它的功能是把分組發(fā)往目標網(wǎng)絡(luò)或主機。同時,為了盡快地發(fā)送分組,可能需要沿不同的路徑同時進行分組傳遞。因此,分組到達的順序和發(fā)送的順序可能不同,這就需要上層必須對分組進行排序。
????網(wǎng)絡(luò)層定義了分組格式和協(xié)議,即IP協(xié)議(Internet Protocol)。另外的還有ICMP協(xié)議(Internet互聯(lián)網(wǎng)控制報文協(xié)議),以及IGMP協(xié)議(Internet組管理協(xié)議)。
????IP是一種網(wǎng)絡(luò)層協(xié)議,提供的是一種不可靠的服務(wù),它只是盡可能快地把分組從一端送到另一端,但是并不提供任何可靠性保證。同時被TCP和UDP使用。TCP和UDP的每組數(shù)據(jù)都通過端系統(tǒng)和每個中間路由器中的IP層在互聯(lián)網(wǎng)中進行傳輸。
????ICMP是IP協(xié)議的附屬協(xié)議。IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。
????IGMP是Internet組管理協(xié)議。它用來把一個UDP數(shù)據(jù)報多播到多個主機。
(4)第四層是叫數(shù)據(jù)鏈路層,也稱作網(wǎng)絡(luò)接口層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機中對應(yīng)的網(wǎng)絡(luò)接口卡。鏈路層為待傳送的數(shù)據(jù)加入一個以太網(wǎng)協(xié)議頭,并進行CRC編碼,為最后的數(shù)據(jù)傳輸做準備。
3.常見問題
4.解決方案
5.編碼實戰(zhàn)
6.擴展思考
詳細介紹IP、TCP和DNS。
IP協(xié)議:IP協(xié)議的作用在于把各種數(shù)據(jù)包準確無誤的傳遞給對方,其中兩個重要的條件是IP地址,和MAC地址。由于IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器里面會記錄我們的MAC地址。而MAC地址是全球唯一的,除去人為因素外不可能重復(fù)。
TCP協(xié)議:如果說IP協(xié)議是找到對方的詳細地址。那么TCP協(xié)議就是把安全的把東西帶給對方。各有分工,互不沖突。
按層次分,TCP屬于傳輸層,提供可靠的字節(jié)流服務(wù)。所謂的字節(jié)流服務(wù)是指,為了方便傳輸,將大塊數(shù)據(jù)分割成以報文段(segment)為單位的數(shù)據(jù)包進行管理。而可靠的傳輸服務(wù)是指,能夠把數(shù)據(jù)準確可靠地傳給對方??傊?,TCP 協(xié)議為了更容易傳送大數(shù)據(jù)才把數(shù)據(jù)分割,而且 TCP 協(xié)議能夠確認數(shù)據(jù)最終是否送達到對方。
DNS:(Domain names System)
和HTTP協(xié)議一樣是處于應(yīng)用層的服務(wù),提供域名到IP地址之間的解析服務(wù)?;ヂ?lián)網(wǎng)之間是通過IP地址通信的,但是IP地址并不符合認得記憶習慣,人喜歡記憶有意義的字詞。所以DNS服務(wù)就為了解決這個問題而生的。
7.參考文獻
鏈接:https://baike.baidu.com/item/MyBatis/2824918?fr=aladdin
作者:百度百科
鏈接:https://juejin.im/post/5a069b6d51882509e5432656
作者:滌生_Woo
鏈接:https://blog.csdn.net/whuslei/article/details/6667471
作者:whuslei
鏈接:https://www.cnblogs.com/roverliang/p/5176456.html
作者:roverliang
鏈接:https://juejin.im/post/598ba1d06fb9a03c4d6464ab
作者:Ruheng
8.更多討論
1,TCP/IP協(xié)議通信的過程?
2,如何建立TCP/IP連接?
3,為什么要三次握手?
4,IP包如何路由至目標地址?
解決方案:
1,TCP/IP協(xié)議通信的過程
通信的過程其實就對應(yīng)著數(shù)據(jù)裝包與拆包的過程。裝包的過程,數(shù)據(jù)發(fā)送方每層不斷地封裝首部,添加一些信息用于傳輸,確保能傳輸?shù)侥康牡?。拆包的過程,數(shù)據(jù)接收方每層不斷地拆除首部,得到最終傳輸?shù)臄?shù)據(jù)。(圖例)

每個分層中,都會對所發(fā)送的數(shù)據(jù)附加一個首部,在這個首部中包含了該層必要的信息,如發(fā)送的目標地址以及協(xié)議相關(guān)信息。通常,為協(xié)議提供的信息為包首部,所要發(fā)送的內(nèi)容為數(shù)據(jù)。在下一層的角度看,從上一層收到的包全部都被認為是本層的數(shù)據(jù)。
2,如何建立TCP/IP連接?
TCP傳輸控制協(xié)議,是一個面向連接的協(xié)議。在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),連接是通過三次握手進行初始化的。所謂三次握手是指建立一個 TCP 連接時需要客戶端和服務(wù)器端總共發(fā)送三個包以確認連接的建立。三次握手的目的是同步連接雙方的序列號和確認號并交換 TCP窗口大小信息。
TCP報文格式(圖)

(1)序列號:Sql序號,用來標識數(shù)據(jù)包,發(fā)起方發(fā)送數(shù)據(jù)時對此進行標記。
(2)確認序號:Ack序號,只有ACK標志位為1時,確認序號字段才有效,Ack=Seq+1。
(3)標志位:共6個,即SYN、ACK、PSH、RST、URG、FIN
1)SYN:發(fā)起一個請求。? ? ? ? 2)ACK:確認序號有效(表示對請求的響應(yīng))。
3)URG:緊急指針(urgent pointer)有效。? ? ? ? 4)PSH:接收方應(yīng)該盡快將這個報文交給應(yīng)用層。
5)RST:重置連接。? ? ? ? 6)FIN:釋放一個連接。
需要注意的是:? ? ? ? ? ? ? ? (A)不要將確認序號Ack與標志位中的ACK搞混了。
(B)確認方Ack=發(fā)起方Seq+1,兩端配對。

第一次握手:客戶端發(fā)送一個TCP標志位SYN=1,ACK=0的數(shù)據(jù)包給服務(wù)端,并隨機會產(chǎn)生一個Seq=J.當服務(wù)端接收到這個數(shù)據(jù)后,服務(wù)端由SYN=1可知客戶端是想要建立連接;
第二次握手:服務(wù)端要對客戶端的聯(lián)機請求進行確認,向客戶端發(fā)送應(yīng)答號ACK=1、SYN=1? ? ? ? 確認號Ack=J+1,此值是客戶端的序列號加1,還會產(chǎn)生一個隨機的序列號Seq=K,這樣就告訴客戶端可以進行連接;
第三次握手:客戶端收到數(shù)據(jù)后檢查Ack是否為J+1,以及標志位ACK的值是否為1,若為1,則會發(fā)送ACK=1、確認號碼Ack=K+1,告訴服務(wù)端,你的請求連接被確認,連接可以建立,Client和Server進入ESTABLISHED狀態(tài),完成三次握手,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了。
3,為什么要三次握手?
為了防止已失效的連接請求報文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯誤。
三次握手是在安全可靠的基礎(chǔ)上,握手次數(shù)最少的方案。兩次握手并不能保證可靠性。四次握手又浪費了效率,當然,有的需要更高安全性的地方,是可以有N次握手協(xié)議的,但那是特殊情況。
4,IP包如何路由至目標地址?
IP包有固定的報文格式,報頭有所需要參數(shù)。如:源端口、目標端口、確認序號和標志域等。
今天的分享就到這里啦,歡迎大家點贊、轉(zhuǎn)發(fā)、留言、拍磚~