????????很多人都把TCP/IP理解為TCP和IP,其實(shí)不是。TCP/IP其實(shí)是一個(gè)協(xié)議族群包括了TCP協(xié)議,UDP協(xié)議,IP協(xié)議,DHCP協(xié)議(動(dòng)態(tài)IP),SSH(遠(yuǎn)程登錄協(xié)議),HTTP協(xié)議(超文本傳輸協(xié)議),PPP協(xié)議(點(diǎn)對(duì)點(diǎn)通信協(xié)議)。
? ? ? ? 首先說一下OSI七層模型
分別是 1,物理層,主要負(fù)責(zé)電子信號(hào)與比特流之間的轉(zhuǎn)換
? ? ? ? ? ? 2,數(shù)據(jù)鏈路層,主要是負(fù)責(zé)比特流與數(shù)據(jù)幀之間的轉(zhuǎn)換
? ? ? ? ? ? 3,網(wǎng)絡(luò)層,主要是數(shù)據(jù)幀與數(shù)據(jù)包之間的轉(zhuǎn)換,已經(jīng)數(shù)據(jù)經(jīng)過那個(gè)路由器傳到那個(gè)IP地址去。
? ? ? ? ? ? 4, 傳輸層,檢查數(shù)據(jù)是否有丟失
? ? ? ? ? ? 5,會(huì)話層,什么時(shí)候建立連接,連接多久,以及什么時(shí)候斷開連接
? ? ? ? ? ? 6,表示層,接收文字,圖片以及聲音
? ? ? ? ? ? 7,應(yīng)用層,提供針對(duì)應(yīng)用的協(xié)議(DHCP(動(dòng)態(tài)主機(jī)協(xié)議),HTTP協(xié)議,F(xiàn)TP協(xié)議(文件傳輸),遠(yuǎn)程登錄協(xié)議(SSH,TELNET),域名解析協(xié)議(DNS))
然后說一下TCP/IP中的四層分層
? ? ? ? ? ? 1,網(wǎng)絡(luò)接口層,? 表示以太網(wǎng),無線網(wǎng)LAN什么的,PPP協(xié)議也是這一層面的
? ? ? ? ? ? 2,網(wǎng)際層,對(duì)應(yīng)OSI中的網(wǎng)絡(luò)層
? ? ? ? ? ? 3,傳輸層,對(duì)應(yīng)OSI中的傳輸層
? ? ? ? ? ? 4,應(yīng)用層,對(duì)應(yīng)OSI中的最上面三層
TCP/IP技術(shù)是一種分組交換技術(shù),可以讓連接到通信電路的計(jì)算機(jī)將數(shù)據(jù)分成很多數(shù)據(jù)包,按照一定的順序發(fā)送出去,這樣計(jì)算機(jī)可以一齊接收發(fā)數(shù)據(jù),分組的首部寫入了發(fā)送端和接收端。之前使用的通信技術(shù)類似于打電話的情景,只能連接一個(gè)。而分組可以同時(shí)連接多個(gè)
這其中IP協(xié)議的作用就是把各種數(shù)據(jù)包發(fā)送給對(duì)方,IP協(xié)議是一種面向無連接的協(xié)議(主要是為了簡(jiǎn)化與提速),其大致分為三大模塊,IP尋址(IP地址具有層次性,就是為了方便尋址),IP分包與組包,以及路由。路由控制是指將數(shù)據(jù)發(fā)送到目標(biāo)地址的功能,為了將數(shù)據(jù)發(fā)送到指定主機(jī),所有的主機(jī)都維護(hù)了一張路由表。
TCP協(xié)議是一種面向連接的可靠流協(xié)議。流就是指不斷的數(shù)據(jù)結(jié)構(gòu)。下面看一看TCP的報(bào)文格式

