前端最容易理解的網路知識匯總

OSI 7層模型

不同主機之間要進行通信,需要遵循共同的協議。這些協議非常複雜,一般我們把它抽象成7層,叫做OSI(open system interconnection) 7層模型。

從底向上依次是:

- 物理層

- 數據鏈路層 交換機

- 網路層 路由器

- 傳輸層

- 會話層

- 表示層

- 應用層

數據在數據鏈路層叫幀(frame),網路層叫包(package),傳輸層叫段(segment)

對於這7層,每一層都有其相關的協議,對於一個軟體開發工作人員,我們需要熟知的是:

- 網路層: IP協議,ARP, RARP協議,ICMP協議,IGMP協議

- 傳輸層: TCP協議, UDP協議

- 應用層: http協議,https協議,ftp,tftp,smtp, snmp,dns

當數據經過每一層時,都會對其封裝或解封裝

發送方是從高層到低層封裝數據

接收方是從底層往高層解封裝分析數據。

TCP協議

TCP協議工作在OSI七層中的傳輸層。說明這是一種傳輸控制協議,而且是可靠的,面向鏈接的協議。它能:

- 將數據分段打包傳輸;

- 對每個數據包編號,控制順序

- 傳輸中丟失,重發,錯誤處理

- 流量控制避免擁堵

問題一:既然是面向連接,如何保證雙方都能有通信能力呢?

主機A發送數據給主機B,如何知道主機A,主機B都有發送和接收的能力呢?最少要經過這麼三部。

1,主機A發送數據給主機B B知道A有發送能力

2,主機B回復主機A A知道B有發送能力,自己有接收能力

3,主機A回復主機B 主機B知道自己有發送能力

看到沒,要確保主機A,主機B都有發送,接收數據的能力,至少要經過這麼三步。這就是著名的三次握手。是不是很簡單....

問題1.1: 如何設計三次握手更合理

主機A請求跟主機B通信

- 第一步主機A發送給主機B的數據其實是任何數據都行,看心情,設計TCP協議的『猿』設計了一個SYN(synchronize)標誌,中文名同步的意思,數據是一個隨機數,取名為sequence num,簡稱seq。seq是一個隨機數。

- 第二部主機B收到主機A的數據,它需要告訴B,我收到你的數據了,主機B知道主機A很忙,可能會收到很多數據,如何讓主機A輕鬆知道這是我的回複數據呢?額外添加了一個確認的欄位:acknowledgment num,簡稱ack。ack的值肯定和seq值有關係,很簡單,加1就好了。因為A知道還有第三次連接,我也發一個seq隨機數給你。為了讓你輕鬆知道,我的是回複數據,我給你個ACK(acknowledgment)標誌,設置為1。當然,SYN同樣為1(傳送了隨機的deq參數)。

- 第三部主機A收到主機B回復,看到SYN=1,SEQ=1,再看看acknowledgment正確,通知主機B,沒問題,你可以和我通信了。設置SYN=1,SEQ=1,ack的值為收到的seq+1,seq的值其實沒啥用了,隨便好了,把上個請求的seq+1傳了過去。

經過這麼三部,主機A主機B就都知道自己和對方有發送接收數據能力了,接下來肯定要傳送數據了,不然三次握手就白握了。

問題二:如何傳送數據

主機A發送數據給主機B

假如此時seq為4000, ack為7000, 計算好此次傳送的數據是1514,則:

方向 | seq | ack | size

---|---|---|---

A->B | 4000 | 7000 | 1514

B->A | 7000 | 4000+1514-54=4146 | 54

A->B | 4146 | 7000+54-54=7000 | 1514

B->A | 7000 | 4146+1514-54=4292 | 54

問題三:如何知道數據傳送完了,需要斷開連接嗎?

主機A發送數據給主機B

第一步:主機A傳送的數據傳送完後,為了讓B知曉,將標誌位FIN(finish)設置為1,ACK設置為1,seq是上一次傳過來的,ack為為上次傳過來的seq+1。

第二步:主機B收到A的數據,發現FIN為1,將ACK置為1,ack為傳過來的seq+1,seq為傳過來的ack

第三步:主機B再次發送報文給A,將FIN設置為1,ACK為1,ack為上一次的ack+1,seq為上一次的seq

第四步:A收到B的FIN回復,ACK=1,ack為上一次seq+1,seq為上一次ack+1。B收到後關閉連接,A發送報文等待2ms關閉連接。

這就是所謂的四次揮手。

網路的只是這裡只是自己的見解,幫助大家理解。後面還有更多心得一起奉上。

參考:

- TCP三次握手連接及seq和ack號的正確理解

- 關於TCP協議,我想你應該懂了!

- TCP/IP 之 大明王朝郵差

- TCP三次握手簡介解

- TCP四次揮手簡介

- 通俗大白話來理解TCP協議的三次握手和四次分手

推薦閱讀:

華為路由器無線橋接水星路由器
RCNN學習筆記(5):faster rcnn
網路是怎樣連接的-探索協議棧和網卡
計算機網路(筆記)04--Internet結構
伺服器租用哪家好?

TAG:前端開發 | 計算機網路 | 前端入門 |