TCP/IP協議工做原理簡述
1 概要
協議是什麼?協議是一組爲完成特定需求或功能而定義的標準通信格式。協議是服務於具體需求或功能的,它不能獨立存在。緩存
制定TCP/IP協議的目的是爲了解決主機互聯以及互聯的主機上的應用通信的問題。TCP/IP協議共有四層:應用層、傳輸層、網絡層、鏈路層。應用層實際就是咱們的應用程序,對於非具體應用而言這一層的協議是未定義的,須要咱們本身根據咱們具體的業務模型來制定。傳輸層橋接應用層和網絡層,向下爲咱們的應用層數據填入端口標識,向上根據端口標識往各個應用分發數據包。網絡層主要的功能是邏輯選路,確保咱們的數據包能到達指定的目的地。鏈路層負責往/從有直接物理鏈路相連的主機或路由器發包/收包。網絡
TCP/IP協議是工做在主機或路由器上的,這一點很明顯,由於網絡拓撲中的實體除了主機(路由器)就是鏈路,鏈路固然不能運行咱們的協議,它只能傳輸數據。當主機A中的a程序須要跟主機B中的b程序通信的時候,A主機會根據TCP/IP協議往咱們的原始數據包中依次塞入:TCP首部字段(假如應用程序基於TCP協議)、IP首部字段、以太網首部字段,最後造成的數據包咱們稱之爲以太網數據幀,任何一臺主機發送和接收的都只能是以太網數據幀;B主機收到相應的以太網數據幀後,會依次丟棄:以太網首部字段、IP首部字段、TCP首部字段,而後再將剩下的數據包交給b程序。現現在,不少複雜的應用程序也採用相似的思想對應用層協議進行分層。less
2 應用層
常見的應用層協議有:ssh
- echo 7/tcp(udp)
- daytime 13/tcp(udp)
- ftp 21/tcp(udp)
- ssh 22/tcp(udp)
- telnet 23/tcp(udp)
- tftp 69/tcp(udp)
- finger 79/tcp(udp)
- http 80/tcp(udp)
- https 443/tcp(udp) # http protocol over TLS/SSL
應用層協議與咱們具體編寫的應用相關,它是整個TCP/IP協議族的最上層協議,也是惟一由用戶制定通信格式的協議(標準委員會不能未卜先知)。數據傳輸通常是由應用層發起的,但它除了提供一個目標地址(域名或IP地址)以外,不涉及任何傳輸細節。應用層只專一於應用所屬領域內的業務邏輯。tcp
3 傳輸層
工做在傳輸層的協議主要有TCP和UDP協議。傳輸層主要負責主機內的應用層數據包的收取和派發工做。應用層組好包後將數據包交給傳輸層,傳輸層通過必定的處理(填充TCP或UDP首部字段)以後,再轉交給IP協議模塊;傳輸層從下層IP模塊收包時,去掉本層相關的首部字段,再將數據包派發給各個應用程序。因爲傳輸層服務的對象是主機內的全部應用程序,因此它須要特定的手段來區分不一樣的應用程序,此即,端口。post
只作上面這些事情彷佛有點少!對,標準委員會的人也是這麼想的。因此,除了上面的核心業務以外,不一樣的傳輸層協議還提供了點增值服務。例如:TCP提供可靠的數據傳輸業務;UDP提供一對多的廣播業務。spa
傳輸層一樣不清楚傳輸細節,它只對上層應用層負責。code
4 網絡層
工做在網絡層的協議主要有:IP協議、ICMP以及IGMP協議。其中IP協議最爲重要,ICMP和IGMP協議也得依賴IP協議來收發包。orm
網絡層的核心業務便是選路(肯定數據包的下一跳),在全部的網絡層協議中,IP協議負責該核心業務,因此咱們有時候也直接用IP協議來指代網絡層。在處理上層傳輸層和下層鏈路層發來的數據包時,IP協議的行爲是不同的,前者,僅僅填入本機和目的端IP地址;後者,對於本應交給本機的數據包提交給上層傳輸層,對於非交給本機的數據包也爲它們指明下一跳(需特殊配置主機)。能夠看到IP協議不只對本機盡職盡責,同時也頗具助人爲樂的精神,事實上,這種助人爲樂的精神正是整個TCP/IP協議得以正常運轉的核心。
IP協議爲上層傳輸層下發的數據包或路過的數據包選好路後,它們並不親自將包送達下一站,而是將它們交代給鏈路層去護送。
5 鏈路層
工做在鏈路層的協議主要包括:Ethernet、IEEE 80二、ARP、RARP等協議。鏈路層的核心功能是:1. 將數據包發送給有直接物理鏈路相連的主機(或路由器) 2. 從有直接物理鏈路相連的主機(或路由器)處收取數據。鏈路層執行的是實際的收發包工做,因此,它們只能往/從有直接物理鏈路相連的主機(或路由器)發送/收取數據,畢竟,物理規律老是得遵照的。
鏈路層必須向物理鏈路上發送全部IP協議交代下來的數據包,必須將全部收到的數據包(以太網數據幀)交給IP協議處理。鏈路層是沒有什麼自主權的,不能擅自截留,不能擅自丟包,能作的僅僅是搬運,實實在在的搬磚工人。鏈路層也沒什麼智商,IP交給它的數據包雖然包含IP地址,但它卻看不明白,它只認物理地址(即48位mac地址)。若是某個IP地址是它不久前去過的地方(ARP緩存),那當要送包再去往該IP地址時,它直接就能送;不然,就得挨個問一遍,有則去,沒有就算了。並且它也很容易被欺騙,網關就常常騙它。網關爲何要欺騙它呢?由於IP協議決定的下一跳不必定就在局域網中(即跟當前主機沒有直接相連的物理鏈路),而鏈路層工做能力有限,只能在局域網內發包,因此網關只好騙它說我就是目標地址的主機。