這篇是unix網絡編程的學習筆記。編程
ip層協議,無鏈接,不可靠。因此必須依賴上層協議實現鏈接和可靠,好比tcp。網絡
鏈接指創建鏈接,可靠指基於鏈接的通訊纔是可靠的。好比,udp,就不須要創建鏈接,它只管發送數據,有沒有收到無論,因此也說它不可靠,只要沒有創建鏈接通訊,就是不可靠。**但是,不創建鏈接怎麼通訊呢?**特別注意,這裏說的不創建鏈接,不是真的不創建鏈接,而是創建的鏈接是一次性的,不是長期關係,長期鏈接,好比tcp是長期鏈接長期通訊,只要不主動close()就能夠一直通訊。而udp不行,udp只管創建鏈接,發送數據,而後鏈接結束。udp建立鏈接也是建立socket,這個都是同樣的,不一樣的傳輸層協議包括tcp udp icmp都是經過建立套接字來實現的,只不過不一樣的參數選項而已。socket
ip層只負責源地址和目的地址,還有數據。ip路由協議的主要目的是路由數據。tcp
可靠性包括幾點
1.無差錯
2.按順序
3.不重複學習
最重要的字段
1.數據
2.源地址
3.目標地址操作系統
重點關注前面三個字段。3d
4.數據的大小
就是整個報文的數據大小。知道大小,讀數據的時候就知道何時結束。unix
5.惟一標識符
惟一標識該數據報文。由於可能重複,因此寫讀的時候根據這個要去重。cdn
6.協議
最多見的是tcp仍是udp。
還有icmp(internet control message protocol網絡控制消息協議),好比ping telnet traceroute等,使用的就是icmp協議。blog
知道了咱們須要哪幾個核心字段,再來看ip協議的細節是怎麼包含這幾個核心字段的。ip數據報文,包括兩部分:
1.頭
2.數據
頭就是和http請求頭/響應頭同樣,屬於協議的格式部分,有了這些字段,才能識別是什麼協議。
頭字段的圖
對頭字段的圖的說明,總共包括兩部分:
1.固定字段
2.選項字段
固定字段總共佔20個字節,上圖的每一行是32位(即佔4個字節),總共5行,因此總共恰好是20個字節。
選項長度不固定,最大值是40個字節。由於固定字段裏有個長度字段限制了頭的總長度。
固然,還有一部分,就是數據自己,這個不提略過。
是傳輸層協議,和tcp udp同層級。
報文格式
做用
用於肯定兩臺機器是否能夠通訊,若是不能通訊,是由於哪些緣由。
報錯信息如圖
imcp協議如何通訊?
也是套接字,不過是原始套接字,你就記住是兩套機制,雖然都是套接字。可是,使用的時候差很少,建立原始套接字的時候,只是參數不一樣,有個字段標識這是原始套接字。
原始套接字用於ping程序,不須要端口,至關因而兩臺機器操做系統之間的通訊,而不是某個具體的程序,因此不須要端口。
unix網絡編程