IPv4

ipv4(Internet Protocol v4,網際網路協定第4版)
於1981年定義在RFC791
網際網路中識別電腦用
IP位址為32bit,由4個8bit組成

IP特色
Connectionless packet Delivery Service
 根據信息內位址傳送資料﹐不確保每個路由的封包是可靠和依序的送達目的地
 封包排序:無順序資料先存在緩衝器中,直到按順序收齊才從緩衝器送出
Network Technology Independent
 有一套資料包規則和定義,獨立與硬體之上,應用在不同的網路
Universal Interconnection
 連接網路將獲得獨一無二的識別位址
unreliable protocol
 並不執行錯誤檢查與更正,因為這是由上層協定完成

依用途分為:
public ip(公開位址)
獨一無二的,在公開網路上不可能有相同的pubic ip
需從isp或付費登錄取得
private ip(私有位址)
依RFC 1918將class a,b,c中部份ip保留給內部私用
只限於內部網路使用
無法路由在internet,外網router遇到此類ip會立即忽略
ps:將private ip轉換成public ip可使用nat(網路位址轉換)

ipv4有3種格式
unicast(單播):一對一的通訊,僅指向網路上的一台主機,只有一份複製的封包會送達此位址所對應的電腦
ex:來源傳送給10個目地且資料相同時,要傳10個相同的packet
broadcast(廣播):也稱第三層廣播,送出一個封包讓網路上的電腦都收可收到一份,(無效率,因要交由系統決定是否保留)
multicast(多播):和廣播很像,但網卡不會將訊框交由cpu(網卡只收符合設定的訊框),但須指多重傳播位址給指定電腦用
 multicast ip於網路上是唯一的,可將封包導向給事先定義的一群ip位址中,因此單一工作站可同時將單一的資料串流傳給多接收者
 multicast ip只能使用class d網段,一個multicast ip可以包含多個節點,一個節點可以加入多個不同的multicast ip
ps:ether multicast為網路卡多點傳播位址,表示格式為最高位元組的最低位元為1 ex:0100:0000:0000 
ps:multicast ip的low-order 23bit會對映到ethernet address的low-order 23bit ,ex:224.0.0.2 > 0100:5e00:0002
ps:當一群主機要進行通訊時,主機會選定某一群播位址,而用一群組內的所有主機的網路卡經註冊設定後,各主機將會收到一份傳送經此群播位址的封包複本
ps:igmp
用來決定那些主機要加入multicast group,以及和mutlicast group內主機通訊 
當主機加入multicast group時,會傳送igmp訊息到group multicast address聲明他的群組 

ps:設備需支援才可使用multicast
ex:來源傳送給10個目地目資料相同時只要傳1個packet,然後設備會處理傳送到10個目地的工作

……………………………………

IP 封包表頭格式
可參考RFC-791,RFC-1122,RFC-815,RFC-1700
header+data最大65536bytes
ps:ethernet frame只有1492byte的空間可放ip pakcet

header是20byte,若含option與padding最大可到60byte,如下:

VersionIHLType of ServiceTotal Length
IdentificationFlagsFragmentation Offset
Time To LiveProtocolHeader Checksum
Source Address
Destination Address
OptionsPadding

ps:上表每行為4byte
ps:identification,flags,fragmentation offset通常不會用到

各欄位說明如下:
Version(規格版本) 4bit,ver4表0x4
IHL(Internet Header Length,標頭長度) 4bit 值為5代表5*4byte表20byte
TOS(Type of Service服務類型):分為以下子欄位
 precedence(3bit):值越大越重要
 TOS(4bits):組合如下
  1000代表minimize delay(最小延遲)
  0100代表maximize throughput(最大流量)
  0010代表maximize reliability(最高可靠度)
  0001代表minimize monetary cost(最小成本)
  0000代表normal service
 MBZ(1bit)
TL(Total Length,封包總長)16bit,標頭和數據的總和,最大長度65536byte(0-65535)
ID(Identification,識別碼)16bit,的唯一識別碼,封包重組依據,同封包被切的碎片,id皆相同
FL(Flag,旗標)3bit,在傳輸中進行最佳組合時用的,分為以下子欄位:
 保留,1bit
 不分段,1bit,1表不可分割DF(do not fragment)常用於測試,0表可分割
 更多段位,1bit,1表還有更多分割封包MF(more fragment),0表示為最後一個碎片
FO(Fragment Offset,分割定位)13bit,若封包未切割則值為0
 封包比mtu大時,要切成fragment(碎片)並記錄,最多片段數8192*8=最大資料長度65536byte
TTL(Time To Live,存活時間)8bit,IP以hop為單位
 最大存活期為255,每跳一站就減1,用來避免無止境的傳送,但Win2000是128
PROT(Protocol,協定)8bit,該封包所使用的網路層協定類型
 常見的為:icmp=1,tcp=6,igrp=9,udp=17,ipv6=41,gre=47,eigrp=88,ospf=89,ipx in ip=111,l2tp=115
HC(Header Checksum,標頭檢驗值)16bit,接收端檢錯用,OK則送確認信息表正常
 只檢查header 
 每跳一站都會重新計算hc,會增加設備負擔
 早期有需要,但因現在網路品質良好此欄位可省略
SA(Source IP Address,來源位址)32bit
DA(Destination IP Address,目的地位址)32bit
Options(選項) 變動40byte,某些特殊的封包需要特定的控制
security(安全):描述資料保密程度
 strict source routing(嚴格來源路由):只可走指定的路徑,因發生重大資安事件現已較少在用 
 loose source routing(寬鬆來源路由):需經過指定的路徑
 record route(記錄路徑):把經過的路由器ip記錄下來
 timestamp(時間戳記):把經過的路由器的時間記錄下來
padding(補位):此欄位會加入額外的0,保證ip表頭為32bit長度之倍數