TCP報(bào)文中沒有報(bào)文長(zhǎng)度,因?yàn)門CP的報(bào)文長(zhǎng)度可以從IP報(bào)文中獲取。
緊急指針用于暫時(shí)中斷通信或者中斷通信。
選項(xiàng),選項(xiàng)字段用于控制TCP的性能
TCP傳輸數(shù)據(jù)的基本單位是MSS(最大消息長(zhǎng)度),在傳輸大量數(shù)據(jù)時(shí),是以MSS的大小將數(shù)據(jù)切割發(fā)送的,進(jìn)行重發(fā)時(shí)也是一樣。在三次握手階段,雙方會(huì)把接口能夠接受的MSS卸載首部報(bào)文中,在使用時(shí)選取小的哪一個(gè)投入使用。
再來說一說TCP的三次握手。每一次建立TCP連接,都會(huì)有連接建立,數(shù)據(jù)傳輸和連接斷開三個(gè)階段,
三次握手就發(fā)生在第一個(gè)階段,TCP確認(rèn)應(yīng)答的機(jī)制來保證數(shù)據(jù)傳輸?shù)目煽啃?。?dāng)發(fā)送端把數(shù)據(jù)發(fā)送出去后,如果有確認(rèn)應(yīng)答,那么就說明數(shù)據(jù)傳輸成功,如果沒有。那么很大的可能就是數(shù)據(jù)發(fā)送失敗。在一定時(shí)間內(nèi)沒有接收到應(yīng)答,發(fā)送端就會(huì)進(jìn)行數(shù)據(jù)重發(fā)。但是要是一直重發(fā)的話對(duì)于目標(biāo)主機(jī)的負(fù)擔(dān)太大,這是就引入了一種三次握手的機(jī)制,這就是三次機(jī)制。這種機(jī)制就是給數(shù)據(jù)包編號(hào),通過序列號(hào)和確認(rèn)應(yīng)答號(hào),TCP就可以完成可靠傳輸。

三次握手的意義:
client發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒有丟失,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server。本來這是一個(gè)早已失效的報(bào)文段。但server收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個(gè)新的連接請(qǐng)求。于是就向client發(fā)出確認(rèn)報(bào)文段,同意建立連接。假設(shè)不采用三次握手,那么只要server發(fā)出確認(rèn),新的連接就建立了。由于現(xiàn)在client并沒有發(fā)出建立連接的請(qǐng)求,因此不會(huì)理睬server的確認(rèn),也不會(huì)向server發(fā)送數(shù)據(jù)。但server卻以為新的運(yùn)輸連接已經(jīng)建立,并一直等待client發(fā)來數(shù)據(jù)。這樣,server的很多資源就白白浪費(fèi)掉了。采用三次握手的辦法可以防止上述現(xiàn)象發(fā)生。例如剛才那種情況,client不會(huì)向server的確認(rèn)發(fā)出確認(rèn)。server由于收不到確認(rèn),就知道client并沒有要求建立連接。
三次握手的理解:這個(gè)問題的本質(zhì)是,信道本身是不可靠的,但是通信的雙方需要就某個(gè)問題達(dá)成一致,而要解決這個(gè)問題,無論是在消息中包含什么,三次通信時(shí)候理論上的最小值。所以三次握手不是TCP本身的需求,而是為了滿足在不可靠的信道上可靠的通行這一需求所導(dǎo)致的。
TCP四次揮手:
為什么TCP協(xié)議終止鏈接要四次?
1、當(dāng)主機(jī)A確認(rèn)發(fā)送完數(shù)據(jù)且知道B已經(jīng)接受完了,想要關(guān)閉發(fā)送數(shù)據(jù)口(當(dāng)然確認(rèn)信號(hào)還是可以發(fā)),就會(huì)發(fā)FIN給主機(jī)B。
2、主機(jī)B收到A發(fā)送的FIN,表示收到了,就會(huì)發(fā)送ACK回復(fù)。
3、但這是B可能還在發(fā)送數(shù)據(jù),沒有想要關(guān)閉數(shù)據(jù)口的意思,所以FIN與ACK不是同時(shí)發(fā)送的,而是等到B數(shù)據(jù)發(fā)送完了,才會(huì)發(fā)送FIN給主機(jī)A。
4、A收到B發(fā)來的FIN,知道B的數(shù)據(jù)也發(fā)送完了,回復(fù)ACK,A等待2MSL以后,沒有收到B傳來的任何消息,知道B已經(jīng)收到自己的ACK了,A就關(guān)閉鏈接,B也關(guān)閉鏈接了。
下面來看一看UDP協(xié)議,一種面向無連接的不可靠的數(shù)據(jù)包協(xié)議。雖然可以指定消息傳輸?shù)拇笮?,但是卻不一定保證消息一定會(huì)到達(dá)(用于高速傳輸和對(duì)實(shí)時(shí)性要求比較高的通信或者廣播)
下面是UDP的報(bào)文格式

校驗(yàn)和:用于校驗(yàn)數(shù)據(jù)是否有丟失
包長(zhǎng)度:數(shù)據(jù)的長(zhǎng)度(單位字節(jié))