1.1理解tcp基礎
? ? tcp/ip = {protocol1和屎, protocol2,……春瞬,protocoln}
? ? Internet是在共享的線路上發(fā)送數據的:
? ? ? ? 在計算機上同時運行的程序通過一條單一的Modem或DSL線路連接互聯網柴信。(有點像電腦只是插了一根網線的感覺)
? ? ? ? ==換句話說==> 程序共享這條線路
? ? ? ? ==如何實現共享==> (相當于要運送一個大部件,通常派送員會選擇將這個大部件拆分成各個小零件宽气,寄到了家之后再通過說明書將其組裝起來【購買的踏步機】)大部件就相當于需要發(fā)送的“數據流”随常,派送員就相當于“tcp”潜沦,各個小零件就是“信息包”,快遞運輸線就好比“Internet”绪氛,寄到了家就是信息包到了”接收者“這里止潮,合起來就是 ==>?tcp把要發(fā)送的數據流分解成很多小信息包在Internet上傳輸(或許還伴有其他程序的信息包),而這些信息包到了接收者的地方會再次重新合成在一起钞楼。
? ? ? ? ==這樣的好處==> 通過分解成小的信息包喇闸,Internet連接就會用很少的時間來發(fā)送數據的每一個比特(bit),而其他程序的信息包也可以同時被傳送询件。
? ? 使用地方:
? ? ? ? 1)你需要一個可靠的數據傳輸燃乍,以確保你的數據完整無缺地到達目的地;
? ? ? ?2)你的協(xié)議需要不止一個請求和服務器的回答宛琅;
? ? ? ?3)你要發(fā)送較多的數據刻蟹;
? ? ? ?4)初始連接出現短暫的延遲是可以容忍的。
(1)尋址(為了實現信息包計劃嘿辟,tcp需要做的事情)
? ? ? ?1)tcp需要識別遠程的機器:基于tcp/ip的網絡舆瘪,每臺機器都有一個唯一的ip地址,識別機器就是知道了接受者機器的ip地址红伦;
? ? ? ? ? ? ==>要知道讓人類記住一串諸如192.168.1.1這樣的數字是很困難的英古,所以有了DNS:
? ? ? ? ? ? 當你要和一個遠程機器建立連接的時候,先申請連接該機器ip地址相對應的dns昙读,例如:www.google.com召调,dns就會提供一個ip地址,接下來就可以建立連接了蛮浑。(python在程序中常常隱藏dns層唠叛,所以很多時候都不需要直到它的存在,第四仗中會詳細介紹dns)
? ? ? ?2)tcp需要知道是與遠程機器上運行的哪個程序通信(例如沮稚,你想給在北京的ann的機器發(fā)送信息艺沼,而她的機器上正運行著兩個聊天客戶端和一個web瀏覽器,她的機器需要直到哪個程序應該接收你傳過來的數據蕴掏。):tcp使用端口號障般。每個程序使用一個唯一的端口號。這些端口號有時事先知道囚似,有時隨機指定剩拢。
? ? ? ? ? ? ==>每個tcp連接的端點是由一個ip地址和一個端口號來唯一標識的。
(2)可靠性
? ? ? ? ? ?在Internet上傳輸數據有很多意外:Modem改變了數據的幾個字節(jié)饶唤、某個路由器或許丟失了一個信息包徐伐、系統(tǒng)或許收到了順序錯誤的信息包、一個信息包或許收到了兩次募狂、一個主要的網絡電纜被鋤頭切斷了等等办素。
? ? ? ? ? ?tcp可靠:除非整個網絡出現問題角雷,數據將被完好地按原樣正確地傳送到另外一端。
? ? ? ? ? ?==怎樣實現的性穿?==>
? ? ? ? ? ?1)每個信息包都包含一個“校驗碼”:保證信息包在傳輸過程中沒有被更改的代碼勺三。當信息包到達目的地的時候,接收方會比對校驗碼和收到的信息中的數據需曾,若校驗碼不對吗坚,該信息包將被省略(drop)。
? ? ? ? ? ?2)反饋:防止信息包丟失呆万,tcp要求接收方每收到一個信息包都反饋一下商源。如果接收方沒有反饋,發(fā)送方會自動重發(fā)一次谋减。tcp會一直發(fā)送信息包直到接收者收到位置牡彻,或者tcp判斷出網絡連接斷了,在程序中返回一個錯誤提示出爹。
? ? ? ? ? ?3)序號:為了防止信息包重復或順序錯誤庄吼,tcp每傳送一個信息包都會傳送一個序號。接收方會檢查這個序號严就,確保收到該信息包总寻,并把全部信息包按順序重新合并。同時盈蛮,若果接收方看到了一個已經看過的序號废菱,則該信息包會被丟棄技矮。
(3)路由
? ? ? ? ?信息包在傳遞過程中會經由許多不同網絡抖誉,比如:先通過你的DSL到達電話公司,接著到達你所在城市的一個Internet提供商衰倦,然后經過北京袒炉、上海等到達最終目的地。(dsl數字用戶線路)在此期間的每一站樊零,來自其他成千上萬計算機的信息包也在一起被傳輸我磁。在Internet上負責接收信息包并決定如何把它們傳輸到目的地的設備叫“路由器”。
(4)安全
? ? ? ? ?ssl(secure sockets layer):在tcp連接之上驻襟,與程序代碼混合在一層夺艰。提供服務器的認證(所以你知道你現在在和誰通話)、加密(所以其他人不能看到你的通信)和數據完整性(所以在沒有察覺時沉衣,傳輸途中的信息包沒有人能夠修改)郁副。
? ? ? ? ?tls(transport layer security):與ssl相似,只包含在協(xié)議堆棧(protocol stack)中豌习。
1.2使用客戶/服務器模式?
在客戶/服務器下存谎,服務器一直在聽來自客戶端的請求拔疚,有請求后,就建立連接處理它們既荚。
例如:當你打開一個瀏覽器并訪問www.google.como稚失,瀏覽器會連接www.google.com的服務器,并請求訪問“/”頁(這個“/”頁表示該站點的首頁恰聘。服務器按順序找到這一頁句各,并把它傳送回你的客戶端,接著你的瀏覽器就能按照一定的格式顯示出來晴叨。
關鍵問題:客戶端總是最開始申請連接的一端诫钓,服務器則是等待客戶端連接的一端。
1)服務器端端口號:
在客戶/服務器模式中篙螟,服務器通常是聽一個大家都知道的端口號菌湃。例如:web服務器聽80端口,所以遍略,web瀏覽器知道連接www.google.com的80端口來獲得信息惧所。
(在www.iana.org上有一份由國際因特網地址分配委員會IANA維護的官方已分配的端口列表,在linux中绪杏,可在/etc/services下找到這個列表)
如果你編寫了一個服務器下愈,它的服務不在這個列表上,就選擇一個比“1024”大蕾久,而且在你的機器上沒有被占用的端口號势似,這樣可以盡量避免和其他服務沖突(端口號最大可為65535)。
在linux上僧著,只有系統(tǒng)管理員能請求訪問一個小于1024的端口履因。
2)客戶端端口號
客戶端端口號不是很重要,通常盹愚,客戶端會由操作系統(tǒng)隨機挑選一個保證沒有被使用的栅迄,被稱為“短命”的端口號,當服務器收到一個連接請求的時候皆怕,請求中帶有客戶端的端口號毅舆,數據會被傳輸到該端口上。
1.3理解udp
用處:從一個系統(tǒng)向其他系統(tǒng)傳送非常短的消息愈腾。
提供的保證:你收到的數據是完整的憋活。它不能保證數據是否能被收到,也不能保證數據是不是只接收一次虱黄,還不能保證收到的信息次序是否和發(fā)送時候一樣悦即。
優(yōu)點:因為不需要提供那些保證,所以要比tcp低級,而tcp建立和關閉連接要花費時間盐欺,而udp對連接沒概念赁豆,所以不存在花費時間建立和關閉連接的問題。
實例:1)通常udp會用在客戶端向服務器申請一個bit的信息冗美,如果沒有收到答復就會繼續(xù)申請魔种。用得最廣的udp應用軟件是dns系統(tǒng)。2)udp還常被用在流式的音頻和視頻應用軟件粉洼,因為udp只是偶爾丟棄一個信息包节预,而tcp會過于嚴格地取出那些被丟棄的信息包,這樣音頻效果就會差很多属韧。
使用地方:
1)不關心信息包是否到達或者不在意信息包到達的順序是否正確安拟,再或者你可以自己察覺這些問題且自己解決;
2)你的協(xié)議只包括基本請求和回答宵喂;
3)你需要盡快建立網絡回話糠赦;
4)只傳送很少一部分數據。udp的限制是一個信息包不超過64KB的數據锅棕,通常人們只用udp傳送1KB以下的數據拙泽。
1.4理解物理傳輸和以太網
可在不同物理網絡硬件間傳送數據:以太網、端對端(PPP裸燎,Peer-Peer Protocol)撥號連接顾瞻、令牌環(huán)連接、DSL連接德绿、cable modems連接的網絡荷荤、人造衛(wèi)星連接、移動電話以及T1專線連接==>TCP/IP
以太網:可向本地網絡所有的工作站廣播信息包移稳。==>可用來給一個服務做廣告蕴纳、向那些設計好的終端廣播、向所有人的PC廣播警告信息秒裕。
一個通過tcp/ip連接以太網的計算機有一個和該網絡接口相關的ip地址袱蚓。它與本網絡的機器通信時,只要直接向該計算機發(fā)送消息就可以几蜻。如果要和網外的、在Internet上的其他機器通信体斩,就必須把信息先發(fā)送到一個本地網絡上的路由器梭稚,然后由路由器決定信息包該發(fā)向哪里。
為了知道哪些機器是本地的絮吵,哪些是遠程的弧烤,網絡軟件會檢查源計算機和目的計算機ip地址的頭幾位(最有效部分)是不是相同的。每個網絡接口上都有網絡掩碼表明需要比較幾位蹬敲。如果比較失敗了暇昂,說明開始的幾位是不同的莺戒,那么信息包必須經過路由器。其他在范圍之內的計算機利用廣播或直接傳輸則可以直接到達急波。