1. 程式人生 > >Linux-網絡部分總結(一概念)

Linux-網絡部分總結(一概念)

cep 超時 數據鏈路 oca 局限 次數 and address int

Linux-網絡部分總結(一概念)



計算機網絡 ,通internet鏈接各級用戶。
多種網絡服務為用戶提供不同服務、例如ftp、web、tftp等
網絡的搭建由各種網絡拓撲來提高網速,容錯等問題例如:
總線拓撲、星型拓撲、擴展星型拓撲、環形、雙環拓撲、全網狀拓撲、部分網狀拓撲。


osi模型
應用層:網絡進程訪問應用層application
表示層:數據的表達presentation
會話層:數據的會話session
傳輸層:負責可靠的傳輸transport
網絡層:數據傳輸,邏輯上的唯一地址,路由數據包network
數據鏈路層:訪問介質,定義如何格式化數據以便進行傳輸以及如何控制對網絡的訪問,物理地址 data link

物理層:二進制傳輸,定義了物理的特性 physical
PDU: Protocol Data Unit,協議數據單元是指對等層次之間傳遞的數據單位(7層單位的通稱)
物理層的 PDU是數據位 bit
數據鏈路層的 PDU是數據幀 frame
網絡層的PDU是數據包 packet
傳輸層的 PDU是數據段 segment
其他更高層次的PDU是消息 message


局域網 Local Area Network
1.局域網(lan):一般限定在較小的區域內,小於10km的範圍,通常采用有線的方式連接起來。
2.城域網(man):規模局限在一座城市的範圍內,10~100km的區域。
3.廣域網(wan):網絡跨越國界、洲界,甚至全球範圍。


三種通訊模式 (單工 半雙工 全雙工三種工作模式)
單播 單對單通訊、每個數據包發往單個目的主機,目的地址指明單個接收接口稱為單播
廣播 一對多通訊、一個主機向網上的所有其他主機發送幀,稱為廣播
多播(組播)處於單播和廣播之間:幀僅傳送給屬於多播組的多個主機


現在常用的非屏蔽的雙絞線utp的線序 (同軸電纜,光線|超五類以上)
白橙橙白綠藍白藍綠白棕棕 T568B
白綠綠白橙藍白藍橙白棕棕 T568A


以太網Ethernet Frame(工作在物理數據鏈路層)數據幀結構
preamble 7|sof 1|Desination address(目標)6| Dourcea address(源地) 6|Length 2|802.2Header and data 46-1500|fcs 4
Ethernet 2
IEEE802.3幀結構(byte)
preamble 7|sof 1|Desination address 6|Dourcea address 6|Type 2|802.2Header and data 46-1500 |fcs 4
type 區分上層協議
IEEE 802.1Q 幀結構(byte)
Desination address 6|Dourcea address 6|Vlan tag 4|Type 2|802.2Header and data 46-1500|fcs 4
vlan tag: tpid 2|pri 3bit|cfi 1bit|vid 12bit


TPID:TagProtocolIdentifier(標簽協議標識符),2Byte,表示幀類型,取值為0x8100時表示IEEE802.1Q的VLAN數據幀。如果不支持802.1Q的設備收到這樣的幀,會將其丟棄,各設備廠商可以自定義該字段的值。當鄰居設備將TPID值配置為非0x8100時,為了能夠識別這樣的報文,實現互通,必須在本設備上修改TPID值,確保和鄰居設備的TPID值配置一致
PRI:Priority,3bit,表示數據幀的802.1p(是IEEE802.1Q的擴展協議)優先級。取值範圍為0~7,值越大優先級越高。當網絡阻塞時,交換機優先發送優先級高的數據幀
CFI:CanonicalFormatIndicator(標準格式指示位),1bit,表示MAC地址在不同的傳輸介質中是否以標準格式進行封裝,用於兼容以太網和令牌環網。CFI取值為0表示MAC地址以標準格式進行封裝,為1表示以非標準格式封裝。在以太網中,CFI的值為0
VID:VLANID,12bit,表示該數據幀所屬VLAN的編號。VLANID取值範圍是0~4095。由於0和4095為協議保留取值,所以VLAN ID的有效取值範圍是1~4094


Tcp:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路;結束後拆除鏈路(全雙工


tcp 報文頭部 在type後面IPTCP 有一個20字節的固定頭部
0-65535-源端口0-16|目標端口16-32|序號seq32|確認號ack32|數據偏移4|保留6|6標記位-URG1(緊急指針有效)|ACK|PSH(1不在緩沖放直接發包|RST(重置位1重新鏈街)|SYN(同步)|FIN(結束)|窗口16|檢驗和16|緊急指針16|選項|填充(不固定的)


源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用16位表示的,可推算計算機的端口個數為2^16個


序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由於序列號由32位表示,所以每2^32個字節,就會出現序列號回繞,再次從 0 開始


確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送方:我希望你(指發送方)下次發送的數據的第一個字節數據的編號為此確認號


數據偏移:表示TCP報文段的首部長度,共4位,由於TCP首部包含一個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字段的單位是32位(即4個字節為計算單位),4位二進制最大表示15,所以數據偏移也就是TCP首部最大60字節


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報文段稱為結束報文段


窗口大小:表示現在允許對方發送的數據量,也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量,達到此值,需要ACK確認後才能再繼續傳送後面數據,由Window size value Window size scaling factor(此值在三次握手階段TCP選項Window scale協商得到)得出此值


校驗和:提供額外的可靠性


緊急指針:標記緊急數據在數據字段中的位置


選項部分:其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位表示,選項部分最長為:(2^4-1)
4-20=40字節
最大報文段長度:Maxium Segment Size,MSS,通常1460字節
窗口擴大:Window Scale
時間戳: Timestamps
。。。netstat -na -nat 查看鏈接狀態和 ss -nta 功能相似
面向鏈接:先建立鏈接在通訊 三次握手
第一次握手 c發送請求 SYN=1 seq=x序號 c--r c-CLOSE-SYN SENT r-CLOSE LISTEN
第二次握手 r回 SYN=1 ACk=1 SEQ=y ack=x+1 r--c r-LISTEN-SYN RCVD c-YN-SENT-ESTAB LISTHED
第三次握手 c回 ACK=1 seq=x+1 ack=y+1 c--r r-ESTAB LISTHED


sync半鏈接 accept全連接 請求來 建立半鏈接(鏈表) 握手完成建立全連接(鏈表)
/proc/sys/net/ipv4/tcp_max_syn_backlog未完成連接隊列大小,建議調整大小為1024以上
/proc/sys/net/core/somaxconn完成連接隊列大小,建議調整大小為1024以上
。。。
終止鏈接 四次揮手 互相都可以發送
第一次揮手 FIN=1 seq =u c--r c-ESTAB LISHED-FIN WAIT 1
第二次揮手 ACK=1 seq=v ack=u+1 r--c r-ESTAB LISTED-CLOSE_WALT
第三次揮手 FIN=1 ACK=1 seq=w ack=u+1 r--c c-TIN_WAIT1-FINWAIT2-TIME WAIT r-CLOSE WAIT-LASTACK
第四次揮手 ACK=1 seq=u+1 ack=w+1 c--r c-TIMEWAIT等待兩倍的數據端最大時長-CLOSE r-CLOSED
NetworkMangager 和 network 服務可能沖突
yum install httpd-tools;ab -c 100 -n 2000 http://192.23.. 遠程鏈接多次 172.22.149.155


處於FIN_WAIT_2狀態的客戶端需要等待服務器發送結束報文段,才能轉移至TIME_WAIT狀態,否則它將一直停留在這個狀態。如果不是為了在半關閉狀態下繼續接收數據,連接長時間地停留在FIN_WAIT_2狀態並無益處。連接停留在FIN_WAIT_2狀態的情況可能發生在:客戶端執行半關閉後,未等服務器關閉連接就強行退出了。此時客戶端連接由內核來接管,可稱之為孤兒連接(和孤兒進程類似)
Linux為了防止孤兒連接長時間存留在內核中,定義了兩個內核參數
/proc/sys/net/ipv4/tcp_max_orphans指定內核能接管的孤兒連接數目
/proc/sys/net/ipv4/tcp_fin_timeout指定孤兒連接在內核中生存的時間


TCP超時重傳相關的兩個內核參數:
/proc/sys/net/ipv4/tcp_retries1,指定在底層IP接管之前TCP最少執行的重傳次數,默認值是3
/proc/sys/net/ipv4/tcp_retries2,指定連接放棄前TCP最多可以執行的重傳次數,默認值15(一般對應13~30min)
TCP擁塞控制的標準文檔是RFC 5681,其中詳細介紹了擁塞控制的四個部分:慢啟動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fastretransmit)和快速恢復(fast recovery)。擁塞控制算法在Linux下有多種實現,比如reno算法、vegas算法和cubic算法等。它們或者部分或者全部實現了上述四個部分
當前所使用的擁塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control


有限狀態機FSM:Finite State Machine
CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
SYN-SENT 在發送連接請求後,等待對方確認
SYN-RECEIVED 在收到和發送一個連接請求後,等待對方確認
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,並已確認
LAST-ACK 被動關閉,等待最後一個關閉傳輸連接確認,並等待所有分組消失
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認


ARP 地址解析地址 擁有ip地址通過廣播獲得mac地址
ARP先於三次握手
RARP 反向解析地址 mac-ip 發送請求IP地址


IP 協議PDU報文頭部 20字節固定
版本:占4位,指 IP 協議的版本目前的IP協議版本號為4
首部長度:占4位,可表示的最大數值是15個單位,一個單位為4字節,因此IP 的首部長度的最大值是60字節
區分服務:占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.後改名為區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下不使用
總長度:占16位,指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535 字節.總長度必須不超過最大傳送單元 MTU
標識:占16位,它是一個計數器,通常,每發送一個報文,該值會加1,也用於數據包分片,在同一個包的若幹分片中,該值是相同的
標誌(flag):占3位,目前只有後兩位有意義
DF: Don’t Fragment 中間的一位,只有當 DF=0 時才允許分片
MF: More Fragment 最後一位,MF=1表示後面還有分片,MF=0 表示最後一個分片
片偏移:占12位,指較長的分組在分片後,該分片在原分組中的相對位置.片偏移以8個字節為偏移單位
生存時間:占8位,記為TTL (Time To Live) 數據報在網絡中可通過的路由器數的最大值,TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64.發送 ICMP 回顯應答時經常把 TTL 設為最大值 255
cat /proc/sys/net/ipv4/ip_default_ttl
協議:占8位,指出此數據報攜帶的數據使用何種協議以便目的主機的IP層將數據部分上交給哪個處理過程, 1表示為 ICMP 協議, 2表示為 IGMP 協議, 6表示為 TCP 協議, 17表示為 UDP 協議
首部檢驗和:占16位,只檢驗數據報的首部不檢驗數據部分.這裏不采用 CRC 檢驗碼而采用簡單的計算方法
源地址和目的地址:都各占4字節,分別記錄源地址和目的地址
片偏移以8個字節為偏移單位,假定MTU=1500
三個包標識ID都相同,三個包DF都為0,前兩個MF=1,最後一個MF=0


ip 地址
私有地址範圍
A 10.0.0.0 10.255.255.255
B 172.16.0.0 172.31.255.255
C 192.168.0.0 192.168.255.255


路由
主機路由:記錄到哪一個主機怎麽走(數據龐大)
網絡路由:網段怎麽走
默認路由:有一條默認路徑只有這一條路
優先級:精度越高優先級越高
route -n


dhcp 動態主機配置協議 c-r 廣播發現報文discover|r-c 廣播提供消息offer|c-r 發送請求消息做出響應request|r-c 確認消息結束交換過程ACK報文

Linux-網絡部分總結(一概念)