TCP、UDP及IP協議總結


TCP協議常見知識

TCP協議特點 和 首部格式 

 

源端口(Source Port),目標端口(Destination Port) 各2字節

源端口號,標識主機上發起傳送的應用程序;目的端口標識主機上傳送要到達的應用程序。源端和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上I P首部中的源端I P地址和目的端I P地址唯一確定一個TCP連接。一個I P地址和一個端口號有時也稱為一個插口(socket),插口對(socket pair)(包含客戶I P地址、客戶端口號、服務器 I P地址和服務器端口號的四元組 )可唯一確定互聯網絡中每個TCP連接的雙方。IP+TCP端口唯一確定一個TCP連接。

  TCP協議通過使用"端口"來標識源端和目標端的應用進程。 端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地為客戶端的應用程序分配端口號。在服務器端,每種服務在"眾所周知的端口"(Well-Know Port)為用戶提供服務。

 

封包序號(Sequence Number) 4字節

由於 TCP 封包必須要帶入 IP 封包當中,所以如果 TCP 數據太大時(大於 IP 封包的容許程度), 就得要進行分段。這個 Sequence Number 就是記錄每個封包的序號,可以讓收受端重新將 TCP 的數據組合起來。

序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。

 

確認號(Acknowledge Number) 4字節

為了確認主機端確實有收到我們 client 端所送出的封包數據,我們 client 端當然希望能夠收到主機方面的響應,那就是這個 Acknowledge Number 的用途了。 當 client 端收到這個確認碼時,就能夠確定之前傳遞的封包已經被正確的收下了。這個號是期望收到對方的下一個報文段的數據的第一個字節的序號。

 

數據偏移(Data Offset)4比特

和IP數據包頭部一樣,也有個Options字段,長度是不固定的,而為了要確認整個TCP封包大小,就需要這個標志來說明整個封包區段的起始位置。

這個字段指出TCP報文段的數據起始處距離 TCP報文段的起始處有多遠。“數據偏移”的單位不是字節而是32bit字(4字節為計算單位)。

沒有任何選項字段的TCP頭部長度為20字節;最多可以有60字節的TCP頭部。

 

保留字段(Reserved) 占6比特

保留為今后使用,但目前應置為0。

 

狀態控制碼(Code,Control Flag)

標志位字段(U、A、P、R、S、F):占6比特。各 比特的含義如下:

URG:緊急比特(urgent),當URG=1時,表明緊急指針字段有效,代表該封包為緊急封包。它告訴系統此報文段中有緊急數據,應盡快傳送(相當於高優先級的數據), 且上圖中的 Urgent Pointer 字段也會被啟用。

ACK:確認比特(Acknowledge)。只有當ACK=1時確認號字段才有效,代表這個封包為確認封包。當ACK=0時,確認號無效。---TCP的3此握手后2次ACK=1的。

PSH:(Push function)若為1時,代表要求對方立即傳送緩沖區內的其他對應封包,而無需等緩沖滿了才送。

RST:復位比特(Reset) ,當RST=1時,表明TCP連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。

SYN:同步比特(Synchronous),SYN置為1,就表示這是一個連接請求或連接接受報文,通常帶有 SYN 標志的封包表示『主動』要連接到對方的意思。。

FIN:終止比特(Final),用來釋放一個連接。當FIN=1時,表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接。

 

