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