Linux基礎:TCP/IP協議詳解

TCP/IP協議算法


Transmission Control Protocol /Internet Protocol   傳輸控制協議/英特爾互聯協議
TCP/IP是一個Protocol Stack,包括TCP、 IP、UDP、ICMP、RIP、TELNET、FTP、 SMTP、ARP等許多協議
最先發源於美國國防部(縮寫DOD)的英特爾的前身ARPA網項目1983年1月1日,TCP/IP取代了舊的網絡控制協議NCP,成爲今天的互聯網和局域網的基石和標準,由互聯網工程任務組負責維護
共定義了四層
和ISO參考模型的分層有對應關係  

TCP/IP 協議和OSI模型 

TCP/IP              OSI參考模型

應用層               應用層
                         表示層
                         會話層

傳輸層               傳輸層

internet層           網絡層

數據鏈路層           數據鏈路層

物理層               物理層

TCP特性編程


工做在傳輸層
面向鏈接協議
全雙工協議
半關閉
錯誤檢查
將數據打包成端,排序
確認機制
數據恢復重傳
流量控制,滑動窗口
擁塞控制,慢啓動和擁塞避免算法

TCP緩存


源端口,目標端口:計算機上的進程要是和其餘進程通訊是經過計算機端口的,而一個計算機端口某個時刻只能被一個進程佔用,因此經過制定源端口和目標端口,就能夠知道是那兩個進程須要通訊,源端口,目標端口是用16位表示的,可推算計算機端口個數爲2^16個
序列號:表示本報文段所發送數據的第一個字節的編號,在TCP連接中所傳送的字節節流的每個字節都會按順序編號,因爲序列號有32位表示,因此每2^32個字節,都會出現序列號迴繞,再次從0開始
確認號:表示接收方指望收到發送方下一個報文段的第一個字節數據的編號,也就是告訴發送發:我但願你下一次發送的數據的第一個字節數據的編號是這個確認號 
數據偏移: 表示TCP報文段的首部長度,共4位 因爲TCP首部包含一個長度可變的選項部分,須要指定這個TCP報文的長度到底有多長,他指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠 ,該字段單位是32位,4位二進最大表示15 因此數據飄逸也是TCP首部最大60字節

TCP包頭服務器


URG:表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針字段(urgent pointer)只有當URG=1時纔有效 
    ACK:表示是否前面確認號字段是否有效。只有當ACK=1時,前面的確認號字段纔有效。 TCP規定,鏈接創建後,ACK必須爲1,帶ACK標誌的TCP報文段稱爲確認報文段 
    PSH:提示接收端應用程序應該當即從TCP接收緩衝區中讀走數據,爲接收後續數據騰出空 間。若是爲1,則表示對方應當當即把數據提交給上層應用,而不是緩存起來,若是應用程序 不將接收到的數據讀走,就會一直停留在TCP接收緩衝區中 
    RST:若是收到一個RST=1的報文,說明與主機的鏈接出現了嚴重錯誤(如主機崩潰),必 須釋放鏈接,而後再從新創建鏈接。或者說明上次發送給主機的數據有問題,主機拒絕響應, 帶RST標誌的TCP報文段稱爲復位報文段 
    SYN:在創建鏈接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求創建連 接的報文段;當SYN=1,ACK=1時,表示對方贊成創建鏈接。SYN=1,說明這是一個請求 創建鏈接或贊成創建鏈接的報文。只有在前兩次握手中SYN才置爲1,帶SYN標誌的TCP報文 段稱爲同步報文段 
    FIN:表示通知對方本端要關閉鏈接了,標記數據是否發送完畢。若是FIN=1,即告訴對方: 「個人數據已經發送完畢,你能夠釋放鏈接了」,帶FIN標誌的TCP報文段稱爲結束報文段

序號和確認號和標記爲網絡


seq:序號:發送者的發的包的序號 
ack:確認號:是接收者收到後返回的確認包 

標記位:
URG:(緊急指針位)只有當URG=1時纔有意義
ACK:(確認位)表示是否前面確認號字段是否有效。只有當ACK=1時,前面的確認號字段纔有效。
RST:重置位
SYN:同步位
FIN:結束位

TCP包頭併發


窗口大小:表示如今容許對方發送的數據量,也就是告訴對方,從本報文段的確認號開始容許對方發送的數據量
校驗和:提供額外的可靠性
緊急指針:標記緊急數據在數據字段中的位置
選項部分:其最大長度可根據TCP首部長度進行推算
常見選項:
    最大報文段長度:Maxium Segment Size,MSS
    窗口擴大:Windows Scaling
    時間戳: Timestamps

TCP三次握手ssh


