1. 程式人生 > >計算機網路 知識點小結1

計算機網路 知識點小結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 的標誌位?

三次握手步驟
這裡寫圖片描述

  1. 客戶端 發起握手,目的端點是 服務端 的端點 post_server
    生成一個隨機數作為它的初始化傳送序號 x
    發出一個同步報文段,SYN=1傳送序號 seq=x
    並進入SYN_SEND狀態,等待伺服器確認

  2. 服務端監聽到埠 post_server 上有連線請求,
    響應 生成一個隨機數作為它的初始傳送序號 seq = y
    發出同步報文欄位並對主機 A 埠1的連線請求進行確認,傳送ack=x+1
    即傳送 SYN+ACK 包,此時伺服器進入SYN_RECV狀態

  3. 主機 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地址。