滑動窗口(Window占2字節

窗口字段用來控制對方發送的數據量,可以告知對方目前本身有的緩沖器容量(Receive Buffer) 還可以接收封包。當 Window=0 時,代表緩沖器已經額滿,所以應該要暫停傳輸數據。單位為字節。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然后通知對方以確定對方的發送窗口的上限,這個值是本機期望一次接收的字節數。

 

TCP校驗和(Checksum)  占2字節

當數據要由發送端送出前,會進行一個檢驗的動作,並將該動作的檢驗值標注在這個字段上; 而接收者收到這個封包之后,會再次的對封包進行驗證,並且比對原發送的 Checksum 值是否相符,如果相符就接受,若不符就會假設該封包已經損毀,進而要求對方重新發送此封包!在計算檢驗和時,要在TCP報文段的前面加上12字節的偽首部。

 

緊急指針(Urgent Pointer)  占2字節

這個字段是在 Code 字段內的 URG = 1 時才會產生作用。可以告知緊急數據所在的位置(緊急指針指出在本報文段中的緊急數據的最后一個字節的序號)。

 

選項(Options長度可變。

TCP首部可以有多達40字節的可選信息,用於把附加信息傳遞給終點,或用來對齊其它選項。

目前此字段僅應用於表示接收端可以接收的最大數據區段容量,若此字段不使用, 表示可以使用任意數據區段的大小。 這個字段較少使用。

TCP首部的主要選項:

最大報文段長度MSS(Maximum Segment Size)是TCP報文段中的數據字段的最大長度。MSS告訴對方TCP:“我的緩存所能接收的報文段的數據字段的最大長度是MSS個字節。”--

 

---注意:MSS應在保證IP層不分片的情況下盡量大些,IP層如果收到的數據太大,會依據鏈路層的最大傳送單元MTU(鏈路層的協議規定了一個數據幀中數據字段的最大長度),進行分片傳輸,然后接收方在進行組合,這是很耗費時間的。

 

填充字段(Padding)

如同 IP 封包需要有固定的 32bits 表頭一樣, Options 由於字段為非固定, 所以也需要 Padding 字段來加以補齊才行。同樣也是 32 bits 的整數。

這是為了使整個首部長度是4字節的整數倍。

 

UDP協議的特點 和 首部格式  

 

 

TCPUDP的區別

  1.     TCP面向連接(read/write/send/recv),而UDP無連接(sendtorecvfrom)
  2.     TCP是可靠傳輸(超時重傳+數據應答)UDP不可靠
  3.     TCP是點對點連接,UDP可以一對多的
  4.     TCP面向字節流,UDP面向數據報
  5.     TCPHTTP,HTTPS,FTPTELNETSMTP等使用,UDPDNSDHCPNFSIGMPTFTP

 

TCPUDPIP首部長度

TCP首部最小長度是20字節,最大是60字節

UDP只有8個字節

IP數據首部最小長度是20字節,最大是60字節

 

 

OSI模型TCP/IP模型

OSI7層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

TCP/IP層:網絡接口層、網際層、運輸層和應用層

5層協議:物理層、數據鏈路層、網絡層、運輸層和應用層

 

如何保持TCP的可靠傳輸

         超時重傳機制 + 數據應答機制

 

停止等待協議的介紹

  1. 無差錯-收到確認之后就進行下一次的發送
  2. 出現差錯-在指定的時間內沒有收到確認(超時計時器),進行重新發送

 

  1. 確認丟失 或者 確認遲到 確認丟失,超時后,發送方繼續發送,接收方收到之后,不接收,但是會再發一條確認。確認遲到的話,發送方會再次發送,接收方收到之后,不接收,同時再次發送確認。

 

  1. 信道的利用率 利用率低,引入流水線型 連續ARQ協議

 

連續ARQ協議  

 

滑動窗口的介紹

  1. 正常情況下
  2. 未按序收到的情況下

 

 

 

  1. 滑動窗口為0的異常情況

持續計時器完成,發送一個零窗口的探測報文。

 

滑動窗口和緩存之間的關系

 

 

 

超時重傳的時間選擇

TCP采用了一種自適應算法,它記錄一個報文段發出的時間,以及收到相應確認的時間,這兩個時間之差就是報文段的往返時間RTT。TCP保留了RTT的加權平均RTTs。

 

選擇確認SACK【主要注意最多只能提供四個連續塊的(8個序號)】

如果要使用SACK那么在建立TCP連接時,就要在TCP的首部中加上允許SACK的選項字段,雙方必須協商好,選擇SACK后原來的ack依然有效,只是以后在TCP報文段的首部中都加上SACK選項,以便報告收到的不連續的字節塊的邊界。

邊界信息每個邊界需要8個字節,而TCP首部選項長度最大是40個字節,所以最多是4個字節塊。

 

TCP的流量控制的實現(Nagle算法)

  1. 滑動窗口

         前面講過

      2. 效率的問題 Nagle算法的思想(發送方)

 

      3. 糊塗症(接收方)

 

 

4個計時器

  1.  超時重傳計時器,每次TCP發送一個數據后都要開啟超時重傳計時器,時間到了還沒有收到確認就重傳數據。
  2.  滑動窗口過程如果接收端的確認窗口是0,發送端不發送數據,怎么持續下去?TCP為每個連接設置了一個持續計時器,只要收到對方的零窗口通知,就啟動該計時器,時間到則發送0窗口探測報文段(僅攜帶1字節數據),接收端在確認報文中給出現在的窗口值即可。
  3.  保活計時器,客戶端突然發生故障,服務器端不能一直等着啊?TCP為每個連接設置一個保活計時器,每次收到客戶端的數據就更新保活計時器,時間設置一般是2小時,若2小時沒有收到數據,就發送一個探測報文段,以后每隔75分鍾發一次,連續10個探測報文段沒響應,就關閉連接。
  4.  TCP揮手時主動關閉的一方會進入TIME-WAIT狀態,關閉AB的連接后,A進入TIME-WAIT狀態,等待B關閉到A的連接,這時用到了時間等待計時器,A會等待2MSL時間。MSL為最長報文段壽命,一般為2分鍾。

零窗口

TCP規定,即使確認報文中窗口設置為0,也必須接收以下數據:零窗口探測報文段,確認報文段和攜帶緊急數據的報文段。

 

 

MTUMSL以及MSS

MSL:最長報文段壽命,一般2分鍾,TCP連接釋放時,主動方必須經過2MSL后才進入CLOSED狀態,因此主動方關閉時間比較晚;

MSSTCP最大報文段(數據部分)傳輸長度,在TCP報文的首部中設置,可以通過getsockoptsetsockopt獲取和設置TCP_MAXSEGMSS=TCP報文段長度-TCP首部長度;

MTU:數據鏈路層最大幀長度,IP層數據段不能大於MTU,否則分片傳輸,效率降低了,一般是1500字節。

 

TCP的擁塞(se)控制

  1. 和流量控制的區別

擁塞控制是防止網絡的阻塞,流量控制是端到端的,防止發送方的數據不要發送的太快。

  1. 兩種實現方式 和 觸發的條件

2.1慢開始-擁塞避免 觸發條件:確認沒有按時收到,即只要發生超時重傳

 

2.2 快重傳-快恢復 收到連續三個相同的確認

 

 

  1. 為什么快重傳快恢復會更加的好

在調整的階段,是變為閾值的大小,而不是從1開始,因為收到了連續三個相同的確認,表名當前網絡很大可能是良好的。

 

  1. 4.       滑動窗口的大小是怎么確定的

根據擁塞窗口(cwnd)的大小 和 接收方給定的窗口(window)的大小確定的,誰小就是誰。

 

TCP的三次握手

  1. 連接圖

 

  1. 2.       為什么需要第三次

防止已失效的請求報文在經過一段時間之后又到達了服務端。創建了新的連接。

  1. 3.       為什么不用四次

和使用三次的效果是一樣的。

  1. 4.       TCP三次握手存在什么樣的缺陷,如何預防和改進

發起連接的一方不進行連接的確認,耗盡服務器的資源。

解決方法:緩存的方法,確認收到來自客戶的ACK之后再進行創建TCB;Session的方式;防火牆

 

 

TCP的四次揮手

  1. 連接圖

 

  1. 2.       為什么握手需要三次,揮手卻使用的是四次

a)         因為在服務端的ACK和FIN階段是必須分開的,這是一個半連接的狀態,服務端可能還會給客戶端發送信息。

  1. 3.       為什么要有TIME_WAIT狀態,有何作用

a)         主動關閉方的最后一次確認能夠正確的被對象收到。

