1. 程式人生 > >Python學習之——Tcp/ip基礎/IP地址/DNS/端口簡介

Python學習之——Tcp/ip基礎/IP地址/DNS/端口簡介

實現 ip 地址 理解 大神 modem 角度 定義 form 不能

一.為什麽需要tcp/ip,什麽是tcp/ip?

  TCP/IP協議,即Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。【百度百科】

  在這之前,很多廠商生產各種型號的計算機,他們運行完全不同的操作系統,但TCP/ip協議族允許他們互相進行通信,TCP/IP起源於60年代末美國政府資助的一個分組交換網絡的研究項目,到90年代已經發展成為計算機之間最常應用的組網形式,他是一個真正的開放系統,因為協議族的定義及其多種實現可以不用花錢或花很少的錢就可以公開的得到,他被成為‘全球互聯網’或‘因特網’的基礎。

  【本篇文章主要來源於 TCP/IP詳解 卷一,若有對網絡有深刻了解的請閱讀TCP/IP詳解 卷一、二、三】

二.工作原理之協議分層

  網絡協議通常分不同層次進行開發,每一層分別負責不同的通信功能,一個協議族,比如TCP/IP,是一組不同層次上的多個協議的組合,TCP/IP通常被認為是一個四層協議系統,如圖:

技術分享圖片

每一層負責不同的功能:

1.鏈路層:

  鏈路層有時也被稱為數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡,他們一起處理和電纜(或其他任何傳輸媒介)的物理接口細節

2.網絡層:

  有時也被稱為互聯網層,處理分組在網絡中的活動,例如分組的選擇,在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)

3.傳輸層/運輸層:

  傳輸層主要為兩臺主機上的應用程序提供端到端的通信,在TCP/IP協議族中,有兩個戶互不相同的傳輸協議:TCP協議(傳輸控制協議)和UDP(用戶數據報協議)。

  TCP為兩臺主機提供高可靠性的數據通信,他所作的工作包括把應用程序交給他的數據分成合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最後確認分組的超時時鐘等,由於傳輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有的這些細節

  而UDP則為應用層提供一種非常簡單的服務,他只是把稱作數據報的分組從一臺主機發送到另一臺主機,但並不保證該數據報能夠到達另一端,任何必須的可靠性 必須由應用層來提供。

  這倆種傳輸層協議分別在不同的應用程序中有不同的用途。

4.應用層

  應用層負責處理特定的應用程序細節,幾乎各種 不同的TCP/IP實現都會提供下面這些通用的應用程序:

  Telnet遠程登錄

  FTP文件傳輸協議

  SMTP簡單郵件傳送協議

  SNMP簡單網絡管理協議

總結:

技術分享圖片

在這裏簡單舉例FTP客戶端與服務端之間的網絡交流:

技術分享圖片

三:互聯網的地址:(註:只對V4版本說明,V6後續補)

  互聯網上的每個接口必須有一個唯一的Internet地址(也叫IP地址),IP地址長32bit,采用點分十進制方法表示也就是說通常寫成四個十進制的數,共分為五類,在具體描述時可理解為 網絡位+主機位 組成了IP地址

技術分享圖片

技術分享圖片

  擴展:

    由於互聯網上的每個接口必須有一個唯一的IP地址,因此必須要有一個管理機構為接入互聯網的網絡分配IP地址,這個管理機構就是互聯網絡信息中心(Internet Network Information Centre),稱作InterNIC,InterNIC只分配網絡號,主機號的分配由系統管理員負責

  事實上InterNIC由三部分組成:註冊服務,目錄和數據庫服務,以及信息服務

  有三類IP地址:單播地址,廣播地址和組播地址

四:端口號

  端口號常見於計算機網絡應用中,用於網絡設備之間的鏈接。在網絡技術中,端口(Port)大致有兩種意思:一是物理意義上的端口,比如,ADSL Modem、集線器、交換機、路由器用 於連接其他網絡設備的接口,如RJ-45端口、SC端口等等。二是邏輯意義上的端口,一般是指TCP/IP協議中的端口,端口號的範圍從0到65535,比如用於瀏覽網頁服務的80端口,用於FTP服務的21端口等等。

  那麽TCP/IP協議中的端口指的是什麽呢?如果把IP地址比作一間房子 ,端口就是出入這間房子的門。端口號就是打開門的鑰匙。真正的房子只有幾個門,但是一個IP地址的端口 可以有65536個之多!端口是通過端口號來標記的,端口號只有整數,範圍是從0 到65535。

  一臺擁有IP地址的主機可以提供許多服務,比如web服務、FTP服務、SMTP服務等,這些服務完全可以通過1個IP地址來實現。那麽,主機是怎樣區分不同的網絡服務呢?顯然不能只靠IP地址,因為IP 地址與網絡服務的關系是一對多的關系。實際上是通過“IP地址+端口號”來區 分不同的服務的。

  端口號區分:

    到1992年為止:知名端口號1~255之間,256~1023之間的端口號通常是Unix系統占用,以提供一些特定的Unix服務,然而客戶端對它所用的端口號並不關心,只需要保證該端口號在本機上唯一就ok,大多數TCP/IP實現給臨時端口分配1024~5000之間的端口號,大於5000的端口號是為其他服務器預留的,在internet上並不常用的服務。也有其他廠商稱低於1024的端口為低位端口,稱為知名端口,高於1024的端口稱為高位端口,為其他使用。

  

五:域名系統(DNS)

  盡管通過IP地址可以識別主機上的網絡接口,進而訪問主機,但是人們最喜歡使用的還是主機名,在TCP/IP領域中,域名系統(DNS)是一種用於TCP/IP應用程序的分布式數據庫,由它來提供IP地址和主機名之間的映射信息。DNS提供可允許服務器和客戶程序相互通信的協議。

  從應用的角度上看,對DNS的訪問是通過一個地址解析器(r e s o l v e r)來完成的。在 U n i x
主機中,該解析器主要是通過兩個庫函數 g e t h o s t b y n a m e(3) 和g e t h o s t b y a d d r( 3 )來訪問的,它們在編譯應用程序時與應用程序連接在一起。前者接收主機名字返回 I P地址,而後者
接收I P地址來尋找主機名字。解析器通過一個或多個名字服務器來完成這種相互轉換。

  DNS的名字空間和Unix的文件系統相似,也具有層析結構,如下圖,每個結點(下圖中的圓圈)有一個至多 6 3個字符長的標識。這顆樹的樹根是沒有任何標識的特殊結點。命名標識中一律不區分大寫和小寫。命名樹上任何一個結點的域名就是將從該結點到最高層的域名串連起來,中間使用一個點“.”分隔這些域名(註意這和 U n i x文件系統路徑的形成不同,文件路徑是由樹根依次向下的形成的)。域名樹中的每個結點必須有一個唯一的域名,但域名樹中的不同結點可使用相同的標識。

技術分享圖片

註:頂級域被分為三個部分:

  1.arpa是一個用作地址到名字轉換的特殊域

  2.7個3字符長的普通域,有些也稱為組織域

  3.所有2字符長的域均是基於ISO3166中定義的國家代碼,這些域被稱為國家域或地理域

  4.全球共有13臺根域服務器,由類似開源組織的人員維護,了解13臺根域服務器請百度百科。

技術分享圖片

註:這只是一程序猿對對所學的一丁點見解,若有網絡大神請繞行 :-D,有疑問請聯系[email protected]

Python學習之——Tcp/ip基礎/IP地址/DNS/端口簡介