網路基礎知識(一):網路分層、UDP協議
TCP/IP四層:
應用層、運輸層、網路層、鏈路層
應用層是使用者程序,而其他三層是核心工作應用層協議(TCP):
FTP(21) 檔案傳輸協議
Telent(23) 遠端登陸
SSH(22) 安全遠端登陸協議
SMTP 簡單郵件傳送協議
應用層協議(UDP):
DNS(53) 域名解析協議
BOOTP(68) 載入程式協議
TFTP(69) 簡單檔案傳送協議
SNMP 簡單網路管理協議
傳輸層協議: TCP/UDP
網路層協議: IP/ICMP/IGMP
ICMP 用於交換錯誤報文,Ping和Traceroute使用ICMP
IGMP 組管理協議,用於UDP的跨路由器組播
ICMP/IGMP都被封裝在IP資料報中(類似TCP/UDP一樣)
鏈路層協議:IP:
網路層提供的是逐跳協議,不可靠服務,TCP是在不可靠的IP層上提供可靠的運輸層
IP的錯誤處理方法:丟棄該資料報,併發送ICMP訊息報給源端網際網路地址分類:
型別 開頭 網路號(bit) 主機號(bit)
A 0 7 24
B 10 14 16
C 110 21 8
D 1110 多播組號共:28位
E 11110 (保留,共27位)廣播地址:
網路號和主機號全為1:受限的廣播地址,不能被路由器轉發
有網路號,主機號為全1的:如果有固定子網號,則向該子網廣播,否則子網號為全1的,向該網路的所有子網廣播。報頭大小:
IP 20位元組
TCP 20位元組(可擴充套件)
UDP 8位元組
ARP 28位元組鏈路層有三個目的:
IP資料報的傳送和接受、ARP的請求和應答、RARP的請求和應答。SLIP:序列線路IP,序列線路的速率較低,一般用於小的TCP分組交換
localhost的IP地址為127.0.0.1,是A類地址,沒有進行子網劃分。
網路位元組序:
是大端儲存,即高位位元組存在地位地址中,是由於TCP/IP首部中所有的二進位制整數在網路中傳輸都以這種次序,而我們PC機一般都是小端儲存。IP資料報大小:
一般鏈路層都會對IP資料報進行分片,主機一般不接收超過576位元組的資料報。由於TCP是流傳輸,因此無影響,而UDP一般都限制使用者的資料報長度為512位元組。
注意:NFS檔案系統允許超過8192位元組的IP資料報IP路由選路過程:
1)搜尋與目的IP地址完全相同的表目;
2)搜尋目的網路號匹配的表目;
3)搜尋預設表目;
4)以上都沒有,則向原地址傳送“主機不可達”或“網路不可達”的ICMP報文
注意: 1)IP的逐跳協議,為一個網路指定一個路由器即可,這樣可以大大減少路由表的大小,比如整個Internet上的路由器只有幾千個表目;
2)整個IP路由的過程當中,目的IP地址始終是不變的,但是每一跳的鏈路層的目的MAC地址始終都指向下一跳的鏈路層地址(且一般都是預設的)。如果是跨路由器的,那麼下一跳的MAC地址是由該網路的路由器告知的。大多數的子網例子都是B類地址,一個包含30個子網的B類地址比30個C類地址的好處是:減小路由表的規模。因為子網對於路由器外是透明的,對於網路內部是不透明的。
MAC地址是48bit,IP地址是32bit
使用 arp -a 檢視ARP告訴快取,每一項的生存時間是20分鐘乙太網最小長度:
60位元組,而28位元組的ARP+14位元組的乙太網首部=42位元組,因此要填充至60位元組。TCP中client的connect的連線超時時間一般為:75s。這個時間其實是有ARP的請求時間決定的。
重點:如何減小connect連線超時時間?
問題分析:因為connect呼叫阻塞時,我們即時退出應用程式,也要75s後才能繼續使用,說明內部超時是在核心中工作的。我們應該在connect之前先將socket設定為非阻塞的,然後再呼叫connect,這時,無論是否成功都會立即返回,我們可以通過select的返回值判斷是否連線成功。如果socket是可讀可寫的,說明連線失敗;如果socket是可寫的,說明連線成功。注意,在連線成功後要將socket重新設定為阻塞的,為什麼?RARP作用: 由MAC地址獲得IP地址。
有盤系統一般在系統啟動時,從磁碟上的配置檔案中讀取IP地址;而無盤系統就要通過RARP了。
BOOTP: 解決了RARP是鏈路層協議,不能跨路由的問題。
通常與TFTP協同工作,固化在無盤系統只讀儲存器中。
一個無盤系統需要在只讀儲存器中實現下列協議:BOOTP、TFTP、UDP、IP和一個區域網驅動程式ICMP:
報頭大小是不固定的,一個“UDP埠不可達”的ICMP報文大小是70位元組:
乙太網頭(14) + IP頭(20) + ICMP頭(8) + 產生差錯(不可達)的IP頭(20) + UDP頭(8) = 70位元組
ICMP重定向報文可以更新路由表Traceroute命令用於檢視主機到另一主機的路由,而Ping命令也有這個功能,但是Ping命令只能存9個IP地址。
Traceroute和Ping區別:
Ping每隔1s傳送一個包,不管是否接受到回覆;
Traceroute直到收到應答或超時才發下一個。
TTL一般為255,資料報每經過一個路由器就減1,直至為0時丟棄。TTL的存在為了防止資料報無休止的在網路中。
Traceroute工作流程:首先發送TTL為1的資料報,第一個路由器將TTL減1,丟棄該資料報,然後回送超時ICMP報文,這樣就獲得了路徑上第一個路由器地址。然後傳送TTL為2、3…依次獲得路徑地址。而如何判斷到達主機呢?由於到達主機後,不會回送超時ICMP報文,所以我們傳送的源資料報中要使用一個不可能的值作為UDP埠,這樣當目的主機接收到資料報後就會回送一個“埠不可達”錯誤,這樣我們就知道到達目的主機了。IP選路可以分為靜態選路和動態選路。
靜態選路:
1)通過route命令增加表項(通常從系統自載入程式檔案中)
2)通過ICMP重定向生成表項(通常在預設方式出錯的情況下)
動態選路:
只有在 1)網路很小
2)與其他網路只有單點連線
3)沒有多餘路由
三個條件都滿足時才用靜態選路,否則都是動態選路,所以顯然動態選路更常用。
動態選路協議: 1)用於同一自治系統路由器間的內部閘道器協議(IGP)
a)RIP 易受攻擊
b)OSPF 客服了RIP的所有限制,廣泛使用
2)用於不同自治系統路由器間的外部閘道器協議(EGP)
BGP 使用TCP作為傳輸層協議
3)無型別域間選路(CIDR):防止路由表膨脹UDP首部8位元組:
16位源埠、16位目的埠、16位UDP長度、16位檢驗和
TCP發生檢驗和差錯的概率比UDP高得多,因為TCP一般用於遠端連線,而UDP一般為本地通訊。
UDP分片除了最後一片以外都是8的整數倍大小。混雜模式:多數介面都為混雜模式,可以接收每個幀的複製,tcpdump就是這種模式。
廣播的問題:增加了對廣播不感興趣主機的處理負荷。
解決: 使用組播
組播: 由於多播都是D類地址,所以開頭4位為1110,且多播組號中的高5位在對映過程中被忽略,例如:
224.128.64.32和224.0.64.32被對映為同一乙太網地址(他們的高9位相同)
多播目前還不能在廣域網中進行。廣播分組長度最大為1472。
原因:乙太網MTU為1500,減去20位元組IP頭和8位元組UDP頭為1472,如果是1473,由於大於MTU,會被鏈路層分片,而廣播地址是不允許被分片的,所以會返回“Message too long”錯誤。DNS指標查詢:給定IP地址,返回域名
為了減少DNS通訊量,所有的名字伺服器都使用快取記憶體