b)         讓本網絡中的 已失效的連接請求報文段 在本連接中消失。

 

TCP的有限機狀態[面試要求自己能夠手動畫出]

狀 態

描 述

CLOSED

呈阻塞、關閉狀態,表示主機當前沒有活動的傳輸連接或正在進行傳輸連接

LISTEN

呈監聽狀態,表示服務器正在等待新的傳輸連接進入

SYN RCVD

表示主機已收到一個傳輸連接請求,但尚未確認

SYN SENT

表示主機已經發出一個傳輸連接請求,等待對方確認

ESTABLISHED

傳輸連接建立,通信雙方進入正常數據傳輸狀態

FIN WAIT 1

(主動關閉)主機已經發送關閉連接請求,等待對方確認

FIN WAIT 2

(主動關閉)主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求

TIMED WAIT

完成雙向傳輸連接關閉,等待所有分組消失

CLOSING

雙方同時嘗試關閉傳輸連接,等待對方確認

CLOSE WAIT

(被動關閉)收到對方發來的關閉傳輸連接請求,並已確認

LAST ACK

(被動關閉)等待最后一個關閉傳輸連接確認,並等待所有分組消失

 

各層常用協議

OSI中的層

功能

TCP/IP協議族

應用層

文件傳輸,電子郵件,文件服務,虛擬終端

TFTP(69),HTTP(80),SNMP,FTP(21),SMTP(25),DNS(53),Telnet(23) 等等

表示層

數據格式化,代碼轉換,數據加密

