最近剛看完電影 「無敵破壞王2:大鬧網際網路」,覺得裡面有些動畫蠻有意思的,於是想起前不久看的《圖解HTTP》和 TCP/IP相關的文章。嗯,是時候展示真正的技術了。
如果你還對各類協議歸屬、作用也都傻傻分不清,那麼你有必要詳盡了解下 TCP/IP。
1. TCP/IP協議族網際網路協議套件(英語:Internet Protocol Suite,縮寫 IPS)是一個網絡通訊模型,以及一整個網絡傳輸協議家族,為網際網絡的基礎通訊架構。它常被通稱為TCP/IP協議族(英語:TCP/IPProtocolSuite,或 TCP/IPProtocols),簡稱 TCP/IP。因為該協定家族的兩個核心協定:TCP(傳輸控制協議)和IP(網際協議),為該家族中最早通過的標準。
敲重點:
1.1 TCP/IP拆家分層TCP/IP協議族中有一個很重要一點就是分層管理,依次為以下四層,應用層,傳輸層,網絡層,數據鏈路層。
TCP/IP分層管理是有好處的,假如網際網路只有一個協議統籌,某一個地方改變設計時,就需要把所有部分都替換掉,而分層只需要把變動的層替換掉即可。
而且分層管理,設計也相對簡單,處於應用層的應用只需要考慮分派自己的任務而不需要考慮對方的傳輸線路是怎樣的,能否保證傳輸送達。
2. 應用層, ApplicationLayer應用層是大多數普通與網絡相關的程序為了通過網絡與其他程序通信所使用的層。這個層的處理過程是應用特有的;數據從網絡相關的程序以這種應用內部使用的格式進行傳送,然後被編碼成標準協議的格式。
應用層決定了向用戶提供的應用服務時的通信活動:
HTTP(全球資訊網服務)
FTP(文件傳輸)
SMTP(電子郵件)
SSH(安全遠程登陸)
DNS(名稱<-> IP位址尋找,域名系統)
以及許多其他協議
一旦從應用程式來的數據被編碼成一個標準的應用層協議,它將被傳送到IP棧的下一層。
圖中用到HTTP和DNS3. 傳輸層, TransportLayer傳輸層位於應用層的下層,提供位於網絡連接中的兩臺計算機之間的數據傳輸,傳輸層中有兩種性質不同的協議
敲重點:每一個應用層協議一般都會使用到兩個傳輸層協議之一
摘自:TCP和UDP比較
3.1 傳輸層的意義網絡層的功能使我們能夠將數據包從一臺機器傳送到網絡上的另一臺機器,但這還不足以編寫網絡應用程式,因為:
3.2 何為「四元組」?TCP通過定義埠號解決了第一個問題:
埠號本質上是標識符,有助於 TCP區分機器上運行的應用。
換句話說,計算機上的每個埠號都由該計算機上的應用擁有。
埠號是2位元組整數,埠0不可用。因此,我們可以在一臺機器上擁有多達65536個埠。
TCP通過埠號來定義「連接」。
TCP連接由源和目標IP位址(來自網絡層)以及源和目標埠號標識。這也稱為四元組:
// 源IP位址、目的IP位址、源埠、目的埠
(src ip,dst ip,src port,dst port)
3.3 SEQ和 ACK,序列號與確認號TCP網絡中,為了保障每個連接提供有保證和有序的字節傳遞,使用了 SequenceNumber (,序列號)和 AcknowledgmentNumber (確認號),即 Seq和 Ack。
TCP 每次發送與接受的單位為:TCP頭部 + 數據, TCP數據段 ( TCPSegment);
每個數據段的大小不盡相同,有可能數百~數萬。
SEQ,序列號,表示每次傳輸中字節的偏移量 ACK,確認號,指出下一個期望接收的 SEQ(接受完畢)
舉個例子:
序列號為 #2000且長度為 100的數據包,在此連接上包含第 2000-2099個字節。
當接收器接收到包括第 2099位元組在內的所有字節時,它發送一個確認 #2100。
表示它已在第 2100位元組之前接收到該字節。
3.4 SYN,同步序列號為了避免與先前連線的數據段混淆,當次連線建立時,序列號 並非從 0 開始。
兩端會使用 ISN產生器,產生各自的 初始序列號 ( InitialSequenceNumber,ISN), 通常兩者並不相等。
連線建立時,透過 控制位元 (Control Bits) 中的 SYN,讓兩端的 TCP 必須進行 ISN的交換 (同步)。
好吧,說人話。就是TCP三次握手:
這就是 TCP連接的建立方式, 且 2 和 3,可以組合為單一訊息。
於是便有下圖:
且第三次握手中 ( Client——>Server), 其 SEQ為 第一段的值 + 1 (ISN + 1)。
4. 網絡層, NetworkLayer網絡層用來處理在網絡上流動的數據包(數據包:網絡上傳輸的最小數據單位)。
網絡層規定在眾多選項中通過怎樣的路徑(傳輸線路)到達對方的計算機,把數據包傳輸給對方。
流動中的數據包該層中最突出的協議是 Internet協議(IP),因此該層也稱為 IP層。IP的核心是兩個主要功能:地址和路由。
IP的原始版本是 IPV4,後來擴展了 IPV6:
IPv4中規定 IP位址長度為32,即有2^32-1個節點(40億)。
我們網絡中已經有超過40億個節點,鑑於此,促成了IPV6發展。
IPv6中 IP位址的長度為128,即有2^128-1個節點(2125億)
如果 IPV6被廣泛應用以後,全世界的每一粒沙子都會有相對應的一個IP位址。
4.1 地址今天,大多數機器都有 IPv4和 IPv6地址。如果運行 ifconfig,則可以看到計算機的 IPv4和 IPv6地址。
~ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1809:1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
4.2 路由IP路由基於使用地址前綴的規則構構建。如果在計算機上運行 netstat-rn,則可以在計算機上看到路由表。
它就像 switch/case語句中的 default。
% netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif
default 10.31.10.222 UGSc 54 0 en0
default link#17 UCSI 0 0 bridge1 !
10.31.10/24 link#8 UCS 9 0 en8 !
Internet6:
Destination Gateway Flags Netif Expire
fe80::%lo0/64 fe80::1%lo0 UcI lo0
網際網路上的所有節點都有這些路由表,這就是IP數據包路由到達目的地的方式。
如果您想了解如何在網絡中將數據包路由到掘金 juejin.im,請運行以下命令:
traceroute juejin.im
就會得到下圖:
5.鏈路層, LinkLayer(又名數據鏈路層,網絡接口層)用來處理連接網絡中的硬體部分,硬體上的範圍均在鏈路層中,包含
主機,線路,路由器5.1 ifconfig: 查看 MAC地址在任何網絡中,每個節點都具有 「鄰居」。鏈路層協議提供通過鏈路直接連接的「鄰居」之間通信所需的功能(例如,像CAT5電纜的物理鏈路,或WiFi中的無線電鏈路)。
最著名的鏈路層協議是乙太網。在乙太網中,每個接口都有一個唯一的48位(6位元組)地址,稱為媒體訪問控制(MAC)地址。
如果在計算機上運行 ifconfig,您將看到網絡接口的名稱及其 MAC地址。
~ ifconfig
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 88:e9:fe:4c:83:5b
inet6 fe80::1809:d41a:a9a:d664%en0 prefixlen 64 secured scopeid 0x8
inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
如你所見,MAC地址中的每個字節都由十六進位值表示,並以冒號分隔。
通過乙太網鏈路發送的網絡數據包具有源和目標 MAC地址。為了發現它的鄰居,乙太網使用廣播查詢和通知。使用這些廣播機制,另一種稱為 ARP的協議可以找到鄰居的 MAC和 IP位址之間的映射。如果在計算機上運行 arp,則可以看到此映射。
~ arp -a -n
? (10.31.xx.xx) at 98:28:xx:2a:cc:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at f4:8e:xx38:f5:b5:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at 54:ee:xx:e1:33:xx on en8 ifscope [ethernet]
....
現在我們已經知道MAC和IP位址之間的映射關係。
6. TCP/IP 通信傳輸流TCP/IP 通過分層管理進行網絡通信,發送端從應用層往下走,接收端則往應用層上層走。
然後便一層層包裹,解析。
發送端,每經過一層會打上該層所屬的首部信息。
接收端,每經過一層會把對應的首部信息解析。
7. 擴展:運行在傳輸層中的 TCP 和 UDP的協議每一個應用層(TCP/IP參考模型的最高層)協議一般都會使用到兩個傳輸層協議之一:
運行在 TCP協議上的協議:
HTTP(HypertextTransferProtocol,超文本傳輸協議),主要用於普通瀏覽。
HTTPS(HTTP over SSL,安全超文本傳輸協議), HTTP協議的安全版本。
FTP(FileTransferProtocol,文件傳輸協議),用於文件傳輸。
POP3(PostOfficeProtocol,version3,郵局協議),收郵件用。
SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協議),用來發送電子郵件。
TELNET(Teletypeover theNetwork,網絡電傳),通過一個 終端(terminal)登陸到網絡。
SSH(SecureShell,用於替代安全性差的TELNET),用於加密安全登陸用。
運行在 UDP協議上的協議:
BOOTP(BootProtocol,啟動協議),應用於無盤設備。
NTP(NetworkTimeProtocol,網絡時間協議),用於網絡同步。
DHCP(DynamicHostConfigurationProtocol,動態主機配置協議),動態配置IP位址。
運行在 TCP和 UDP協議上:
求一份深圳的內推好了,又水完一篇,入正題:
目前本人在(又)準備跳槽,希望各位大佬和HR小姐姐可以內推一份靠譜的深圳前端崗位!996.ICU 就算了。
微信:huab119
郵箱:454274033@qq.com
作者掘金文章總集