所謂三次握手(Three-way Handshake),是指創建一個TCP鏈接時,須要客戶端和服務器總共發送3個包。
三次握手的目的是鏈接服務器指定端口,創建TCP鏈接,並同步鏈接雙方的序列號和確認號並交換 TCP 窗口大小信息.在socket編程中,客戶端執行connect()時。將觸發三次握手:

三次握手過程socket


第一次握手:創建鏈接時,客戶端發送SYN包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認; 
第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態; 
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手.

TCP四次揮手tcp

TCP的鏈接的拆除須要發送四個包,所以稱爲四次揮手(four-way handshake)。
客戶端或服務器都可主動發起揮手動做,在socket編程中,任何一方執行close()操做便可產生揮手操做。

四次揮手過程ide


step1:第一次揮手
首先,客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳送,而後等待服務器的確認。其中終止標誌位FIN=1,序列號seq=u。

step2:第二次揮手
服務器收到這個FIN,它發送一個ACK,確認ack爲收到的序號加一。

step3:第三次揮手
關閉服務器到客戶端的鏈接,發送一個FIN給客戶端。

step4:第四次揮手
客戶端收到FIN後,併發回一個ACK報文確認,並將確認序號seq設置爲收到序號加一。首先進行關閉的一方將執行主動關閉,而另外一方執行被動關閉。

客戶端發送FIN後,進入終止等待狀態,服務器收到客戶端鏈接釋放報文段後,就當即給客戶端發送確認,服務器就進入CLOSE_WAIT狀態,
此時TCP服務器進程就通知高層應用進程,於是從客戶端到服務器的鏈接就釋放了。
此時是「半關閉狀態」,即客戶端不能夠發送給服務器,服務器能夠發送給客戶端。 
此時,若是服務器沒有數據報發送給客戶端,其應用程序就通知TCP釋放鏈接,而後發送給客戶端鏈接釋放數據報,並等待確認。
客戶端發送確認後,進入TIME_WAIT狀態,可是此時TCP鏈接尚未釋放,而後通過等待計時器設置的2MSL後,才進入到CLOSE狀態。

爲何創建鏈接協議是三次握手,而關閉鏈接倒是四次呢


這是由於服務端的LISTEN狀態下的SOCKET當收到SYN報文的鏈接請求後,它能夠把ACK和SYN(ACK起應答做用,而SYN起同步做用)放在一個報文裏來發送。

但關閉鏈接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;
但未必你全部的數據都所有發送給對方了,因此你可能未必會立刻會關閉SOCKET,也即你可能還須要發送一些數據給對方以後,再發送FIN報文給對方來表示你贊成如今能夠關閉鏈接了,
因此它這裏的ACK報文和FIN報文多數狀況下都是分開發送的。

爲何不能用兩次握手進行鏈接


咱們知道,3次握手完成兩個重要的功能,既要雙方作好發送數據的準備工做(雙方都知道彼此已準備好),也要容許雙方就初始序列號進行協商,這個序列號在握手過程當中被髮送和確認。

如今把三次握手改爲僅須要兩次握手,死鎖是可能發生的。
做爲例子,考慮計算機S和C之間的通訊,假定C給S發送一個鏈接請求分組,S收到了這個分組,併發 送了確認應答分組。
按照兩次握手的協定,S認爲鏈接已經成功地創建了,能夠開始發送數據分組。
但是,C在S的應答分組在傳輸中被丟失的狀況下,將不知道S 是否已準備好,不知道S創建什麼樣的序列號,C甚至懷疑S是否收到本身的鏈接請求分組。
在這種狀況下,C認爲鏈接還未創建成功,將忽略S發來的任何數據分 組,只等待鏈接確認應答分組。
而S在發出的分組超時後,重複發送一樣的分組。這樣就造成了死鎖。

爲何TIME_WAIT狀態須要通過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?


雖然按道理,四個報文都發送完畢,咱們能夠直接進入CLOSE狀態了,可是咱們必須假象網絡是不可靠的,有能夠最後一個ACK丟失。
因此TIME_WAIT狀態就是用來重發可能丟失的ACK報文。

TCP超時重傳


異常網絡狀態下(開始出現超時或丟包),TCP控制數據傳輸以保證其承若的可靠服務
TCP服務必須可以重傳超時時間內未收到的TCP報文段
爲此,TCP模塊爲每個TCP報文段都維護一個重傳定時器,該定時器在TCP報文段第一次被髮送時啓動
與TCP超時重傳相關的兩個內核參數:
/proc/sys/net/ipv4/tcp_retries1:最少執行的重傳次數
proc/sys/net/ipv4/tcp_retries2:作多執行的重傳次數默認值15

TCP協議和UDP協議的區別是什麼