沒有協議

會話層

解除或建立與別的接點的聯系

沒有協議

傳輸層

提供端對端的接口

TCP,UDP

網絡層

數據包選擇路由

IP,ICMP,OSPF,EIGRP,IGMP

數據鏈路層

傳輸有地址的幀以及錯誤檢測功能

SLIP,CSLIP,PPP,MTU

物理層

以二進制數據形式在物理媒體上傳輸數據

ISO2110,IEEE802,IEEE802.2

 

網絡層特點

IP協議是網絡層使用的協議,與之相關的還有ARP協議,ICMP協議,IGMP協議

注意:網絡層只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務。

 

IP地址分類和特點

 

  1. A類地址

A類地址范圍:1.0.0.0~126.255.255.255

A類地址網絡號字段占據一個字節,只有7位可以使用,可指派的網絡號是126(2^7-2)個。減2的原因是:IP地址網絡段全為0表示this,意思是本網絡;IP網絡號127(01111111)保留作為本網絡的換回測試本主機的進程之間的通信。

A類地址主機號占3個字節,因此每個A類網絡的最大主機數是2^24-2.減2的原因是:0的主機號字段表示該IP地址是本主機所連接到的單個A類網絡地址。例如一個Ip地址是5.6.7.8那么其所在的網絡地址是5.0.0.0,而全1表示所有的,1表示該網絡上所有的主機。

  1. B類地址

B類地址128.1.0.0~191.255.255.255

  1. C類地址

C類地址192.0.1.0~223.255.255.255

  1. D類地址

D類地址224.0.0.0~239.255.255.255,多播地址,一般不用的

  1. 5.       E類地址

E類地址240.0.0.0~255.255.255.255,保留不用的

 

私網IP范圍是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

 

 

 

 

子網掩碼

子網掩碼為前面是連續的1,然后全是0,為擴展IP使用范圍,使用子網掩碼技術,對網絡進行更細划分得到子網,即和子網掩碼與運算得到結果相同的屬於一個子網。

注意:規定現在網絡必須使用子網掩碼,路由器中必須有這一行,這樣已知IP地址和子網掩碼只要進行與運算馬上就可以得出網絡地址。

對划分子網的好理解,這樣得到的是子網地址

對不划分子網的,規定必須使用默認子網掩碼,默認子網掩碼中1的位置和網絡號字段net-id正好對應,因此得到的也是網絡地址。比如A類假如某個公司沒有划分子網那么默認子網掩碼就是:0xff000000,這樣與運算后肯定是A類網絡地址。0xffff0000同理是B類網絡的默認子網掩碼。

 

 

IP地址和MAC地址

 

 

 

ARP協議

ARP協議的用途是從網絡層使用的IP地址解析出數據鏈路層使用的硬件地址。

注意:ARP是解決同一個局域網上的主機或路由器的IP地址和MAC地址的映射問題,不同網絡上的行不通的。

ARP過程:

 

 

IP協議首部字段

 

版本號:IP地址的版本號,通信雙方版本號必須一致

首部長度:占4個字節,最大15,注意其表示單位是4字節。即最大表示15個4字節

區分服務:一般不用

總長度:首部和數據長度之和

標識:IP軟件維護一個計數器,每產生一個數據包,計數器加1,注意這里是IP分片時候使用的,當IP數據太多(大於MTU)需要分片時,每片的標識一致才能合並回來

標志:和分片有關,占3位,最低位MF=1標識后面還有分片,中間一位DF=1表示不能分片

片偏移:某片在原分組的位置,片偏移以8字節為一個單位

 

生存時間(TTL)表明該數據包在網絡中的壽命,目的是防止無法交付的數據報在網絡中兜圈子,TTL表明該數據包最多經過多少路由器,顯然最大值是255,路由器在轉發數據包之前把TTL1,如果為0這時就丟棄該數據包,顯然如果TTL=1表示該報文只在本局域網中傳輸。

 

協議:指明此數據包攜帶的適何種協議的數據,如TCPUDPICMP等,目的主機判斷后就可知道該交給誰了

 

首部校驗和:只檢查首部,不檢查數據部分

 

路由器分組轉發算法

 

 

ICMP協議特點

 

 


ICMP協議應用

traceroute指令

traceroute從源主機向目的主機發送一連串的IP數據包,數據包中封裝的是不可交付的UDP數據包(使用非法的端口號)。第一個IP數據包P1TTL設為1,當第一個P1到達第一個路由器R1時,R1先收下它,然后把TTL1,由於TTL1后為0,這時丟棄該報文,同時向源主機發送ICMP時間超過差錯報告報文。

 

 

 

 

