天天看點

tcp/ip網絡協定基礎知識總結

1,TCP/IP模型:

tcp/ip網絡協定基礎知識總結

有些地方把接入層也稱為接口層。

2,TCP協定

TCP是一種可靠的,面向連接配接的服務協定。

TCP頭:

tcp/ip網絡協定基礎知識總結

其中的長度為頭部的長度,機關是4位元組。通常為5, 即TCP頭長度為20.

3,UDP協定

UDP 是一種不可靠,無連接配接的,盡力轉發的資料服務協定。

優點: 不需先建立連接配接,直接傳輸資料,開銷小,小資料量發送時具有更好的性能優勢。

tcp/ip網絡協定基礎知識總結

UDP長度: 以位元組為機關,整個段長度,包含資料段。

UDP的校驗和是一個端到端的校驗和,由發送端計算,接收端驗證,但其檢測不出交換倆個16bit的差錯。

4,IP協定

IP位址分類:

tcp/ip網絡協定基礎知識總結

IP頭部:

tcp/ip網絡協定基礎知識總結
tcp/ip網絡協定基礎知識總結

5,以太網幀結構:

Ethernet II :

tcp/ip網絡協定基礎知識總結

Ethernet_802.3:

tcp/ip網絡協定基礎知識總結

通常在目标位址前還含有:前導同步碼(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格式 。

tcp/ip網絡協定基礎知識總結

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

6,資料在各層的格式:

tcp/ip網絡協定基礎知識總結

7,資料經過各層協定過程如下:

tcp/ip網絡協定基礎知識總結

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層本身沒有重傳機制。

tcp/ip網絡協定基礎知識總結

下面是windows下,不允許分片時,資料長度大于MTU的情形:

tcp/ip網絡協定基礎知識總結

分片圖例:

tcp/ip網絡協定基礎知識總結

使用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