㈠ TCP協議是什麼
TCP(Transmission Control Protocol,傳輸控制協議)是基於連接的協議,也就是說,在正式收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次「對話」才能建立起來,其中的過程非常復雜,我們這里只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三次對話的簡單過程:主機A向主機B發出連接請求數據包:「我想給你發數據,可以嗎?」,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的數據包:「可以,你什麼時候發?」,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:「我現在就發,你接著吧!」,這是第三次對話。三次「對話」的目的是使數據包的發送和接收同步,經過三次「對話」之後,主機A才向主機B正式發送數據。
相對於UDP
面向非連接的UDP協議
「面向非連接」就是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送。這與現在風行的手機簡訊非常相似:你在發簡訊的時候,只需要輸入對方手機號就OK了。
UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!
㈡ TCP/IP協議是什麼
包含了一系列構成互聯網基礎的網路協議。這些協議最早發源於美國國防部的DARPA互聯網項目。TCP/IP字面上代表了兩個協議:TCP傳輸控制協議和IP互聯網協議。
時間回放到1983年1月1日,在這天,互聯網的前身Arpanet中,TCP/IP協議取代了舊的網路核心協議NCP(Network Core Protocol),從而成為今天的互聯網的基石。最早的的TCP/IP由Vinton Cerf和Robert Kahn兩位開發,慢慢地通過競爭戰勝了其它一些網路協議的方案,比如國際標准化組織ISO的OSI模型。TCP/IP的蓬勃發展發生在上世紀的90年代中期。當時一些重要而可靠的工具的出世,例如頁面描述語言HTML和瀏覽器Mosaic,導致了互聯網應用的飛束發展。
隨著互聯網的發展,目前流行的IPv4協議(IP Version 4,IP版本四)已經接近它的功能上限。IPv4最致命的兩個缺陷在與:
地址只有32位,IP地址空間有限;
不支持服務等級(Quality of Service, Qos)的想法,無法管理帶寬和優先順序,故而不能很好的支持現今越來越多的實時的語音和視頻應用。因此IPv6 (IP Version 6, IP版本六) 浮出海面,用以取代IPv4。
TCP/IP成功的另一個因素在與對為數眾多的低層協議的支持。這些低層協議對應與OSI模型 中的第一層(物理層)和第二層(數據鏈路層)。每層的所有協議幾乎都有一半數量的支持TCP/IP,例如: 乙太網(Ethernet),令牌環(Token Ring),光纖數據分布介面(FDDI),端對端協議( PPP),X.25,幀中繼(Frame Relay),ATM,Sonet, SDH等。
目錄
1 TCP/IP協議棧組成
2 必須協議
3 推薦協議
4 可選協議
5 範例: 不同計算機運行的不同協議
6 參考文獻
TCP/IP協議棧組成
整個通信網路的任務,可以劃分成不同的功能塊,即抽象成所謂的 」 層」 。用於互聯網的協議可以比照TCP/IP參考模型進行分類。TCP/IP協議棧起始於第三層協議IP(互聯網協議) 。所有這些協議都在相應的RFC文檔中討論及標准化。重要的協議在相應的RFC文檔中均標記了狀態: 「必須「 (required) ,「推薦「 (recommended) ,「可選「 (elective) 。其它的協議還可能有「 試驗「(experimental) 或「 歷史「(historic) 的狀態。
必須協議
所有的TCP/IP應用都必須實現IP和ICMP。對於一個路由器(router) 而言,有這兩個協議就可以運作了,雖然從應用的角度來看,這樣一個路由器 意義不大。實際的路由器一般還需要運行許多「推薦「使用的協議,以及一些其它的協議。
在幾乎所有連接到互聯網上的計算機上都存在的IPv4 協議出生在1981年,今天的版本和最早的版本並沒有多少改變。升級版IPv6 的工作始於1995年,目的在與取代IPv4。ICMP 協議主要用於收集有關網路的信息查找錯誤等工作。
推薦協議
每一個應用層(TCP/IP參考模型 的最高層) 一般都會使用到兩個傳輸層協議之一: 面向連接的TCP傳輸控制協議和無連接的包傳輸的UDP用戶數據報文協議 。 其它的一些推薦協議有:
TELNET (Teletype over the Network, 網路電傳) ,通過一個終端(terminal)登陸到網路(運行在TCP協議上)。
FTP (File Transfer Protocol, 文件傳輸協議) ,由名知義(運行在TCP協議上) 。
SMTP (Simple Mail Transfer Protocol,簡單郵件傳輸協議) ,用來發送電子郵件(運行在TCP協議上) 。
DNS (Domain Name Service,域名服務) ,用於完成地址查找,郵件轉發等工作(運行在TCP和UDP協議上) 。
ECHO (Echo Protocol, 回繞協議) ,用於查錯及測量應答時間(運行在TCP和UDP協議上) 。
NTP (Network Time Protocol,網路時間協議) ,用於網路同步(運行在UDP協議上) 。
SNMP (Simple Network Management Protocol, 簡單網路管理協議) ,用於網路信息的收集和網路管理。
BOOTP (Boot Protocol,啟動協議) ,應用於無盤設備(運行在UDP協議上)。
可選協議
最常用的一些有
支撐萬維網WWW的超文本傳輸協議HTTP,
動態配置IP地址的DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),
收郵件用的POP3 (Post Office Protocol, version 3, 郵局協議) ,
用於加密安全登陸用的SSH (Secure Shell,用於替代安全性差的TELNET) ,
用於動態解析乙太網硬體地址的ARP (Address Resolution Protocol,地址解析協議) 。
範例: 不同計算機運行的不同協議
一個簡單的路由器上可能會實現ARP, IP, ICMP, UDP, SNMP, RIP。
WWW用戶端使用ARP, IP, ICMP, UDP, TCP, DNS, HTTP, FTP。
一台用戶電腦上還會運行如TELNET, SMTP, POP3, SNMP, ECHO, DHCP, SSH, NTP。
無盤設備可能會在固件比如ROM中實現了ARP, IP, ICMP, UDP, BOOT, TFTP (均為面向數據報的協議,實現起來相對簡單)。
TCP/IP基礎講座-1:1層,2層,3層?
讀過關於網路的課程的,都知道ISO-OSI 7層協議這個名詞,許多書籍都會具體的畫出那幅圖,然後標註上物理層,數據鏈路層,網路層等等.背的大家要死.但是卻又不知道具體這些層次干嗎用的勒?
其實在互聯網中,由於實際使用的是TCP/IP模型,也就是DOD模型(現在不知道沒關系,後面會說).所以7層模型在現實網路環境中只是一個理論上,學究派的東西.這個模型中,我們真正關心的是下面的3層.
1.物理層 .哦.是的.這個名詞還算容易了解.網卡還有那些網線構成了這一層.那些在網線中傳播的二進制數據流是這層的具體表象.也就是說,這一層上面沒有什麼協議(不是很精確的說法,但是你可以這么理解).有的都是電流而已.我們把兩台機器用網線連起來.或者用HUB把機器都連起來,這些工作就是物理層的工作.
有2個設備屬於物理層的,一個是中繼器,一個是HUB.大家知道.物理上面的連線距離一長就會產生電信號的衰減.為了重新加強這個信號,我們就需要在一定距離之後加上一個信號放大器,這就是中繼器(repeater)
恩...這個比較容易理解.repeater就是連接在2根網線之間的么.沒有做任何處理.所以只是一個物理設備.屬於1層的.
那麼集線器(HUB) 呢?這個怎麼會是在1層???似乎非常難以理解.
當我說出HUB的本質,大家就能夠清楚了解了
HUB的本質其實只是一個多口中繼器(MULTI PORT REPEATER) .啊...這樣大家能夠理解了.HUB不叫多口中繼器其實只是為了銷售上面的策略.他的本質就是連接多根網線的一個物理設備.也是不對經過的電信號做任何邏輯處理的.
2.數據鏈路層
歐~這個名詞有些別扭了.DATA LINK層.英文似乎更加容易理解.
這個層面上面的東西不再是電信號了.而是DATA了.對,既然是DATA就有了邏輯關系了.這個層面上面的基本單位是幀(Frame) .這層和物理層的接觸是最緊密的.他是把從網線上面傳輸的電流轉換成0和1的組合.
物理層只是網卡對網線發出或者接受各種電平信號,那就是說物理層是無法判別電流的來源和目標的.那麼把電流打成0和1的幀之後.裡面就有邏輯數據了.有了數據,就可以判別數據從何而來,到何處去.所以也就可以真正的形成LINK.
既然可以判別地址,那麼地址是按照什麼來判別的呢?
那就是最重要的概念之一:MAC地址
大家肯定都聽說過我們的網卡都有MAC地址
有些人可能也知道MAC地址都是唯一的.
對.MAC地址是全球唯一的.也就是說你的網卡雖然便宜.但是他也是世界上獨一無二的.
有些人說他可以改MAC.那就不是唯一了.對.雖然可以更改,那隻是欺騙上層對封包裡面的MAC地址進行改寫.你網卡真正的MAC地址是固化的.無法修改的.
我們有了MAC地址了.這樣就可以有針對性對所有連接在一起的計算機進行通訊了.是的.我們終於可以在一個區域網內通訊了.
但是有個問題我們前面沒有提到.就是既然物理層傳輸的是電信號.那麼如果我有2台機器一起發電信號,信號豈不是混亂了么?
非常正確.這個問題在網路裡面成為"碰撞",所以協議裡面規定了如果你需要往外發數據,一定需要先看看電纜裡面有沒有別的信號.如果沒有,那就可以發.如果2者同時發送,檢測到碰撞之後2者分別等待一個隨機時間,然後重發.這個就是重要的"碰撞檢測 ".
哈.看來問題解決了.不是么.現在整個網路可以正常運行了.
確實如此.但是如果連接在網路上的計算機越來越多,那麼碰撞的現象會越來越頻繁.這樣效率一定很低了.恩.這里還有一個重要概念"沖突域 ".在同一個物理上連接的網路上的所有設備是屬於同一個沖突域的.
接著就需要引入我們的2層設備來分割沖突域了.
網橋(Bridge) 就是連接2個不同的物理網路的.主要功能是在2個網路之間轉發Frame.因為從實際中我們可以知道.其實很多時候並非整個網路都在相互通訊.最多相互通訊的一組計算機我們可以分在一個小的沖突域內.這樣分割以後可以減少沖突域,也就相對的減少了沖突的機會.而之間使用網橋來橋接,由於網橋兩邊的通訊不是非常頻繁,所以使用網橋來為2邊作為"代言人".這樣任意一個小網路裡面產生沖突的機會就少了.
交換機(Switch)是我們最熟悉的設備了,交換機的本質其實就是一個多口網橋(Multi port Bridge) .同理可得.交換機的每個口後面都是一個沖突域.我們都說交換機比HUB快,就是因為交換機分割了所有的沖突域.
由於現在交換機非常便宜.所以一般我們都是直接在交換機的口上接計算機.這樣每台計算機都是一個獨立的沖突域.這樣碰撞的問題就沒有了.所以速度是比HUB快.
而前面說過.2層設備主要是個轉發的功能.交換機的主要功能就是轉發包.而不是讓所有的沖突域直接物理連接.所以交換機有CPU,有內存,可以對frame進行處理等等.這些也是交換機和HUB的區別.
3.網路層
我們前面的一些技術就可以構建出區域網了.有了網路層以後.數據才能夠真正的在整個世界間傳送
由於倫納德?博薩卡(Leonard Bosack)和姍蒂?雷納(Sandy Lerner)為了解決他們之間的通信問題(關於路由器發明的版本有很多.你聽到的別的說法可能比這個說法更准確,但是誰知道呢.呵呵).路由器被發明用來解決"信息孤島"問題.而且如果是由SWITCH來構建整個網路,那麼整個網路將會有"中心節點",這樣也不符合ARPANET的初衷.所以我們有了這一層.(這樣說可能會感覺本末倒置,但是先這么理解吧.)
這一層的基本單元是包(Packet) .所有的包都有一個IP頭.啊.聽起來很熟悉不是么.IP就是用來在這層上面標識包的來源和目的地址的.
這層的一個主要概念就是"路由 ",也就是和switch一樣,把包轉發到其他的地方.不過有個不同的地方,switch只有知道具體的MAC在哪裡的情況下才能夠發送給指定的計算機,而路由則不需要知道最終IP所在的計算機在哪個位置,只要知道那個途徑可以過去就可以工作.
這3層構建了整個網路的基礎.由於TCP/IP模型將最下面2層合並成為一層,所以在TCP/IP裡面總共這2層也是整個構架最基礎的內容.而網路方面要做的工作也都是針對於這2層做的.
2: TCP/IP.真實世界的模型
上一講裡面我們說過OSI 7層模型只是一個理論模型,而實際中只需要保證7層的功能能夠實現,實際分層無需按照7層來分.而且如果真的分7層.那麼數據處理的速度便要慢許多.
在實際應用中.使用最多的便是DoD模型.也成為TCP/IP協議簇
DoD模型(Department Of Defanse Model 美國國防部模型) 顧名思義,是美國國防部設計的一個網路模型.最早用於ARPANET.這些話可能在許多教材的第一章就會講了.但是一般教材對於DoD模型與OSI模型對應關系都沒有講到.或者很多是模糊或者錯誤的.
在這里我就要描述一下2者對應關系.OSI模型有7層我們已經知道了,而DoD模型則只有4層.下面是對應關系
OSI DoD
7.Application ┐
6.Presentation |-> 4. Application/Process
5.Session ┘
4.Transport ---> 3. Host to Host
3.Network ---> 2. Internet
2.Data Link ┬-> 1. Network Access
1.Physical ┘
由於我不會製表符.所以圖有些難看.其實就是OSI的1.2層對應DoD的第1層
OSI的5.6.7對應DoD的第4層
其實這個還是比較容易記憶的
由於物理層和數據鏈路層非常密切.所以分為一個.然後上面依次對應,最上面的一大塊成為應用層(處理層)
現在我們有了一個可用的實際模型了.不過一般我們在描述某個設備或者協議的時候.還是會使用OSI的模型,比如我們在討論SWITCH的時候,就會說他是一個2層的設備.而路由器是一個3層的設備,還會有一些特殊的設備,比如3層交換機,4層交換機.這些都是使用OSI模型進行分類的.這點大家不要搞混淆了.
我們一直聽說TCP或者UDP.還有什麼SMTP.POP3.這些協議到底是在哪一層定義的那?接下來的一張圖會給大家一個非常清晰的概念了(不能算是圖拉 :D ).
4. APPLICATION
HTTP,FTP,telnet,SNMP,SMTP,POP3,DNS 等等
3.Host to Host
TCP,UDP
2.internet
ICMP,ARP,RARP,IP
1.Network Access
Ethernet,FastEthernet,Token Ring 等等
恩...這下清楚了.讓我們從下至上來看看
首先是最下層的.包括了乙太網,快速乙太網,還有現在的千M乙太網等等的協議,這些協議規定了線纜的絞數.連接方式等等物理層的東西.還有底層使用MAC通訊的方式等等.
接下來是IP.ARP這些.IP在OSI模型的時候也說過.通過IP地址.我們在轉發包的時候無需知道具體目標機的位置.而路由器自然會根據路由表來轉發.最後一站一站的慢慢傳遞.達到最終目標.而ARP協議就是在IP和MAC之間轉換用的.
我在上一章提過,由於有了路由器,IP,整個網路才真正能夠覆蓋全球.所以這一層叫做internet大家也應該容易記憶了.
WOW.TCP,UDP是我們聽說最多的了.他是屬於控制網路連接的.在OSI稱為Transport.傳輸層.在DoD內是Host to Host 端對端.意思其實是一樣的.就是在在2台計算機之間構建出一個虛擬的通訊通道來.
最上面一層就無窮無盡了.所有的最終應用層的東西都在這里,你甚至可以定義你自己的協議類型.這些都是完全可以的.因為本身這一層就是提供給開發人員自行發揮的.只是上面列舉的都經過標准化了.
TCP包頭結構
源埠 16位
目標埠 16位
序列號 32位
回應序號 32位
TCP頭長度 4位
reserved 6位
控制代碼 6位
窗口大小 16位
偏移量 16位
校驗和 16位
選項 32位(可選)
這樣我們得出了TCP包頭的最小大小.就是20位元組.
UDP包頭結構
源埠 16位
目的埠 16位
長度 16位
校驗和 16位
恩...UDP的包小很多.確實如此.因為UDP是非可靠連接.設計初衷就是盡可能快的將數據包發送出去.所以UDP協議顯得非常精簡.
有一個問題,似乎這些頭裡面怎麼沒有IP地址啊.沒有IP地址這些包往哪裡發送那?
對.你觀察的很仔細.TCP和UDP的頭裡面確實沒有任何IP信息.我們回頭想一下TCP和UDP是屬於DoD的哪一層的? 對了!是第3層. 而IP則位於模型的第二層.也就是他們兩者雖然有聯系.但是不屬於同一層.
模型的一個重要規則就是.當發送端發送一個數據,上一層將數據傳往下一層的時候.上一層的包就成為了下一層包的數據部分.
而到接受端接受到數據.下一層將本層的頭部信息去掉後交給上一層去處理.
那麼我們來看看實際例子:
假使我們通過SMTP協議發送數據AAA到另外一段.那麼數據先會被加上SMTP的頭.成為[SMTP]AAA.往下發送到TCP層.成為[TCP][SMTP]AAA.再往下送到internet層[IP][TCP][SMTP]AAA.然後成為[MAC][IP][TCP][SMTP]AAA
這樣通過enternet或者FastEnternet發送到路由器.路由器得到後替換自己的MAC地址上去.傳到下一級的路由器.這樣經過長途跋涉.最終這個數據流到達目標機.
目標機先從下面一層開始.去掉MAC,成為[IP][TCP][SMTP]AAA往上到IP層,恩,比對後是發送給我這個IP的.去掉,成為[TCP][SMTP]AAA.TCP接到了查看校驗和,沒錯.往上[SMTP]AAA.最後SMTP協議去解釋.得到了AAA.
萬里長征終於結束.我們也將AAA發送到了目標機.大家也應該明白了為何TCP包頭和UDP包頭裡面沒有IP地址那?因為IP位於他們下面一層.TCP和UDP的包頭信息是作為IP包的數據段來傳送的.
IP層可不管那許多.他只管他那層的協議,也就是管把從上面層來的數據加上自己的頭,傳到下面一層.把從下面一層來的數據去掉頭.傳到上面一層.
每層都是這么乾的.完美的契合完成了數據包的最終旅程.
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、乙太網以及RS-232串列介面)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。這4層分別為:
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網路遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網路介面層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送數據。
TCP/IP中的協議
以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:
1. IP
網際協議IP是TCP/IP的心臟,也是網路層中最重要的協議。
IP層接收由更低層(網路介面層例如乙太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
2. TCP
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名資料庫),但使用UDP傳送有關單個主機的信息。
3.UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
4.ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的『Redirect』信息通知主機通向其他系統的更准確的路徑,而『Unreachable』信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接『體面地』終止。PING是最常用的基於ICMP的服務。
5. TCP和UDP的埠結構
TCP和UDP服務通常有一個客戶/伺服器的關系,例如,一個Telnet服務進程開始在系統上處於空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息並發出響應,客戶程序讀出響應並向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認並協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址 發送包的IP地址。
目的IP地址 接收包的IP地址。
源埠 源系統上的連接的埠。
目的埠 目的系統上的連接的埠。
埠是一個軟體結構,被客戶程序或服務進程用來發送和接收信息。一個埠對應一個16比特的數。服務進程通常使用一個固定的埠,例如,SMTP使用25、Xwindows使用6000。這些埠號是『廣為人知』的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
㈢ 簡述tcp協議的工作過程
TCP/IP協議(又名:網路通訊協議)即傳輸控制協議/互聯網協議,是一個網路通信模型,以及一整個網路傳輸協議家族。這一模型是Internet最基本的協議,也是Internet國際互聯網路的基礎,由網路層的IP協議和傳輸層的TCP協議組成。 其定義了電子設備如何連入網際網路,以及數據如何在它們之間傳輸的標准。TCP負責發現傳輸的問題,而IP是給網際網路的每一台聯網設備規定一個地址。
為了減少網路設計的復雜性,大多數網路都採用分層結構。對於不同的網路,層的數量、名字、內容和功能都不盡相同。在相同的網路中,一台機器上的第N層與另一台機器上的第N層可利用第N層協議進行通信,協議基本上是雙方關於如何進行通信所達成的一致。
不同機器中包含的對應層的實體叫做對等進程。在對等進程利用協議進行通信時,實際上並不是直接將數據從一台機器的第N層傳送到另一台機器的第N層,而是每一層都把數據連同該層的控制信息打包交給它的下一層,它的下一層把這些內容看做數據,再加上它這一層的控制信息一起交給更下一層,依此類推,直到最下層。最下層是物理介質,它進行實際的通信。相鄰層之間有介面,介面定義下層向上層提供的原語操作和服務。相鄰層之間要交換信息,對等介面必須有一致同意的規則。層和協議的集合被稱為網路體系結構。
每一層中的活動元素通常稱為實體,實體既可以是軟體實體,也可以是硬體實體。第N層實體實現的服務被第N+1層所使用。在這種情況下,第N層稱為服務提供者,第N+1層稱為服務用戶。
服務是在服務接入點提供給上層使用的。服務可分為面向連接的服務和面向無連接的服務,它在形式上是由一組原語來描述的。這些原語可供訪問該服務的用戶及其他實體使用。
TCP是面向連接的通信協議,通過三次握手建立連接,通訊完成時要拆除連接,由於TCP是面向連接的所以只能用於端到端的通訊。
TCP提供的是一種可靠的數據流服務,採用「帶重傳的肯定確認」技術來實現傳輸的可靠性。TCP還採用一種稱為「滑動窗口」的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發送方的發送速度。
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如 Telnet、 FTP、 rlogin、 X Windows和 SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收 域名資料庫),但使用UDP傳送有關單個主機的信息。
㈣ 通過tcp/ip協議訪問資料庫
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、乙太網以及RS-232串列介面)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。
㈤ TCP/IP網路體系結構中,各層內分別有什麼協議,每一種協議的作用是什麼
一、TCP/IP網路體系結構中,常見的介面層協議有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。
1.網路層
網路層包括:IP(Internet Protocol)協議、ICMP(Internet Control Message Protocol) 、控制報文協議、ARP(Address Resolution Protocol)地址轉換協議、RARP(Reverse ARP)反向地址轉換協議。
2.傳輸層
傳輸層協議主要是:傳輸控制協議TCP(Transmission Control Protocol)和用戶數據報協議UDP(User Datagram protocol)。
3.應用層
應用層協議主要包括如下幾個:FTP、TELNET、DNS、SMTP、RIP、NFS、HTTP。
二、TCP/IP網路體系結構中,每一種協議的作用有:
TCP/IP協議不依賴於任何特定的計算機硬體或操作系統,提供開放的協議標准,即使不考慮Internet,TCP/IP協議也獲得了廣泛的支持。所以TCP/IP協議成為一種聯合各種硬體和軟體的實用系統。
2.TCP/IP協議並不依賴於特定的網路傳輸硬體,所以TCP/IP協議能夠集成各種各樣的網路。用戶能夠使用乙太網(Ethernet)、令牌環網(Token Ring Network)、撥號線路(Dial-up line)、X.25網以及所有的網路傳輸硬體。
3.統一的網路地址分配方案,使得整個TCP/IP設備在網中都具有惟一的地址
4.標准化的高層協議,可以提供多種可靠的用戶服務。
㈥ TCP/IP協議與HTTP協議區別
TPC/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。
1、TCP/IP連接
手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。
2、HTTP連接
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
㈦ TCP/IP協議是什麼
TCP/IP是INTERNET的基礎協議,也是一種電腦數據打包和定址的標准方法。在數據傳送中,可以形象地理解為有兩個信封,TCP和IP就像是信封,要傳遞的信息被劃分成若干段,每一段塞入一個TCP信封,並在該信封面上記錄有分段號的信息,再將TCP信封塞入IP大信封,發送上網。在接受端,一個TCP軟體包收集信封,抽出數據,按發送前的順序還原,並加以校驗,若發現差錯,TCP將會要求重發。因此,TCP/IP在INTERNET中幾乎可以無差錯地傳送數據。在任何一個物理網路中,各站點都有一個機器可識別的地址,該地址叫做物理地址.物理地址有兩個特點:(1)物理地址的長度,格式等是物理網路技術的一部分,物理網路不同,物理地址也不同.
(2)同一類型不同網路上的站點可能擁有相同的物理地址.
以上兩點決定了,不能用物理網路進行網間網通訊.
你裝在計算機-的TCP/IP軟體提供了一個包括TCP、IP以及TCP/IP協議集中其它協議的工具平台。特別是它包括一些高層次的應用程序和FTP(文件傳輸協議),它允許用戶在命令行上進行網路文件傳輸。
TCP/IP是美國政府資助的高級研究計劃署(ARPA)在二十世紀七十年代的一個研究成果,用來使全球的研究網路聯在一起形成一個虛擬網路,也就是國際互聯網。原始的Internet通過將已有的網路如ARPAnet轉換到TCP/IP上來而形成,而這個Internet最終成為如今的國際互聯網的骨幹網。
如今TCP/IP如此重要的原因,在於它允許獨立的網格加入到Internet或組織在一起形成私有的內部網(Intranet)。構成內部網的每個網路通過一種-做路由器或IP路由器的設備在物理上聯接在一起。路由器是一台用來從一個網路到另一個網路傳輸數據包的計算機。在一個使用TCP/IP的內部網中,信息通過使用一種獨立的叫做IP包(IPpacket)或IP數據報(IP datagrams)的數據單元進--傳輸。TCP/IP軟體使得每台聯到網路上的計算機同其它計算機「看」起來一模一樣,事實上它隱藏了路由器和基本的網路體系結構並使其各方面看起來都像一個大網。如同聯入乙太網時需要確認一個48位的乙太網地址一樣,聯入一個內部網也需要確認一個32位的IP地址。我們將它用帶點的十進制數表示,如128.10.2.3。給定一個遠程計算機的IP地址,在某個內部網或Internet上的本地計算機就可以像處在同一個物理網路中的兩台計算機那樣向遠程計算機發送數據。
TCP/IP提供了一個方案用來解決屬於同一個內部網而分屬不同物理網的兩台計算機之間怎樣交換數據的問題。這個方案包括許多部分,而TCP/IP協議集的每個成員則用來解決問題的某一部分。如TCP/IP協議集中最基本的協議-IP協議用來在內部網中交換數據並且執行一項重要的功能:路由選擇--選擇數據報從A主機到B主機將要經過的路徑以及利用合適的路由器完成不同網路之間的跨越(hop)。
TCP是一個更高層次的它允許運行在在不同主機上的應用程序相互交換數據流。TCP將數據流分成小段叫做TCP數據段(TCP segments),並利用IP協議進行傳輸。在大多數情況下,每個TCP數據段裝在一個IP數據報中進行發送。但如需要的話,TCP將把數據段分成多個數據報,而IP數據報則與同一網路不同主機間傳輸位流和位元組流的物理數據幀相容。由於IP並不能保證接收的數據報的順序相一致,TCP會在收信端裝配TCP數據段並形成一個不間斷的數據流。FTP和Telnet就是兩個非常流行的依靠TCP的TCP/IP應用程序。
另一個重要的TCP/IP協議集的成員是用戶數據報協議(UDP),它同TCP相似但比TCP原始許多。TCP是一個可靠的協議,因為它有錯誤檢查和握手確認來保證數據完整的到達目的地。UDP是一個「不可靠」的協議,因為它不能保證數據報的接收順序同發送順序相同,甚至不能保證它們是否全部到達。如果有可靠性要求,則應用程序避免使用它。同許多TCP/IP工具同時提供的SNMP(簡單網路管理協議)就是一個使用UDP協議的應用例子。
其它TCP/IP協議在TCP/IP網路中工作在幕後,但同樣也發揮著重要作用。例如地址轉換協議(ARP)將IP地址轉換為物理網路地址如乙太網地址。而與其對應的反向地址轉換協議(RARP)做相反的工作,即將物理網路地址轉換為IP地址。網際控制報文協議(ICMP)則是一個支持性協議,它利用IP完成IP數據報在傳輸時的控制信息和錯誤信息的傳輸。例如,如果一個路由器不能向前發送一個IP數據報,它就會利用ICMP來告訴發送者這里出現了問題。
㈧ TCP是什麼協議
TCP/IP協議介紹
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、乙太網以及RS-232串列介面)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。這4層分別為:
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網路遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網路介面層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送數據。
TCP/IP中的協議
以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:
1. IP
網際協議IP是TCP/IP的心臟,也是網路層中最重要的協議。
IP層接收由更低層(網路介面層例如乙太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
2. TCP
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名資料庫),但使用UDP傳送有關單個主機的信息。
3.UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
4.ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的『Redirect』信息通知主機通向其他系統的更准確的路徑,而『Unreachable』信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接『體面地』終止。PING是最常用的基於ICMP的服務。
5. TCP和UDP的埠結構
TCP和UDP服務通常有一個客戶/伺服器的關系,例如,一個Telnet服務進程開始在系統上處於空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息並發出響應,客戶程序讀出響應並向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認並協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址 發送包的IP地址。
目的IP地址 接收包的IP地址。
源埠 源系統上的連接的埠。
目的埠 目的系統上的連接的埠。
埠是一個軟體結構,被客戶程序或服務進程用來發送和接收信息。一個埠對應一個16比特的數。服務進程通常使用一個固定的埠,例如,SMTP使用25、Xwindows使用6000。這些埠號是『廣為人知』的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
㈨ tcp協議通過什麼來區分不同的連接
TCP/IP
不同的計算機系統,就好像語言不同的兩個人互相見了面,完全不能交流信息。因而他們需要定義一些共通的東西來進行交流,TCP/IP就是為此而生。TCP/IP不是一個協議,而是一個協議族的統稱。裡麵包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的計算機終端做自由的交流了。
TCP/IP 層次
應用層(http、ftp、smtp) -->傳輸層(TCP、UDP)-->網路層(IP)-->數據鏈路層
域名系統 :域名系統是一個分布的資料庫,它提供將主機名(就是網址啦)轉換成IP地址的服務。
埠號(port): 注意,這個號碼是用在TCP,UDP上的一個邏輯號碼,並不是一個硬體埠,我們平時說把某某埠封掉了,也只是在IP層次把帶有這個號碼的IP包給過濾掉了而已。
應用編程介面:現在常用的編程介面有socket和TLI。
數據鏈路層
數據鏈路層有三個目的:
為IP模塊發送和 接收IP數據報。
為ARP模塊發送ARP請求和接收ARP應答。
為RARP發送RARP請 求和接收RARP應答
ip大家都聽說過。至於ARP和RARP,ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議,而RARP則叫做逆地址解析協議.
--
IP 、ARP 、RARP 協議
三者都是在網路層 ,ARP協議用來找到目標主機的Ethernet網卡Mac地址,IP則承載要發送的消息。數據鏈路層可以從ARP得到數據的傳送信息,而從IP得到要傳輸的數據信息。
IP 協議
IP協議是TCP/IP協議的核心,所有的TCP,UDP,IMCP,IGCP的數據都以IP數據格式傳輸。要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達以後的處理機制--這被認為是上層協議:TCP或UDP要做的事情。所以這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。
協議頭
八位的TTL欄位,還記得這個欄位是做什麼的么?這個欄位規定該數據包在穿過多少個路由之後才會被拋棄(這里就體現出來IP協議包的不可靠性,它不保證數據被送達),某個ip數據包每穿過一個路由器,該數據包的TTL數值就會減少1,當該數據包的TTL成為零,它就會被自動拋棄。這個欄位的最大值也就是255,也就是說一個協議包也就在路由器裡面穿行255次就會被拋棄了,根據系統的不同,這個數字也不一樣,一般是32或者是64,Tracerouter這個工具就是用這個原理工作的,tranceroute的-m選項要求最大值是255,也就是因為這個TTL在IP協議裡面只有8bit。
現在的ip版本號是4,所以也稱作IPv4。現在還有IPv6,而且運用也越來越廣泛了。
IP路由選擇
當一個IP數據包準備好了的時候,IP數據包(或者說是路由器)是如何將數據包送到目的地的呢?它是怎麼選擇一個合適的路徑來"送貨"的呢?
最特殊的情況是目的主機和主機直連,那麼主機根本不用尋找路由,直接把數據傳遞過去就可以了。至於是怎麼直接傳遞的,這就要靠ARP協議了。
稍微一般一點的情況是,主機通過若干個路由器(router)和目的主機連接。那麼路由器就要通過ip包的信息來為ip包尋找到一個合適的目標來進行傳遞,比如合適的主機,或者合適的路由。路由器或者主機將會用如下的方式來處理某一個IP數據包
如果IP數據包的TTL(生命周期)以到,則該IP數據包就被拋棄。
搜索路由表,優先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發向目標主機
搜索路由表,如果匹配主機失敗,則匹配同子網的路由器,這需要「子網掩碼(1.3.)」的協助。如果找到路由器,則將該包發向路由器。
搜索路由表,如果匹配同子網路由器失敗,則匹配同網號路由器,如果找到路由器,則將該包發向路由器。
搜索路由表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發包
如果都失敗了,就丟掉這個包
這再一次證明了,ip包是不可靠的。因為它不保證送達。
ARP協議
還記得數據鏈路層的乙太網的協議中,每一個數據包都有一個MAC地址頭么?我們知道每一塊乙太網卡都有一個MAC地址,這個地址是唯一的,那麼IP包是如何知道這個MAC地址的?這就是ARP協議的工作。
ARP(地址解析)協議是一種解析協議,本來主機是完全不知道這個IP對應的是哪個主機的哪個介面,當主機要發送一個IP包的時候,會首先查一下自己的ARP高速緩存(就是一個IP-MAC地址對應表緩存),如果查詢的IP-MAC值對不存在,那麼主機就向網路發送一個ARP協議廣播包,這個廣播包裡面就有待查詢的IP地址,而直接收到這份廣播的包的所有主機都會查詢自己的IP地址,如果收到廣播包的某一個主機發現自己符合條件,那麼就准備好一個包含自己的MAC地址的ARP包傳送給發送ARP廣播的主機,而廣播主機拿到ARP包後會更新自己的ARP緩存(就是存放IP-MAC對應表的地方)。發送廣播的主機就會用新的ARP緩存數據准備好數據鏈路層的的數據包發送工作。
arp -a 可以查詢自己的arp緩存
這樣的高速緩存是有時限的,一般是20分鍾(伯克利系統的衍生系統)。
--
ICMP協議
--
UDP 協議
UDP是傳輸層協議,和TCP協議處於一個分層中,但是與TCP協議不同,UDP協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。
1 、UDP 的埠號
由於很多軟體需要用到UDP協議,所以UDP協議必須通過某個標志用以區分不同的程序所需要的數據包。埠號的功能就在於此,例如某一個UDP程序A在系統中注冊了3000埠,那麼,以後從外面傳進來的目的埠號為3000的UDP包都會交給該程序。埠號理論上可以有2^16這么多。因為它的長度是16個bit
2 、UDP 的檢驗和
這是一個可選的選項,並不是所有的系統都對UDP數據包加以檢驗和數據(相對TCP協議的必須來說),但是RFC中標准要求,發送端應該計算檢驗和。
UDP檢驗和覆蓋UDP協議頭和數據,這和IP的檢驗和是不同的,IP協議的檢驗和只是覆蓋IP數據頭,並不覆蓋所有的數據。UDP和TCP都包含一個偽首部,這是為了計算檢驗和而攝制的。偽首部甚至還包含IP地址這樣的IP協議裡面都有的信息,目的是讓UDP兩次檢查數據是否已經正確到達目的地。如果發送端沒有打開檢驗和選項,而接收端計算檢驗和有差錯,那麼UDP數據將會被悄悄的丟掉(不保證送達),而不產生任何差錯報文。
3 、UDP 的長度
UDP可以很長很長,可以有65535位元組那麼長。但是一般網路在傳送的時候,一次一般傳送不了那麼長的協議(涉及到MTU的問題),就只好對數據分片,當然,這些是對UDP等上級協議透明的,UDP不需要關心IP協議層對數據如何分片。
4 、IP 分片
IP在從上層接到數據以後,要根據IP地址來判斷從那個介面發送數據(通過選路),並進行MTU的查詢,如果數據大小超過MTU就進行數據分片。數據的分片是對上層和下層透明,而數據也只是到達目的地還會被重新組裝,不過不用擔心,IP層提供了足夠的信息進行數據的再組裝。
在IP頭裡面,16bit識別號唯一記錄了一個IP包的ID,具有同一個ID的IP片將會被重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表示中間的3bit標志則標示著該分片後面是否還有新的分片。這三個標示就組成了IP分片的所有信息,接受方就可以利用這些信息對IP數據進行重新組織(就算是後面的分片比前面的分片先到,這些信息也是足夠了)。
因為分片技術在網路上被經常的使用,所以偽造IP分片包進行流氓攻擊的軟體和人也就層出不窮。
5 、ICMP源站抑制差錯
當目標主機的處理速度趕不上數據接收的速度,因為接受主機的IP層緩存會被占滿,所以主機就會發出一個「我受不了」的一個ICMP報文。
--
單播廣播和多播
單播
單播是說,對特定的主機進行數據傳送。例如給某一個主機發送IP數據包。這時候,數據鏈路層給出的數據頭裡面是非常具體的目的地址,對於乙太網來 說,就是網卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。現在的具有路由功能的主機應該可以將單播數據定向轉發,而目的主機的網 絡介面則可以過濾掉和自己MAC地址不一致的數據。
廣播
廣播是主機針對某一個網路上的所有主機發送數據包。這個網路可能是網路,可能是子網,還可能是所有的子網。如果是網路,例如A類網址的廣播就是 netid.255.255.255,如果是子網,則是netid.netid.subnetid.255;如果是所有的子網(B類IP)則是則是 netid.netid.255.255。廣播所用的MAC地址FF-FF-FF-FF-FF-FF。網路內所有的主機都會收到這個廣播數據,網卡只要把 MAC地址為FF-FF-FF-FF-FF-FF的數據交給內核就可以了。一般說來ARP,或者路由協議RIP應該是以廣播的形式播發的。
多播
可以說廣播是多播的特例,多播就是給一組特定的主機(多播組)發送數據,這樣,數據的播發范圍會小一些(實際上播發的范圍一點也沒有變小),多播的MAC地址是最高位元組的低位為一,例 如01-00-00-00-00-00。多播組的地址是D類IP,規定是224.0.0.0-239.255.255.255。
雖然多播比較特殊,但是究其原理,多播的數據還是要通過數據鏈路層進行MAC地址綁定然後進行發送。所以一個乙太網卡在綁定了一個多播IP地址之後,必 定還要綁定一個多播的MAC地址,才能使得其可以像單播那樣工作。這個多播的IP和多播MAC地址有一個對應的演算法,在書的p133到p134之間。可以看到 這個對應不是一一對應的,主機還是要對多播數據進行過濾。
--
TCP
TCP和UDP處在同一層---運輸層,但是TCP和UDP最不同的地方是,TCP提供了一種可靠的數據傳輸服務,TCP是面向連接的,也就是說,利用TCP通信的兩台主機首先要經歷一個「撥打電話」的過程,等到通信准備結束才開始傳輸數據,最後結束通話。所以TCP要比UDP可靠的多,UDP是把數據直接發出去,而不管對方是不是在收信,就算是UDP無法送達,也不會產生ICMP差錯報文,這一經時重申了很多遍了。
把TCP保證可靠性的簡單工作原理:
應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的 數據報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段
當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能 及時收到一個確認,將重發這個報文段.
當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒.
TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸 過程中的任何變化。如果收到段的檢驗和有差錯, T P將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段 的到達也可能會失序。如果必要, TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
從這段話中可以看到,TCP中保持可靠性的方式就是超時重發,這是有道理的,雖然TCP也可以用各種各樣的ICMP報文來處理這些,但是這也不是可靠的,最可靠的方式就是只要不得到確認,就重新發送數據報,直到得到對方的確認為止。
TCP的首部和UDP首部一樣,都有發送埠號和接收埠號。但是顯然,TCP的首部信息要比UDP的多,可以看到,TCP協議提供了發送和確認所需要的所有必要的信息。可以想像一個TCP數據的發送應該是如下的一個過程。
雙方建立連接
發送方給接受方TCP數據報,然後等待對方的確認TCP數據報,如果沒有,就重新發,如果有,就發送下一個數據報。
接受方等待發送方的數據報,如果得到數據報並檢驗無誤,就發送ACK(確認)數據報,並等待下一個TCP數據報的到來。直到接收到FIN(發送完成數據報)
中止連接
可以想見,為了建立一個TCP連接,系統可能會建立一個新的進程(最差也是一個線程),來進行數據的傳送
--
TCP協議
TCP是一個面向連接的協議,在發送輸送之前 ,雙方需要確定連接。而且,發送的數據可以進行TCP層的分片處理。
TCP連接的建立過程 ,可以看成是三次握手 。而連接的中斷可以看成四次握手 。
1.連接的建立
在建立連接的時候,客戶端首先向伺服器申請打開某一個埠(用SYN段等於1的TCP報文),然後伺服器端發回一個ACK報文通知客戶端請求報文收到,客戶端收到確認報文以後再次發出確認報文確認剛才伺服器端發出的確認報文(繞口么),至此,連接的建立完成。這就叫做三次握手。如果打算讓雙方都做好准備的話,一定要發送三次報文,而且只需要三次報文就可以了。
可以想見,如果再加上TCP的超時重傳機制,那麼TCP就完全可以保證一個數據包被送到目的地。
2.結束連接
TCP有一個特別的概念叫做half-close,這個概念是說,TCP的連接是全雙工(可以同時發送和接收)連接,因此在關閉連接的時候,必須關閉傳和送兩個方向上的連接。客戶機給伺服器一個FIN為1的TCP報文,然後伺服器返回給客戶端一個確認ACK報文,並且發送一個FIN報文,當客戶機回復ACK報文後(四次握手),連接就結束了。
3.最大報文長度
在建立連接的時候,通信的雙方要互相確認對方的最大報文長度(MSS),以便通信。一般這個SYN長度是MTU減去固定IP首部和TCP首部長度。對於一個乙太網,一般可以達到1460位元組。當然如果對於非本地的IP,這個MSS可能就只有536位元組,而且,如果中間的傳輸網路的MSS更加的小的話,這個值還會變得更小。
4.客戶端應用程序的狀態遷移圖
客戶端的狀態可以用如下的流程來表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
以上流程是在程序正常的情況下應該有的流程,從書中的圖中可以看到,在建立連接時,當客戶端收到SYN報文的ACK以後,客戶端就打開了數據交互地連接。而結束連接則通常是客戶端主動結束的,客戶端結束應用程序以後,需要經歷FIN_WAIT_1,FIN_WAIT_2等狀態,這些狀態的遷移就是前面提到的結束連接的四次握手。
5.伺服器的狀態遷移圖
伺服器的狀態可以用如下的流程來表示:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
在建立連接的時候,伺服器端是在第三次握手之後才進入數據交互狀態,而關閉連接則是在關閉連接的第二次握手以後(注意不是第四次)。而關閉以後還要等待客戶端給出最後的ACK包才能進入初始的狀態。
6.TCP伺服器設計
前面曾經講述過UDP的伺服器設計,可以發現UDP的伺服器完全不需要所謂的並發機制,它只要建立一個數據輸入隊列就可以。但是TCP不同,TCP伺服器對於每一個連接都需要建立一個獨立的進程(或者是輕量級的,線程),來保證對話的獨立性。所以TCP伺服器是並發的。而且TCP還需要配備一個呼入連接請求隊列(UDP伺服器也同樣不需要),來為每一個連接請求建立對話進程,這也就是為什麼各種TCP伺服器都有一個最大連接數的原因。而根據源主機的IP和埠號碼,伺服器可以很輕松的區別出不同的會話,來進行數據的分發。
TCP的交互數據流
對於交互性要求比較高的應用,TCP給出兩個策略來提高發送效率和減低網路負擔:(1)捎帶ACK。(2)Nagle演算法(一次盡量多的發數據)
捎帶ACK的發送方式
這個策略是說,當主機收到遠程主機的TCP數據報之後,通常不馬上發送ACK數據報,而是等上一個短暫的時間,如果這段時間裡面主機還有發送到遠程主機的TCP數據報,那麼就把這個ACK數據報「捎帶」著發送出去,把本來兩個TCP數據報整合成一個發送。一般的,這個時間是200ms。可以明顯地看到這個策略可以把TCP數據報的利用率提高很多。
Nagle演算法
上過bbs的人應該都會有感受,就是在網路慢的時候發貼,有時鍵入一串字元串以後,經過一段時間,客戶端「發瘋」一樣突然回顯出很多內容,就好像數據一下子傳過來了一樣,這就是Nagle演算法的作用。
Nagle演算法是說,當主機A給主機B發送了一個TCP數據報並進入等待主機B的ACK數據報的狀態時,TCP的輸出緩沖區裡面只能有一個TCP數據報,並且,這個數據報不斷地收集後來的數據,整合成一個大的數據報,等到B主機的ACK包一到,就把這些數據「一股腦」的發送出去。雖然這樣的描述有些不準確,但還算形象和易於理解,我們同樣可以體會到這個策略對於低減網路負擔的好處。
在編寫插口程序的時候,可以通過TCP_NODELAY來關閉這個演算法。並且,使用這個演算法看情況的,比如基於TCP的X窗口協議,如果處理滑鼠事件時還是用這個演算法,那麼「延遲」可就非常大了。
2.TCP的成塊數據流
對於FTP這樣對於數據吞吐量有較高要求的要求,將總是希望每次盡量多的發送數據到對方主機,就算是有點「延遲」也無所謂。TCP也提供了一整套的策略來支持這樣的需求。TCP協議中有16個bit表示「窗口」的大小,這是這些策略的核心。
2.1.傳輸數據時ACK的問題
在解釋滑動窗口前,需要看看ACK的應答策略,一般來說,發送端發送一個TCP數據報,那麼接收端就應該發送一個ACK數據報。但是事實上卻不是這樣,發送端將會連續發送數據盡量填滿接受方的緩沖區,而接受方對這些數據只要發送一個ACK報文來回應就可以了,這就是ACK的累積特性,這個特性大大減少了發送端和接收端的負擔。
2.2.滑動窗口
滑動窗口本質上是描述接受方的TCP數據報緩沖區大小的數據,發送方根據這個數據來計算自己最多能發送多長的數據。如果發送方收到接受方的窗口大小為0的TCP數據報,那麼發送方將停止發送數據,等到接受方發送窗口大小不為0的數據報的到來。
2.3.數據擁塞
上面的策略用於區域網內傳輸還可以,但是用在廣域網中就可能會出現問題,最大的問題就是當傳輸時出現了瓶頸(比如說一定要經過一個slip低速鏈路)所產生的大量數據堵塞問題(擁塞),為了解決這個問題,TCP發送方需要確認連接雙方的線路的數據最大吞吐量是多少。這,就是所謂的擁塞窗口。
擁塞窗口的原理很簡單,TCP發送方首先發送一個數據報,然後等待對方的回應,得到回應後就把這個窗口的大小加倍,然後連續發送兩個數據報,等到對方回應以後,再把這個窗口加倍(先是2的指數倍,到一定程度後就變成現行增長,這就是所謂的慢啟動),發送更多的數據報,直到出現超時錯誤,這樣,發送端就了解到了通信雙方的線路承載能力,也就確定了擁塞窗口的大小,發送方就用這個擁塞窗口的大小發送數據。要觀察這個現象是非常容易的,我們一般在下載數據的時候,速度都是慢慢「沖起來的」
--
TCP的超時和重傳
超時重傳是TCP協議保證數據可靠性的另一個重要機制,其原理是在發送某一個數據以後就開啟一個計時器,在一定時間內如果沒有得到發送的數據報的ACK報文,那麼就重新發送數據,直到發送成功為止。
超時
超時時間的計算是超時的核心部分,TCP要求這個演算法能大致估計出當前的網路狀況,雖然這確實很困難。要求精確的原因有兩個:(1)定時長久會造成網路利用率不高。(2)定時太短會造成多次重傳,使得網路阻塞。所以,書中給出了一套經驗公式,和其他的保證計時器准確的措施。
計時器的使用
一個連接中,有且僅有一個測量定時器被使用。也就是說,如果TCP連續發出3組數據,只有一組數據會被測量。
ACK數據報不會被測量,原因很簡單,沒有ACK的ACK回應可以供結束定時器測量。
重傳
前面曾經提到過,數據在傳輸的時候不能只使用一個窗口協議,我們還需要有一個擁塞窗口來控制數據的流量,使得數據不會一下子都跑到網路中引起「擁塞」。也曾經提到過,擁塞窗口最初使用指數增長的速度來增加自身的窗口,直到發生超時重傳,再進行一次微調。但是沒有提到,如何進行微調,擁塞避免演算法和慢啟動門限就是為此而生。
所謂的慢啟動門限就是說,當擁塞窗口超過這個門限的時候,就使用擁塞避免演算法,而在門限以內就採用慢啟動演算法。所以這個標准才叫做門限,通常,擁塞窗口記做cwnd,慢啟動門限記做ssthresh。下面我們來看看擁塞避免和慢啟動是怎麼一起工作的
演算法概要
對一個給定的連接,初始化cwnd為1個報文段,ssthresh為65535個位元組。
TCP輸出常式的輸出不能超過cwnd和接收方通告窗口的大小。擁塞避免是發送方使用 的流量控制,而通告窗口則是接收方進行的流量控制。前者是發送方感受到的網路擁塞的估 計,而後者則與接收方在該連接上的可用緩存大小有關。
當擁塞發生時(超時或收到重復確認),ssthresh被設置為當前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少為2個報文段)。此外,如果是超時引起了擁塞,則 cwnd被設置為1個報文段(這就是慢啟動)。
當新的數據被對方確認時,就增加cwnd,但增加的方法依賴於我們是否正在進行慢啟 動或擁塞避免。如果cwnd小於或等於ssthresh,則正在進行慢啟動,否則正在進行擁塞避免。 慢啟動一直持續到我們回到當擁塞發生時所處位置的半時候才停止(因為我們記錄了在步驟2 中給我們製造麻煩的窗口大小的一半),然後轉為執行擁塞避免。
快速重傳和快速恢復演算法
這是數據丟包的情況下給出的一種修補機制。一般來說,重傳發生在超時之後,但是如果發送端接受到3個以上的重復ACK的情況下,就應該意識到,數據丟了,需要重新傳遞。這個機制是不需要等到重傳定時器溢出的,所以叫做快速重傳,而重新傳遞以後,因為走的不是慢啟動而是擁塞避免演算法,所以這又叫做快速恢復演算法。流程如下:
當收到第3個重復的ACK時,將ssthresh設置為當前擁塞窗口cwnd的一半。重傳丟失的 報文段。設置cwnd為ssthresh加上3倍的報文段大小。
每次收到另一個重復的ACK時, cwnd增加1個報文段大小並發送1個分組(如果新的 cwnd允許發送)。
當下一個確認新數據的ACK到達時,設置cwnd為ssthresh(在第1步中設置的值)。這個 ACK應該是在進行重傳後的一個往返時間內對步驟1中重傳的確認。另外,這個ACK也應該 是對丟失的分組和收到的第1個重復的ACK之間的所有中間報文段的確認。這一步採用的是擁 塞避免,因為當分組丟失時我們將當前的速率減半。
TCP的其它定時器
堅持定時器
用於防止通告窗口為0以後雙方互相等待死鎖的情況
堅持定時器的原理是簡單的,當TCP伺服器收到了客戶端的0滑動窗口報文的時候,就啟動一個定時器來計時,並在定時器溢出的時候向向客戶端查詢窗口是否已經增大,如果得到非零的窗口就重新開始發送數據,如果得到0窗口就再開一個新的定時器准備下一次查詢。通過觀察可以得知,TCP的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數退避序列來作為每一次的溢出時間。
2.保活定時器
保活定時器更加的簡單,還記得FTP或者Http伺服器都有Sesstion Time機制么?因為TCP是面向連接的,所以就會出現只連接不傳送數據的「半開放連接」,伺服器當然要檢測到這種連接並且在某些情況下釋放這種連接,這就是保活定時器的作用。其時限根據伺服器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啟動的情況下,如果收到該端「前生」的保活探察,則要發送一個RST數據報文幫助另一端結束連接。