面試:兩台筆記本ping不通,你覺得可能存在哪些問題?

答: (1)首先考慮是否是網絡的問題

      (2)局域網設置問題,電腦互聯是要設置的。看是否安裝了必要的網絡協議,最重要的是IP地址是否設置正確。

      (3)網卡驅動未安裝正確

      (4)防火牆設置有問題

      (5)是否有什么軟件阻止了ping包

linux下最簡單的禁ping方法

首先登陸服務器終端之間執行:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

這樣就可以禁ping了。如果想恢復ping可以執行命令

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 

 

 

路由選擇協議

1.路由器和交換機的區別?

交換機用於局域網,利用主機的MAC地址進行數據傳輸,而不需要關心IP數據包中的IP地址,它工作於數據鏈路層。路由器識別網絡是通過IP數據包中IP地址的網絡號進行的,所以為了保證數據包路由的正確性,每個網絡都必須有一個唯一的網絡號。路由器通過IP數據包的IP地址進行路由的(將數據包遞交給哪個下一跳路由器)。路由器工作於網絡層。由於設備現在的發展,現在很多設備既具有交換又具有路由功能,兩者的界限越來越模糊。

 

2. 網橋的作用

網橋是一個局域網與另一個局域網之間建立連接的橋梁。

 

3.路由表是做什么用的?在Linux環境中怎么配置一條默認路由?

路由表是用來決定如何將一個數據包從一個子網傳送到另一個子網的,換句話說就是用來決定從一個網卡接收到的包應該送到哪一個網卡上去。路由表的每一行至少有目標網絡號、子網掩碼、到這個子網應該使用的網卡這三條信息。當路由器從一個網卡接收到一個包時,它掃描路由表的每一行,用里面的子網掩碼與數據包中的目標IP地址做邏輯與運算(&)找出目標網絡號。如果得出的結果網絡號與這一行的網絡號相同,就將這條路由表六下來作為備用路由。如果已經有備用路由了,就載這兩條路由里將網絡號最長的留下來,另一條丟掉(這是用無分類編址CIDR的情況才是匹配網絡號最長的,其他的情況是找到第一條匹配的行時就可以進行轉發了)。如此接着掃描下一行直到結束。如果掃描結束仍沒有找到任何路由,就用默認路由。確定路由后,直接將數據包送到對應的網卡上去。在具體的實現中,路由表可能包含更多的信息為選路由算法的細節所用。

在Linux上可以用“route add default gw<默認路由器 IP>”命令配置一條默認路由。

 

  1. 4.       每個路由器在尋找路由時需要知道哪5部分信息?

目的地址:報文發送的目的地址

鄰站的確定:指明誰直接連接到路由器的接口上

路由的發現:發現鄰站知道哪些網絡

選擇路由:通過從鄰站學習到的信息,提供最優的到達目的地的路徑

保持路由信息:路由器保存一張路由表,它存儲所知道的所有路由信息。

 

  1. 5.       IGP,RIP,OSPF,EGP介紹

答:(1)IGP:內部網關協議,即在一個自治系統內部使用的路由選擇協議,如RIP和OSPF。

              (11)RIP是一種分布式的基於距離向量的路由選擇協議,要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離向量。距離即是跳數,路由器與直接相連的網絡跳數為1,以后每經過一個路由器跳數加1RIP允許一條路徑最多包含15個路由器,因此當距離為16時認為不可達,這因為如此限制了網絡的規模,說明RIP只能工作在規模較小的網絡中。RIP的三個要點:僅和相鄰路由器交換信息;交換的信息是當前路由器知道的全部信息,即路由表;按固定的時間間隔交換路由信息,如30秒。RIP協議使用運輸層的用戶數據報UDP進行傳送,因此RIP協議的位置位於應用層,但是轉發IP數據報的過程是在網絡層完成的。RIP是好消息傳播的快,壞消息傳播的慢。

              12OSPF:最短路徑優先,三個要點:采用洪泛法向本自治系統的路由器發送信息;發送的信息就是與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息;只有當鏈路狀態發生變化時,路由器才用洪泛法向所有路由器發送此信息。OSPF直接使用IP數據包傳送,因此OSPF位於網絡層。

       EGP:外部網關協議,若源站和目的站處在不同的自治系統中,當數據報傳到一個自治系統的邊界時,就需要使用一種協議將路由選擇信息傳遞到另一個自治系統中,如EGP。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM