計算機網路 知識點小結1
【TCP/UDP定義】
TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。
UDP (User Datagram Protocol,使用者資料報協議)是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP報文的協議號是17。
TCP提供面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。
TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為使用者資料報。TCP注重資料安全性,UDP資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般。
【TCP對應的協議和UDP對應的協議】
TCP對應的協議:
(1) FTP(File Transfer Protocol):定義了檔案傳輸協議,使用21埠。
(2) Telnet:一種用於遠端登陸的協議,使用23埠,使用者可以以自己的身份遠端連線到計算機上,可提供基於DOS模式下的通訊服務。
(3) SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議,用於傳送郵件。伺服器開放的是25號埠。
(4) POP3(Post Office Protocol - Version 3 ,郵局協議版本3):它是和SMTP對應,POP3用於接收郵件。使用110埠。
(5)HTTP(HyperText Transfer Protocol,超文字傳輸協議):從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。預設80埠。
UDP對應的協議:
(1) DNS(Domain Name System,域名系統):用於域名解析服務,將域名地址轉換為IP地址。使用53號埠。
(2) SNMP(Simple Network Management Protocol ):簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。
(3) TFTP(Trivial File Transfer Protocol):簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務。
【TCP/IP 參考模型】
分層
每一層都是獨立存在的,因此分配到各層的任務能夠獨立地執行,變更其中某層提供的方案時不影響其他層。
這也可以理解為一個鬆耦合的設計。
詳解
網路層 主要是 ip 協議,可以通過 ip 找到某個機器,但是機器上有很多應用程式,每個程式都佔用相應的埠,傳輸層不同協議有不同的埠,通過 ip + 埠 就可以確定某個機器上的具體應用程式了。
Server A 和 Server B 直接傳輸資料,有封裝和解封裝的過程。
資料從A 的應用層往下走到物理層,會在每一層都會加上頭部資訊,進行封裝,然後再發送到B。
然後 Server B 從 最下面的物理層往上 每一層進行解封裝,最後到達應用層,得到資料。
- 物理層:建立、維護、斷開物理連線,即將電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式
- 鏈路層:建立邏輯連線,進行硬體地址定址,差錯檢驗。資料包會帶上傳送地址和接收地址,也就是MAC地址。
網路層:進行邏輯地址定址,實現不同網路間的路徑選擇。網路地址幫助我們確定計算機所在的子網路,MAC地址則將資料包送到該子網路中的目標網絡卡。
因此,從邏輯上可以推斷,必定是先處理網路地址,然後再處理MAC地址。傳輸層:定義傳輸資料的協議埠號,以及流控、差錯檢驗。同一臺主機上有許多程式都需要用到網路,埠可以確定表示這個資料包到底供哪個程式使用。
傳輸層建立”埠到埠”的通訊,”網路層”的功能是建立”主機到主機”的通訊。
(ftp 21,ssh 22,dns 53,http 80)- 會話層:建立、管理、終止會話。對應主機程序,指本地主機與遠端主機正進行的會話。
- 表示層:資料的表示、安全、壓縮。
- 應用層:網路服務與終端使用者的一個介面。我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但沒有應用層,便無法識別資料內容。
如果想要使傳輸的資料有意義,則必須使用到應用層協議。
【TCP 區別 UDP】
TCP連線是由4個值來識別的:
<源IP地址、源埠號、目的IP地址、目的埠號>
TCP是面向連線的、可靠的
其實網路的不安全不穩定特性,無論多少次握手都不能保證連線的可靠性
但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連線的可靠性UDP 無連線的、不可靠
UDP傳送資料前並不與對方建立連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,當然也不用重發。
UDP 交給上層進行差錯控制,可以程式碼對UDP的資料收發進行驗證,比如傳送方對每個資料包進行編號然後由接收方進行驗證啊什麼的
即使是這樣,UDP因為在底層協議的封裝上沒有采用類似TCP的“三次握手”而實現了TCP所無法達到的傳輸效率
【IP地址及其表示方法】
IP地址定義:
IP地址就是給因特網上的每一個主機(或路由器)的每一個介面分配一個在在全世界是唯一的32位的標示符。IP地址現由因特網名字和數字分配機構ICANN進行分配。
兩級IP地址標記:IP地址::={<網路號>,<主機號>}
網路號:標識主機(或路由器)所連線到的網路,一個網路號在整個因特網範圍內必須是唯一的。
主機號:標識該主機(或路由器),一個主機號在它前面的網路號所指明的網路範圍內必須是唯一的。
全為0的主機號表示該IP地址是“本主機”所連線到的單個網路地址;
全為1的主機號表示該網路的所有主機。
IP地址分類:
- A類地址
(1)A類IP地址。由1個位元組的網路地址和3個位元組的主機地址,網路地址的最高位必須是“0”。如:0XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1) 。每個網路能容納1億多個主機。
(2)A類IP地址範圍:1.0.0.1—126.255.255.254
(3)A類IP地址中的私有地址和保留地址:① 10.X.X.X是私有地址(所謂的私有地址就是在網際網路上不使用,而被用在區域網絡中的地址)。範圍(10.0.0.1—10.255.255.254)即00000001.XXXXXXXX.XXXXXXXX.XXXXXXXX去掉最高、最低位。
② 127.X.X.X是保留地址,用做迴圈測試用的。
(4)A類IP地址網路號(0XXXXXXX)去掉最低、最高位。主機號去掉最低、最高位。
- B類地址
(1) B類IP地址。由2個位元組的網路地址和2個位元組的主機地址,網路地址的最高位必須 是“10”。如:10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)。每個網路能容納6萬多個主機 。
(2) B類IP地址範圍:128.0.0.1—191.255.255.254。
(3) B類IP地址的私有地址和保留地址① 172.16.0.0—172.31.255.254是私有地址,即主機號10101100.0001XXXX.XXXXXXXX.XXXXXXXX,去掉一個最高位。 ② 169.254.X.X是保留地址10101001.11111110.XXXXXXXX.XXXXXXXX。如果你的IP地址是自動獲取IP地址, 而你在網路上又沒有找到可用的DHCP伺服器。就會得到其中一個IP;191.255.255.255是廣播地址,不能分配。
(4)B類IP地址網路號(10XXXXXX.XXXXXXXX)全部都行。128.0.X.X主機號去掉最低;191.255.X.X主機號去掉最高位。
- C類地址
(1) C類IP地址。由3個位元組的網路地址和1個位元組的主機地址,網路地址的最高位必須是“110”。如:110XXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1) 。C類網路可達209萬餘個,每個網路能容納254個主機。
(2)C類IP地址範圍:192.0.0.1—223.255.255.254。
(3)C類地址中的私有地址:192.168.X.X是私有地址。(192.168.0.1—192.168.255.255)即11000000.10101000.XXXXXXXX.XXXXXXXX
(4)C類IP地址網路號(110XXXXX.XXXXXXXX.XXXXXXXX)全部都行。192.0.0.X去掉最低位;223.255.255.X去掉最高位。
- D類地址
(1) D類地址不分網路地址和主機地址,它的第1個位元組的前四位固定為 1110。 如: 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)。這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次定址一組計算機,它標識共享同一協議的一組計算機。
(2) D類地址範圍:224.0.0.1—239.255.255.254
- E類地址
(1) E類地址不分網路地址和主機地址,它的第1個位元組的前四位固定為 1111。 如:1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)
(2) E類地址範圍:240.0.0.1—255.255.255.254
劃分子網
劃分子網定義: 第一、IP地址空間的利用率有時候很低;第二、路由表太大會使網路效能變壞;第三、兩級IP地址不夠靈活。在IP地址中增加了一個“子網號欄位”,使得兩級IP地址變成三級IP地址,能夠更好地解決上述問題。這種做法叫做劃分子網。將物理網路劃分成若干個子網、劃分子網純屬內部的事情,本單位以外的網路看不見這個網路是由多少個子網組成,因為這個單位對外仍然表現為一個網路。子網掩碼是一個網路或一個子網的重要屬性。
劃分子網增加了靈活性。但卻減少了能夠連線在網路的主機數量。
三級IP地址標記:IP地址::={<網路號>,<子網號>,<主機號>}
子網掩碼:子網掩碼是一個32位地址,用於遮蔽IP地址的一部分以 區別網路標識和主機標識,並說明該IP地址是在區域網上,還是在遠端網上。劃分子網後,通過使用掩碼,把子網隱藏起來,使得從外部看網路沒有變化,這就是子網掩碼。在這麼多網路IP中,國際規定有一部分IP地址是用於我們的區域網使用,也就 是屬於私網IP,不在公網中使用的,它們的範圍是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
以C類網路為例,原有8位主機位,2的8次方即256個主機地址,預設子網掩碼255.255.255.0。
借用1位主機位,產生2個子網,每個子網有126個主機地址;借用2位主機位,產生4個子網,每個子網有62個主機地址……
預設狀態:
A類網路的子網掩碼為255.0.0.0
B類網路的子網掩碼為255.255.0.0
C類網路的子網掩碼為255.255.255.0
例:192.168.1.1 255.255.255.0 或者標識成 192.168.1.1/24(24表示掩碼中“1”
的個數)
【子網詳解】
一、子網掩碼的含義和根據子網掩碼劃分子網
一個IP地址必然屬於某一個網路,或者叫子網。子網掩碼就是用來指定某個IP地址的網路地址的,換一句話說,就是用來劃分子網的。
例如,一個A類網路可以容納16777214臺主機。但是在實際運用中,不可能把一個A類網路只用於一個子網,因為那樣管理起來很不方便,也會出現廣播風暴等種種問題,所以需要根據實際需求把它劃分為若干個較小的子網。一個B類網路可以容納65534臺主機,往往也是需要劃分子網的。即便一個小型企業內部,為了部門之間的職能的需要,配置那些電腦可以互相訪問,哪些不能互相訪問,就需要通過劃分子網的方法來實現。
IP地址位數=網路位數+主機位數=32位。子網掩碼的位數就是網路的位數。
A類網路的網路位數是8位,子網掩碼就是11111111.00000000.00000000.00000000,換算成二進位制表示為255.0.0.0。
B類網路的網路位數是16位,子網掩碼就是11111111.11111111.00000000.00000000,換算成十進位制表示為255.255.0.0。
C類網路的網路位數是24位,子網掩碼就是11111111.11111111.11111111.00000000,換算成十進位制表示為255.255.255.0。
A類網路加長子網掩碼到16位就把一個A類網路劃分為256個B類網路同樣大小的網路,再加長到24位就又把每個B類大小的子網劃分為256個C類網路大小的子網。就是這個道理。一個大的網路,通過把子網掩碼加長,使網路位多了,也就是網路數目多了,子網就多了。
當然你也可以不劃分為256個子網,而劃分為128個,64個,32個,16個,8個,4個,2個。
一個B類網路的預設子網掩碼為255.255.0.0,你如果想把它劃分為2個子網,網路位數就成立17位,也就是說子網掩碼就變成了255.255.128.0;想劃分為16個子網,因為16是2的4次方,所以網路位數加4變成了20位,也就是說子網掩碼加長,成了20位,就是255.255.240.0。依此類推。
一個C類網路的預設子網掩碼為24位的,那麼主機位=32-24=8位,2的8次方等於256,所以一個C類網路的IP地址數量(包括網路地址和廣播地址)為256個。
但是你仍然可以通過加長子網掩碼的手段,把一個C類子網劃分為更多的子網。劃分的子網數必定是2的n次方個,每個子網的IP數量必定是2的(8- n)次方個。
子網掩碼加長1位,劃分2個子網;加長2位,劃分4個子網,加長6位,劃分2的6次方個,也就是64個子網。
子網掩碼的1的個數表示網路位的個數,簡單地來說,網路位是不屬於你控制的,是上級主管給你的,給你多少就是多少。但是主機位是你可以控制的,你可以把它縮短,把縮短出來的位數加到網路位中,這樣網路位就長了,子網數就多了,相應地每個子網的IP數量就少了。
記住下面的公式,遇到再複雜的子網劃分問題也難不倒你了。
IP地址位數=32 網路位+主機位=32
子網掩碼加長n位,則在當前子網基礎上劃分為2的n次方個子網。
每個子網的IP地址數量=2^(32-劃分前子網掩碼位數-n)
二、如何根據子網劃分的目標計運算元網掩碼
簡單來說,子網掩碼就是網路地址的位數。
一個IP地址一共有32位,其中靠前的某些位表示網路地址,後面的某些位表示主機位。
網路位數+主機位數=IP地址位數=32
知道了這個道理,計運算元網掩碼的方法就是:已知子網內IP數的多少,求出主機位的位數,用32減去主機位數就等於網路位數,也就是子網掩碼。
舉最簡單的例子。一個C類網路,包括256個主機位置,256是2 的8次方,所以主機位是8,那麼網路位就是32-8=24,也就是說子網掩碼是24位,用二進位制表示就是11111111.11111111.11111111.00000000,換算成十進位制就是255.255.255.0
再比如一個C類網路劃分的子網,每個網路主機IP數是32, 而32是2的5次方,所以主機位是5,那麼網路位就是32-5=27,也就是說子網掩碼是27位,用二進位制表示就是11111111.11111111.11111111.11100000,換算成十進位制就是255.255.255.224
再比如一個B類網路劃分的子網,每個網路主機IP數是1024, 而1024是2的10次方,所以主機位是10,那麼網路位就是32-10=22,也就是說子網掩碼是22位,用二進位制表示就是11111111.11111111.11111100.00000000,換算成十進位制就是255.255.252.0
子網劃分是通過改變子網掩碼的位數來實現的。比如一個C類IP地址,預設子網掩碼是24位的,二進位制表示是11111111.11111111.11111111.0000000,換算成10進位制的就是255.255.255.0。
如果是這樣的子網掩碼,後面的8位都可以用來做為主機的位置,2 的8次方等於256,一共有256個IP位置,因為有2個不能用,所以可用的主機位置為254個。
但是你要把這樣一個地址劃分成2個子網,就要從主機位裡拿出一位來作為網路地址,網路地址就成了25位了。相應地主機位就成了7位了,2 的7次方等於128,一共有126個地址可用。
這是從正向來說的,就是已知要劃分的子網數,求每個子網的主機數。但是在實際工作中往往是先知道每個子網的主機數,讓你劃分子網。其實也很簡單。
首先你算一下主機數更接近於2 的幾次方,那麼主機位數就是幾位。32減去主機位就是網路位。
舉例說明。
假如給你一個C類IP地址192.168.0.0。假如你想劃分2個子網,一個裡面有100臺電腦,另一個有50臺電腦。
100大於2的6次方,小於2的7次方,所以主機位數取7位。那麼網路位數就是32-7=25位。25位的子網掩碼11111111.11111111.11111111.10000000
換算成10進位制的就是
255. 255. 255. 128,這就是第一個子網的子網掩碼,網路號為192.168.0.0/25,網路地址192.168.0.0,主機地址192.168.0.1~192.168.0.126,廣播地址192.168.0.127
50大於2的5次方,小於2的6次方,所以主機位數取6位。那麼網路位數就是32-6=26位。26位的子網掩碼11111111.11111111.11111111.11000000
換算成10進位制的就是
255. 255. 255. 192,這就是第二個子網的子網掩碼,網路號為192.168.0.128/26,網路地址192.168.0.128,主機地址192.168.0.129~192.168.0.190,廣播地址192.168.0.191
練習題
把子網掩碼為255.255.0.0的網路40.15.0.0分為兩個子網,假設第一個子網為40.15.0.0/17,則第二個子網為?
答案:
40.15.0.0/17 表示網段是40.15.0.0,子網掩碼是17位。
子網掩碼為:255.255.128.0,用二進位制表示為:
斜槓後面的17表示子網掩碼前17位為1.
劃分為兩個子網的話子網掩碼應該為255.255.128.0
第一個子網是40.15.0.0/17,可用地址範圍是40.15.0.1~40.15.127.254
第二個子網是40.15.128.0/17,可用地址範圍是40.15.128.1~40.15.255.254
【NAT穿透技術】
NAT(Network Address Translation,網路地址轉換)是一種網路地址翻譯技術,將內部私有IP地址改變成可以在公網上使用的.
NAT三種實現方式
- 靜態地址轉換:一個公網IP對應一個內部IP,一對一轉換
- 動態地址轉換:N個公網IP對應M個內部Ip,不固定的一對一IP轉換關係.同一時間,有M-N個主機無法聯網.
- 埠多路複用:對外只有一個公網IP,通過埠來區別不同內部IP主機的資料.
交換機、路由器和閘道器
1)交換機
在計算機網路系統中,交換機是針對共享工作模式的弱點而推出的。把很多個電腦連到一起,形成一個區域網,內部可以互相交流。交換機擁有一條高頻寬的背部匯流排和內部交換矩陣。交換機的所有的埠都掛接在這條背 部總線上,當控制電路收到資料包以後,處理埠會查詢記憶體中的地址對照表以確定目的MAC(網絡卡的硬體地址)的NIC(網絡卡)掛接在哪個埠上,通過內部 交換矩陣迅速將資料包傳送到目的埠。目的MAC若不存在,交換機才廣播到所有的埠,接收埠迴應後交換機會“學習”新的地址,並把它新增入內部地址表 中。
交換機工作於OSI參考模型的第二層,即資料鏈路層。交換機內部的CPU會在每個埠成功連線時,通過ARP協議學習它的MAC地址,儲存成一張 ARP表。在今後的通訊中,發往該MAC地址的資料包將僅送往其對應的埠,而不是所有的埠。因此,交換機可用於劃分資料鏈路層廣播,即衝突域;但它不 能劃分網路層廣播,即廣播域。
交換機被廣泛應用於二層網路交換,俗稱“二層交換機”。
交換機的種類有:二層交換機、三層交換機、四層交換機、七層交換機分別工作在OSI七層模型中的第二層、第三層、第四層盒第七層,並因此而得名。
2)路由器
路由器(Router)是一種計算機網路裝置,提供了路由與轉送兩種重要機制,可以決定資料包從來源端到目的端所經過 的路由路徑(host到host之間的傳輸路徑),這個過程稱為路由;將路由器輸入端的資料包移送至適當的路由器輸出端(在路由器內部進行),這稱為轉送。路由工作在OSI模型的第三層——即網路層,例如網際協議。
路由器的一個作用是連通不同的網路,另一個作用是選擇資訊傳送的線路。 路由器與交換器的差別,路由器是屬於OSI第三層的產品,交換器是OSI第二層的產品(這裡特指二層交換機)。
3)閘道器
閘道器實質上是一個網路通向其他網路的 IP地址。
閘道器的IP地址是具有路由功能的裝置的IP地址,具有路由功能的裝置有路由器、啟用了路由協議的伺服器(實質上相當於一臺路由器)、代理伺服器(也相當於一臺路由器)。網路層以上實現網路互連,是最複雜的網路互連裝置,僅用於兩個高層協議不同的網路互連。閘道器既可以用於廣域網互連,也可以用於區域網互連。 閘道器是一種充當轉換重任的計算機系統或裝置。使用在不同的通訊協議、資料格式或語言,甚至體系結構完全不同的兩種系統之間,閘道器是一個翻譯器。與網橋只是簡單地傳達資訊不同,閘道器對收到的資訊要重新打包,以適應目的系統的需求。
從一個網路向另一個網路傳送信 息,也必須經過一道“ 關口”,這道關口就是閘道器。 顧名思義,閘道器( Gateway)就是一個網路連線到另一個網路的“關口”。也就是網路 關卡。由於歷史的原因,許多有關TCP/IP的文獻曾經把網路層使用的路由器稱為閘道器,在今天很多區域網採用都是路由來接入網路,因此通常指的閘道器就是路由器的IP。
預設閘道器的意思是一臺主機如果找不到可用的閘道器,就把資料包發給預設指定的閘道器,由這個閘道器來處理資料包。預設閘道器必須是電腦自己所在的 網段中的IP地址,而不能填寫其他網段中的IP地址。
自動設定就是利用 DHCP伺服器來自動給網路中的電腦分配IP地址、 子網掩碼和 預設閘道器。這樣做的好處是一旦網路的 預設閘道器發生了變化時,只要更改了DHCP伺服器中預設閘道器的設定,那麼網路中所有的電腦均獲得了新的預設閘道器的IP地址。
在傳統TCP/IP術語中,網路裝置只分成兩種,一種為閘道器(gateway),另一種為主機(host)。閘道器能在網路間轉遞資料包,但主機不能轉送資料包。在主機(又稱終端系統,end system)中,資料包需經過TCP/IP四層協議處理,但是在閘道器(又稱中介系 統,intermediate system)只需要到達網際層(Internet layer),決定路徑之後就可以轉送。在當時,閘道器 (gateway)與路由器(router)還沒有區別。
在現代網路術語中,閘道器(gateway)與路由器(router)的定義不同。
閘道器(gateway)能在不同協議間移動資料
路由器(router)是在不同網路間移動資料 相當於傳統所說的IP閘道器(IPgateway)
【三次握手】
名詞介紹
- seq (Sequence Number)序列號,這是為了連線以後傳送資料用的
- ack(Acknowledgment Number)確認序列號,是對收到的資料包的確認,值是等待接收的資料包的序列號。
- SYN synchronous 同步訊號
- ACK Acknowledgement 應答訊號, 當 ACK=1時候表示ack欄位有意義
- SYN 和 ACK 也表示 TCP 的標誌位?
三次握手步驟
客戶端 發起握手,目的端點是 服務端 的端點 post_server
生成一個隨機數作為它的初始化傳送序號 x
發出一個同步報文段,SYN=1,傳送序號 seq=x
並進入SYN_SEND狀態,等待伺服器確認服務端監聽到埠 post_server 上有連線請求,
響應 生成一個隨機數作為它的初始傳送序號 seq = y
發出同步報文欄位並對主機 A 埠1的連線請求進行確認,傳送ack=x+1
即傳送 SYN+ACK 包,此時伺服器進入SYN_RECV狀態主機 A發出對 服務端 埠 post_server 的確認,確認序號 ack=y+1,還有seq=x+1 客戶端和伺服器進入ESTABLISHED狀態,完成三次握手
為什麼採用3次握手而不是2次握手?
(為什麼A還要發一次確認呢?)
第一次握手 客戶端發,服務端 知道 客戶端 可以 發訊息
第二次握手 服務端收和發,客戶端 知道 服務端 可以 接收訊息 和 發訊息
第三次握手 客戶端收和發,服務端 知道 客戶端可以 接收訊息 和 發訊息
採用三次握手是為了防止失效的連線請求報文段突然又傳送到主機B,因而產生錯誤。失效的連線請求報文段是指:主機A發出的連線請求沒有收到主機B的確認,於是經過一段時間後,主機A又重新向主機B傳送連線請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機A第一次傳送的連線請求並沒有丟失,而是因為網路節點導致延遲達到主機B,主機B以為是主機A又發起的新連線,於是主機B同意連線,並向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A傳送資料,導致主機B的資源浪費。
採用兩次握手不行,原因就是上面說的實效的連線請求的特殊情況。
3 次是雙向通訊的最小值,也就是 SYN, SYN ACK, ACK ,兩個傳送、兩個接收 ,其中第二次把接收和傳送合在一起了
如果兩次握手的話,客戶端有可能因為網路阻塞等原因會發送多個請求報文,這時伺服器就會建立連線,浪費掉許多伺服器的資源。所以要增加第三次握手。
第3次失敗會怎麼辦?
第三次失敗,只有客戶端處於成功狀態(因為第2次伺服器返回了ACK),伺服器端沒有接收到客戶端的 ACK。
這要分幾種情況討論:
客戶端發出的 ACK 丟失了,發出的下一個資料包沒有丟失,則服務端接收到下一個資料包(這個資料包裡也會帶上ACK資訊),能夠進入正常的ESTABLISHED狀態
如果服務端和客戶端都沒有資料傳送,或者服務端想傳送資料(但是發不了,因為沒有收到客戶端的ACK),伺服器都會有定時器傳送第二步SYN+ACK資料包,如果客戶端再次傳送ACK成功,建立連線。
如果一直不成功,伺服器肯定會有超時設定,超時之後會給客戶端發RTS報文,進入CLOSED狀態,防止SYN洪泛攻擊。
【4次揮手關閉連線】
1.主機 A 關閉 A主機的 埠1 到 B主機的 埠2 的傳輸連線:
1)應用程式通知 TCP 資料已經發送完畢時,關閉連線
2) TCP 向主機 B 傳送一個帶 FIN 附加標記的報文段(FIN表示finish),FIN=1,seq=x
2.主機 B 響應:
1)收到這個 FIN 報文段之後,並不立刻用 FIN 報文段回覆主機 A,而是先向主機 A 傳送一個確認序號 ,ACK=1,ack=x+1,seq=z
2)同時通知自己相應的應用程式,主機 A 方傳輸已經結束,對方要求關閉連線(先發送 ACK 的目的是為了防止這段時間內,主機 A 重傳 FIN 報文段)
此時 A 到 B 方向上的傳輸連線已經關閉(看第4有TIME_WAIT狀態等待2MSL,第2步的 A 到 B 並沒有徹底關閉?),但是主機
B 到 A 還可以傳送資料,連線處於半關閉的狀態。(因為原來 TCP 是全雙工的工作方式,只關閉了一端的連線)
3.主機 B 關閉 埠2到埠1的傳輸連線:
1)應用程式告訴 TCP: 我要徹底地關閉連線
2)TCP 收到對最後資料的確認後,向主機 A 傳送一個 FIN 報文段。
FIN=1,seq=y,ACK=1,seq=x+1,
y是B傳送資料的最後位元組的序號加1。
4.主機 A 響應:
1) 收到這個 FIN 報文段之後,向主機 B 傳送一個 ACK 表示連線徹底釋放。ACK=1,ack=y+1
2) 主機B收到主機A的ACK報文段以後,就關閉連線;此時,主機A等待2MSL (Maximum Segment Lifetime)後依然沒有收到回覆,則證明主機 B已正常關閉,那好,主機A也可以關閉連線了。
為什麼A在TIME-WAIT狀態必須等待2MSL的時間呢?
- 為了保證A傳送的最後一個ACK報文段能夠到達B
- 防止已失效的連線請求報文段出現在本連線中
為什麼連線的時候是三次握手,關閉的時候卻是四次握手?
TCP是全雙工模式,關閉連線時,當 主機 B收到主機A的FIN報文時,僅僅表示主機 A不再發送資料了但是還能接收資料。
主機B也未必全部資料都發送給A了,所以B可以立即close;也可以傳送一些資料給A後,再發送FIN報文給對方來表示同意現在關閉連線,因此,主機 BACK和FIN一般都會分開發送。
在瀏覽器中輸入www.baidu.com後執行的全部過程
1、應用層:客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個IP地址找到客戶端到伺服器的路徑。客戶端瀏覽器發起一個HTTP會話到220.161.27.48,然後通過TCP進行封裝資料包,輸入到網路層。
2、在客戶端的傳輸層,把HTTP會話請求分成報文段,新增源和目的埠,如伺服器使用80埠監聽客戶端的請求,客戶端由系統隨機選擇一個埠如5000,與伺服器進行交換,伺服器把相應的請求返回給客戶端的5000埠。然後使用IP層的IP地址查詢目的端。
3、客戶端的網路層不用關係應用層或者傳輸層的東西,主要做的是通過查詢路由表確定如何到達伺服器,期間可能經過多個路由器,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查詢路由表決定通過那個路徑到達伺服器。
4、客戶端的鏈路層,包通過鏈路層傳送到路由器,通過鄰居協議查詢給定IP地址的MAC地址,然後傳送ARP請求查詢目的地址,如果得到迴應後就可以使用ARP的請求應答交換的IP資料包現在就可以傳輸了,然後傳送IP資料包到達伺服器的地址。
事件順序:
(1) 瀏覽器獲取輸入的域名www.baidu.com
(2) 瀏覽器向DNS請求解析www.baidu.com的IP地址
(3) 域名系統DNS解析出百度伺服器的IP地址
(4) 瀏覽器與該伺服器建立TCP連線(預設埠號80)
(5)瀏覽器發出HTTP請求,請求百度首頁
(7) TCP連線釋放
(8)瀏覽器將首頁檔案進行解析,並將Web頁顯示給使用者。
涉及到的協議:
(1) 應用層:
- HTTP(www訪問協議),
- DNS(域名解析服務)
DNS解析域名為目的IP,通過IP找到伺服器路徑,客戶端向伺服器發起HTTP會話,然後通過運輸層TCP協議封裝資料包,在TCP協議基礎上進行傳輸
(2) 傳輸層:
- TCP(為HTTP提供可靠的資料傳輸),
- UDP(DNS使用UDP傳輸)
HTTP會話會被分成報文段,新增源、目的埠;TCP協議進行主要工作
(3)網路層:
- IP(IP資料資料包傳輸和路由選擇),
- ICMP(提供網路傳輸過程中的差錯檢測),
- ARP(將本機的預設閘道器IP地址對映成物理MAC地址)為資料包選擇路由,
IP協議進行主要工作,相鄰結點的可靠傳輸,ARP協議將IP地址轉成MAC地址。