網絡層次划分


OSI參考模型
每一層作用
物理層:透明的傳輸比特流(比特Bit)
數據鏈路層:將比特組裝成幀和點到點的傳遞(幀Frame)
網絡層:子網的運行控制,確認從源端到目的端如何選擇路由(包Packet)
傳輸層:第一個端到端、進程到進程,報文傳遞和錯誤恢復(段Segment)
會話層:建立、管理和終止會話(會話協議數據單元SPDU)
表示層:對數據進行翻譯、加密和壓縮(表示協議數據單元PPDU)
應用層:提供訪問網路服務的接口(應用協議數據單元APDU)
每一層的設備
物理層:中繼器,集線器
數據鏈路層:網橋,交換機
網絡層:路由器
網絡層以上:網關
附加:網卡工作在物理層和數據鏈路層的MAC子層
每一層的協議
TCP/IP模型
OSI七層和TCP/IP模型對應關系如下,每層作用、協議、設備同OSI模型

TCP和UDP(傳輸層)
TCP和UDP的區別
TCP:傳輸控制協議,提供面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發、丟棄重復數據、檢驗數據、流量控制等功能,保證數據能從一端傳到另一端。
UDP:用戶數據包協議,一個簡單的面向數據報的傳輸層協議,不提供可靠性,只是把應用程序傳給IP層的數據報發送出去,但並不保證它們能到達目的地。由於UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,所以傳輸速度很快。
舉例說明:
TCP就像打電話,兩者之間必須有一條不間斷的通路,數據不到達對方,對方就一直等待,除非對方直接掛電話。先說的話先到,后說的話后到,有順序。
UDP就像寄一封信,發信者只管發,不管到,但是信封上必須寫明對方的地址。發信者和收信者之間沒有通路,全靠郵電局聯系,信發到時可能過了很久,也可能沒有發到,先發的信未必先到,后發的信也未必后到。
TCP客戶/服務器程序的socket函數

問題:如何編寫socket套接字?
答:服務器端:
(1)調用ServerSocket(int port)創建一個服務器套接字,並綁定(bind)到指定端口上。
(2)監聽連接請求(listen),調用accept,有接收連接,則返回監聽套接字
(3)調用socket類的getOutStream和getInStream獲取輸出流和輸入流,開始網絡數據的發送和接收。
(4)關閉通信套接字socket.close
客戶端:
(1)調用socket創建一個流套接字,並連接到服務器端。
(2)調用socket類的getOutStream和getInStream獲取輸出流和輸入流,開始網絡數據的發送和接收。
(4)關閉通信套接字socket.close
TCP三次握手(建立連接)

