TCP協議常見知識linux
源端口(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 的數據組合起來。網絡
序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。socket
確認號(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字節的整數倍。
TCP和UDP的區別
TCP、UDP、IP首部長度
TCP首部最小長度是20字節,最大是60字節
UDP只有8個字節
IP數據首部最小長度是20字節,最大是60字節
OSI模型TCP/IP模型
OSI是7層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層
TCP/IP層:網絡接口層、網際層、運輸層和應用層
5層協議:物理層、數據鏈路層、網絡層、運輸層和應用層
如何保持TCP的可靠傳輸
超時重傳機制 + 數據應答機制
中止等待協議的介紹
連續ARQ協議
滑動窗口的介紹
持續計時器完成,發送一個零窗口的探測報文。
滑動窗口和緩存之間的關係
超時重傳的時間選擇
TCP採用了一種自適應算法,它記錄一個報文段發出的時間,以及收到相應確認的時間,這兩個時間之差就是報文段的往返時間RTT。TCP保留了RTT的加權平均RTTs。
選擇確認SACK【主要注意最多隻能提供四個連續塊的(8個序號)】
若是要使用SACK那麼在創建TCP鏈接時,就要在TCP的首部中加上容許SACK的選項字段,雙方必須協商好,選擇SACK後原來的ack依然有效,只是之後在TCP報文段的首部中都加上SACK選項,以便報告收到的不連續的字節塊的邊界。
邊界信息每一個邊界須要8個字節,而TCP首部選項長度最大是40個字節,因此最可能是4個字節塊。
TCP的流量控制的實現(Nagle算法)
前面講過
2. 效率的問題 Nagle算法的思想(發送方)
3. 糊塗症(接收方)
4個計時器
零窗口
TCP規定,即便確認報文中窗口設置爲0,也必須接收如下數據:零窗口探測報文段,確認報文段和攜帶緊急數據的報文段。
MTU和MSL以及MSS
MSL:最長報文段壽命,通常2分鐘,TCP鏈接釋放時,主動方必須通過2MSL後才進入CLOSED狀態,所以主動方關閉時間比較晚;
MSS:TCP最大報文段(數據部分)傳輸長度,在TCP報文的首部中設置,能夠經過getsockopt和setsockopt獲取和設置TCP_MAXSEG,MSS=TCP報文段長度-TCP首部長度;
MTU:數據鏈路層最大幀長度,IP層數據段不能大於MTU,不然分片傳輸,效率下降了,通常是1500字節。
TCP的擁塞(se)控制
擁塞控制是防止網絡的阻塞,流量控制是端到端的,防止發送方的數據不要發送的太快。
2.1慢開始-擁塞避免 觸發條件:確認沒有按時收到,即只要發生超時重傳
2.2 快重傳-快恢復 收到連續三個相同的確認
在調整的階段,是變爲閾值的大小,而不是從1開始,由於收到了連續三個相同的確認,表名當前網絡很大多是良好的。
根據擁塞窗口(cwnd)的大小 和 接收方給定的窗口(window)的大小肯定的,誰小就是誰。
TCP的三次握手
防止已失效的請求報文在通過一段時間以後又到達了服務端。建立了新的鏈接。
和使用三次的效果是同樣的。
發起鏈接的一方不進行鏈接的確認,耗盡服務器的資源。
解決方法:緩存的方法,確認收到來自客戶的ACK以後再進行建立TCB;Session的方式;防火牆
TCP的四次揮手
a) 由於在服務端的ACK和FIN階段是必須分開的,這是一個半鏈接的狀態,服務端可能還會給客戶端發送信息。
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地址分類和特色
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表示該網絡上全部的主機。
B類地址128.1.0.0~191.255.255.255
C類地址192.0.1.0~223.255.255.255
D類地址224.0.0.0~239.255.255.255,多播地址,通常不用的
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地址和子網掩碼只要進行與運算立刻就能夠得出網絡地址。
l 對劃分子網的好理解,這樣獲得的是子網地址
l 對不劃分子網的,規定必須使用默認子網掩碼,默認子網掩碼中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,路由器在轉發數據包以前把TTL減1,若是爲0這時就丟棄該數據包,顯然若是TTL=1表示該報文只在本局域網中傳輸。
協議:指明此數據包攜帶的適何種協議的數據,如TCP、UDP,ICMP等,目的主機判斷後就可知道該交給誰了
首部校驗和:只檢查首部,不檢查數據部分
路由器分組轉發算法
ICMP協議特色
ICMP協議應用
traceroute指令
traceroute從源主機向目的主機發送一連串的IP數據包,數據包中封裝的是不可交付的UDP數據包(使用非法的端口號)。第一個IP數據包P1的TTL設爲1,當第一個P1到達第一個路由器R1時,R1先收下它,而後把TTL減1,因爲TTL減1後爲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)IGP:內部網關協議,即在一個自治系統內部使用的路由選擇協議,如RIP和OSPF。
(11)RIP是一種分佈式的基於距離向量的路由選擇協議,要求網絡中的每個路由器都要維護從它本身到其餘每個目的網絡的距離向量。距離便是跳數,路由器與直接相連的網絡跳數爲1,之後每通過一個路由器跳數加1。RIP容許一條路徑最多包含15個路由器,所以當距離爲16時認爲不可達,這由於如此限制了網絡的規模,說明RIP只能工做在規模較小的網絡中。RIP的三個要點:僅和相鄰路由器交換信息;交換的信息是當前路由器知道的所有信息,即路由表;按固定的時間間隔交換路由信息,如30秒。RIP協議使用運輸層的用戶數據報UDP進行傳送,所以RIP協議的位置位於應用層,可是轉發IP數據報的過程是在網絡層完成的。RIP是好消息傳播的快,壞消息傳播的慢。
(12)OSPF:最短路徑優先,三個要點:採用洪泛法向本自治系統的路由器發送信息;發送的信息就是與本路由器相鄰的全部路由器的鏈路狀態,但這只是路由器所知道的部分信息;只有當鏈路狀態發生變化時,路由器才用洪泛法向全部路由器發送此信息。OSPF直接使用IP數據包傳送,所以OSPF位於網絡層。
EGP:外部網關協議,若源站和目的站處在不一樣的自治系統中,當數據報傳到一個自治系統的邊界時,就須要使用一種協議將路由選擇信息傳遞到另外一個自治系統中,如EGP。