TCP協議是有鏈接的,有鏈接的意思是開始傳輸實際數據以前TCP的客戶端和服務器端必須經過三次握手創建鏈接,會話結束以後也要結束鏈接。
    而UDP是無鏈接的  

    TCP協議保證數據按序發送,按序到達,提供超時重傳來保證可靠性,
    可是UDP不保證按序到達,甚至不保證到達,只是努力交付,即使是按序發送的序列,也不保證按序送到。

CP協議PORT


傳輸層經過port號,確認應用層協議
tcp :傳輸控制協議,面向鏈接協議:通訊前須要創建虛擬鏈路:結束後拆除鏈路   0-65535
udp:無鏈接的協議  0-65535
IANA:互聯網數字分配機構(負責域名;數字資源;協議分配)
    0-1023:系統端口或特權端口(僅管理員可用)總所周知,永久的分配個固定 的系統應用使用  22(ssh)80(http) 443(https)
    1024-49125:     用戶端口或註冊端口但要求不嚴格
    49152-65535:動態端口或私有端口,客戶端程序隨機使用端口
    其範圍的定義:/proc/sys/net/ipv4/ip_local_port_range

Internet協議特徵


運行與OSI網絡層
面向無鏈接的協議
獨立處理數據包
分層編址
盡力而爲傳輸
無數據恢復功能

單播多播廣播


處地址類別外,還能夠根據傳輸的信息特徵將IP地址分爲單播,多播,廣播。主機使用IP地址進行一對一(單播),一對多(多播),或一對全部(廣播)的通訊
            單播:單播地址是IP網絡中最多見的。包含單播地址的分組發送給特定主機,
            多播:多播地址讓原設備可以將元分組發送給一組設備
            廣播:廣播分組的目標IP地址的主機部分全爲1 ,這覺得着本地網絡(廣播域)中的全部主機都將接收並查看該分組

ARP地址解析協議:

IP PDU報頭


版本:佔4位,指IP協議的版本目前的IP協議版本號爲4
首部長度:佔4位,可表示的最大數值是15個單位,一個單位爲四個字節,所以IP的首部長度的最大數值是60個字節
區分服務:佔8位用來得到更好的服務,在舊標準中叫作服務類型,到實際上未被使用過,後更名爲區分服務,只有在使用區分服務時,這個字段才起做用,通常的狀況下都不使用
總長度:佔16位,指首部和數據之和的長度,單位爲字節,所以數據報的最大長度爲65535字節,總長度不能超過最大傳輸單元MTU
標識:佔16位它是一個計數器,一般,沒發送一個只有當報文,該值會加1 ,也用於數據包分片,自同一個包的若干分片中,該值是相同的
標誌:佔3位,目前只有後兩位有意義
DF:中間的一位,只有當DF=1是才容許分片。
MF:最高位,MF=1表示後面還有分片,表示最後一個分片
片偏移:佔12位,指較長的分組 在分片後,該分片在原分組中的相對位置,片偏移以8個字節爲偏移單位
生存時間:佔8位,即爲TTL數據報在網絡中可經過的路由器的最大值,TTL字段是有發送端初始設置一個8bit字節,推薦的初始值由分配數字RFC指定,當前值爲64 發送ICMP回顯應答是=時常常把TTL設爲最大值255
協議:佔8位,指出此數據寶攜帶數據使用何種協議以便目的主機的IP層將數據部分上交給哪一個處理過程,1表示ICMP協議,2表示爲IGMP協議 ,6表示TCP協議,17表示爲UDP協議
首部檢驗和:佔16位,只驗證數據報的首部不檢驗數據部分,這裏不採用CRC檢驗碼而採用簡單的計算方法
原地址和目標地址:都各自佔4個字節,分別記錄原地址和目的地址

IP地址


他們可惟一標識IP網絡中的每一臺設備
每臺主機(計算機,網絡設備,外圍設備)必須具備惟一的地址
IP地址有兩部分組成:
    標識網絡
    每一個網絡分配一個ID
主機ID:
    標識單個主機
    有組織非配給各設備

IP地址分類


A類:
    0 000 0000 - 0111 1111:1-127 
    網絡數:126,127
    每一個網絡中的主機數:2^24-2
    默認子網掩碼:255.0.0.0
    私網地址:10.0.0.0
B類:
    10 00 0000 - 10 11 1111: 128-191
    網絡數:2^14
    每一個網絡中的主機數:2^16 -2
    默認子網掩碼:255.255.0.0
    私網地址:172.16.0.0-172.31.0.0
C類:
    110 0 0000 -110 1 1111:192-223
    網絡數:2^21
    每一個網絡中的主機數:2^8-2
    默認子網掩碼:255,255,255.0
D類:組播
E類:240-255
相關文章
相關標籤/搜索