第1次握手:建立連接時,客戶端發送SYN包(SYN=j)到服務器,並進入SYN_SEND狀態,等待服務器確認。
第2次握手:服務器收到SYN包,必須確認客戶的SYN(ACK= j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
第3次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成3次握手
附:
客戶端的connect在三次握手的第二次返回,而服務器的accept在三次握手的第三次返回
SYN:同步序號,表示此報文是一個連接請求或連接接受報文
ACK:確認位,對接收到報文的確認
問題:TCP采用二次握手可以嗎?
答:不可以。采用三次握手是為了防止有效的連接請求報文段突然又傳送到服務器,從而發生錯誤。當客戶端發出的客戶請求報文段由於某些原因沒有及時到達服務器,而客戶端在等待一段時間后又重新向服務器發送連接請求,且建立成功,順序完成數據傳輸,那么第一發送的連接請求報文段就稱為失效的連接請求報文段。考慮這樣一種特殊情況,客戶端第一次發送的請求連接並沒有丟失,而是因為網絡問題導致延遲到達服務器,服務器以為是客戶端又發起的新連接,於是服務器同意連接,並向客戶端發回確認,但是此時客戶端不予理會,服務器就一直等待客戶端發送數據,導致服務器的資源浪費。
TCP四次揮手(釋放連接)

第1次揮手:釋放連接時,客戶端發送FIN包(FIN=M)到服務器,告訴服務器數據已經發送完畢。
第2次揮手:服務器收到FIN包,對客戶端發送確認信號(ACK=M+1),表明我知道了。
第3次揮手:一段時間后,服務器發送FIN包(FIN=N)到客戶端,告訴客戶端也關閉了數據傳送。
第4次揮手:客戶端收到FIN包,對服務器發送確認信號(ACK=N+1),表明我知道了。
附:
FIN:終止位,表示發送方完成數據發送,用來釋放一個連接
問題:TCP為何采用四次揮手來釋放連接?
答:關閉連接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了,但是未必你所有數據都發給對方了,所以你未必會馬上關閉socket,也即你可能還需要發送一些數據給對方后,再發送FIN報文給對方來表示你沒有數據發給對方了,針對每個FIN報文,都需要一次ack報文,所以需要四次揮手。
TCP狀態轉換圖

TCP連接分組交換:建立連接,傳送數據,終止連接

網絡地址轉換NAT、IPv4、IPv6
IP地址划分
IP地址(IPv4)是32bit的二進制數值,通常用點式十進制表示,唯一標識網絡中的每台主機或路由器。
傳統的IP地址分為A、B、C、D、E五類,由網絡號和主機號組成,網絡號代表主機所連接到的網絡,主機號代表該主機或路由器在網絡中的地址。

類別 網絡號 /占位數 主機號 /占位數 用途 A(以0開頭) 1~126 / 8 0~255 0~255 1~254 / 24 國家級 B(以10開頭) 128~191 0~255 / 16 0~255 1~254 / 16 跨過組織 C(以110開頭)192~223 0~255 0~255 / 24 1~254 / 8 企業組織
IPv6由128bit制成,用冒號十六進制記法表示
附:特殊用途,不作為主機IP地址的地址
(1)127.0.0.1 :環路自檢地址,表示任意主機本身
(2)0.0.0.0 :整個TCP/IP網絡
(3)255.255.255.255 :整個TCP/IP網絡的廣播地址
(4)主機號全為0表示本網絡本身,主機號全為1表示本網絡的廣播地址,
(5)私有IP地址網段,Internet上沒使用的地址,如下:
A類 10.0.0.0--10.255.255.255
B類 172.16.0.0--172.31.255.255
C類 192.168.0.0--192.168.255.255
子網划分
各地址默認的子網掩碼
A類 255.0.0.0
B類 255.255.0.0
C類 255.255.255.0
使用子網划分時的地址格式
A類:8位+子網x位+主機(24-x)位
B類:16位+子網x位+主機(16-x)位
C類:24位+子網x位+主機(8-x)位

![]()
網絡常用測試工具
ping
用途:用來檢查網絡是否通暢或網絡連接速度的命令
原理:利用網絡上機器IP地址的唯一性,給目標IP地址發送一個數據包,再要求對方返回一個同樣大小的數據包來確定兩台網絡機器是否相互連通、時延是多少
用法:ping www.baidu.com
tracert
用途:路由跟蹤實用程序,用於確定IP數據包訪問目標所采取的路徑
用法:tracert www.baidu.com ;會打印出從當前主機到目的主機所經過的路由地址
telnet
用途:網絡測試,如可以用telnet測試80端口的web服務器是否正常工作
用法如下:telnet www.hitsz.edu.cn 80

netstat
用途:監控TCP/IP網絡,顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息。用於顯示與IP、TCP、UDP、ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。
用法:netstat [-a][-e][-n][-o][-p protocol][-r][-s][Interval] ; 一般用netstat -an來顯示所有連接的端口並用數字表示。
地址解析協議ARP
根據IP地址獲取物理地址(MAC地址)的一個TCP/IP協議。
1:首先,每個主機都會在自己的ARP緩沖區中建立一個ARP列表,以表示IP地址和MAC地址之間的對應關系。
2:當源主機要發送數據時,首先檢查ARP列表中是否有對應IP地址的目的主機的MAC地址,如果有,則直接發送數據,如果沒有,就向本網段的所有主機發送ARP數據包,該數據包包括的內容有:源主機 IP地址,源主機MAC地址,目的主機的IP 地址
3:當本網絡的所有主機收到該ARP數據包時,首先檢查數據包中的IP地址是否是自己的IP地址,如果不是,則忽略該數據包,如果是,則首先從數據包中取出源主機的IP和MAC地址寫入到ARP列表中,如果已經存在,則覆蓋,然后將自己的MAC地址寫入ARP響應包中,告訴源主機自己是它想要找的MAC地址。
4:源主機收到ARP響應包后。將目的主機的IP和MAC地址寫入ARP列表,並利用此信息發送數據。如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。
注意:廣播(255.255.255.255)發送ARP請求,單播發送ARP響應。
簡單介紹幾種協議
ICMP協議: 因特網控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息
TFTP協議: 是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。
HTTP協議: 超文本傳輸協議,是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統
NAT協議:網絡地址轉換屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術
DHCP協議:動態主機配置協議,是一種讓系統得以連接到網絡上,並獲取所需要的配置參數手段,使用UDP協議工作。具體用途:給內部網絡或網絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員作為對所有計算機作中央管理的手段。
DNS協議:域名系統(DomainNameSystem)的縮寫,該系統用於命名組織到域層次結構中的計算機和網絡服務,可以簡單地理解為將URL轉換為IP地址。
RARP協議:逆地址解析協議,功能和ARP協議相對,其將局域網中某個主機的物理地址轉換為IP地址
RIP協議(路由選擇協議) :底層是貝爾曼福特算法,它選擇路由的度量標准(metric)是跳數,最大跳數是15跳,如果大於15跳,它就會丟棄數據包。
OSPF協議(路由選擇協議) :Open Shortest Path First開放式最短路徑優先,底層是迪傑斯特拉算法,是鏈路狀態路由選擇協議,它選擇路由的度量標准是帶寬,延遲。
參考:
計算機網絡基礎知識總結(重要) - xdyixia - 博客園 (cnblogs.com)
計算機網絡基礎知識總結 | 菜鳥教程 (runoob.com)
《王道程序員面試寶典》
《程序員面試寶典》
