1. 程式人生 > >tcp/ip網路協議基礎知識總結

tcp/ip網路協議基礎知識總結

1,TCP/IP模型:
在這裡插入圖片描述
有些地方把接入層也稱為介面層。
2,TCP協議
TCP是一種可靠的,面向連線的服務協議。
TCP頭:
在這裡插入圖片描述
其中的長度為頭部的長度,單位是4位元組。通常為5, 即TCP頭長度為20.
3,UDP協議
UDP 是一種不可靠,無連線的,盡力轉發的資料服務協議。
優點: 不需先建立連線,直接傳輸資料,開銷小,小資料量傳送時具有更好的效能優勢。
在這裡插入圖片描述

UDP長度: 以位元組為單位,整個段長度,包含資料段。
UDP的校驗和是一個端到端的校驗和,由傳送端計算,接收端驗證,但其檢測不出交換倆個16bit的差錯。
4,IP協議
IP地址分類:
在這裡插入圖片描述
IP頭部:
在這裡插入圖片描述
在這裡插入圖片描述

5,乙太網幀結構:
Ethernet II :
在這裡插入圖片描述


Ethernet_802.3:
在這裡插入圖片描述
通常在目標地址前還含有:前導同步碼(7位元組),幀開始碼(1位元組),這8個位元組在物理層會自動過濾掉,故不計算在頭部。
故乙太網幀頭部總長度為6+6+2+4=18位元組。
Ethernet II型別乙太網幀的最小長度為64位元組(6+6+2+46+4),最大長度為1518位元組(6+6+2+1500+4)。這是物理特性決定的。
(1) 前12位元組分別標識出發送資料幀的源節點MAC地址和接收資料幀的目標節點MAC地址。
(2) 接下來的2個位元組標識出乙太網幀所攜帶的上層資料型別,型別欄位的最小值是0x0600[大於1500, 根據這一點可以區分Ethernet II和Ethernet_802.3].
0x0800   IP協議資料,
0x86dd   IPv6協議資料,
0x809B   AppleTalk協議資料,
0x8138   Novell型別協議資料等。
0x0806   ARP
0x0600   XNS (Xerox)
0x6003   DECNET
(3)Ethernet V2可以裝載的最大資料長度是1500位元組,而IEEE 802.3可以裝載的最大資料是1492位元組(SNAP)或是1497位元組
(4)後來為解決Ethernet II與802.3幀格式的相容問題,推出折衷的Ethernet SNAP格式 。
在這裡插入圖片描述

對於小於或者大於這個大小範圍的乙太網幀,一般的乙太網轉發裝置都會丟棄這些資料幀。由於乙太網Ethernet最大的資料幀長是1518 Bytes這樣,刨去乙太網幀的幀頭(目標、源、型別共計14位元組)14 Bytes和幀尾CRC校驗部分FCS 4 Bytes,那麼承載上層協議的Data域最大就只能有1500 Bytes。而這個值就是我們稱之為MTU。
6,資料在各層的格式:

在這裡插入圖片描述

7,資料經過各層協議過程如下:
在這裡插入圖片描述
8,MTU與MSS的關係
MTU,即最大傳輸單元,這是一個數據鏈路層的概念,限定的是鏈路層資料幀長度。
MSS: Management Support System 最大報文長度
MTU與MSS的關係可以簡單理解為:
MTU= MSS+TCP層頭部長度+IP層頭部長度 (MSS是指應用層在一個數據包內最大能傳輸的位元組數,MTU是指IP層在一個數據包內最大能傳輸的位元組數)
如MTU=1500
對於TCP:
MSS = 1500-20(TCP頭)-20(IP頭)=1460
對於UDP:
MSS = 1500-8(UDP頭)-20(IP頭)=1472
9,乙太網幀的最小報文為46位元組來由
乙太網最小長度為64位元組的來由:
按照標準, 10Mbps乙太網最小發送時間為51.2微秒,稱之為乙太網時隙,此段時間所能傳輸的資料位為512 bit,即512/8=64 byte。
64-6(目的地址)-6(源地址)-2(長度)-4(crc)=46位元組
但不同的抓包軟體抓到的最小長度也有差別,當長度小於46位元組是,wireshark有填充資料,sniffer卻沒有填充資料。
為何抓包時抓到的最大幀是1514位元組:
物理層上網絡卡會先把前導同步碼(7位元組),幀開始碼(1位元組)去掉,並進行CRC校驗,校驗未通過,丟棄此資料。
抓包軟體同時也會將CRC去掉,這樣抓包得到的1526-7-1-4=1514位元組
MSS的值是再SYN段進行協商的。
10,IP分片
通常要傳輸的報文其大小都要超過MTU,此時就要進行IP分片。IP協議在傳輸資料包時,將報文分成若干分片進行傳輸,每一片都有自己的IP頭。但是,即使只丟失一片資料,也要重傳整個資料報,因為IP層本身沒有重傳機制。
在這裡插入圖片描述


下面是windows下,不允許分片時,資料長度大於MTU的情形:
在這裡插入圖片描述
分片圖例:
在這裡插入圖片描述

使用UDP很容易導致IP分片,但TCP避免了IP分片,因為一旦TCP資料過大,超過了MSS,則在傳輸層對TCP包進行分段,每段到了IP層資料就不會超過MTU.
11,資料包的截斷
POSIX系列的recv,fecvfrom, read函式均無法得到資料包被截斷的錯誤訊息,但recvmsg(int socket,struct msghdr *message,int flags)如message->msg_flags &MSG_TRUNC為真,則表示資料包被截斷。
12,廣播、組播
廣播:
主機對某一網路上的所有主機發送資料包,此網路可能是網路也可能是子網。一般ARP是以廣播形式傳輸的。
A類IP廣播的地址是10.255.255.255 or 10.10.subnetid.255
C類IP廣播的地址是192.x.x.255
組播: 即多播
給一組特定的主機發送資料。
多播的地址是D類IP,規定是224.0.0.0 ~ 239.255.255.255