VLAN(Virtual Local Area Network)的中文名爲"虛擬局域網"。
虛擬局域網(VLAN)是一組邏輯上的設備和用戶,這些設備和用戶並不受物理位置的限制,能夠根據功能、部門及應用等因素將它們組織起來,相互之間的通訊就好像它們在同一個網段中同樣,由此得名虛擬局域網。VLAN是一種比較新的技術,工做在OSI參考模型的第2層和第3層,一個VLAN就是一個廣播域,VLAN之間的通訊是經過第3層的路由器來完成的。與傳統的局域網技術相比較,VLAN技術更加靈活,它具備如下優勢: 網絡設備的移動、添加和修改的管理開銷減小;能夠控制廣播活動;可提升網絡的安全性。
在計算機網絡中,一個二層網絡能夠被劃分爲多個不一樣的廣播域,一個廣播域對應了一個特定的用戶組,默認狀況下這些不一樣的廣播域是相互隔離的。不一樣的廣播域之間想要通訊,須要經過一個或多個路由器。這樣的一個廣播域就稱爲VLAN。mysql
(1) CLOSED: 表示初始狀態。
(2) LISTEN: 表示服務器端的某個SOCKET處於監聽狀態,能夠接受鏈接。
(3) SYN_RCVD: 這個狀態表示接受到了SYN報文,在正常狀況下,這個狀態是服務器端的SOCKET在創建TCP鏈接時的三次握手會話過程當中的一箇中間狀態,很短暫,基本上用netstat你是很難看到這種狀態的,除非你特地寫了一個客戶端測試程序,故意將三次TCP握手過程當中最後一個ACK報文不予發送。所以這種狀態時,當收到客戶端的ACK報文後,它會進入到ESTABLISHED狀態。
(4) SYN_SENT: 這個狀態與SYN_RCVD遙想呼應,當客戶端SOCKET執行CONNECT鏈接時,它首先發送SYN報文,所以也隨即它會進入到了SYN_SENT狀態,並等待服務端的發送三次握手中的第2個報文。SYN_SENT狀態表示客戶端已發送SYN報文。
(5) ESTABLISHED:表示鏈接已經創建。
(6) FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2狀態的真正含義都是表示等待對方的FIN報文。而這兩種狀態的區別是:FIN_WAIT_1狀態其實是當SOCKET在ESTABLISHED狀態時,它想主動關閉鏈接,向對方發送了FIN報文,此時該SOCKET即進入到FIN_WAIT_1狀態。而當對方迴應ACK報文後,則進入到FIN_WAIT_2狀態,固然在實際的正常狀況下,不管對方何種狀況下,都應該立刻迴應ACK報文,因此FIN_WAIT_1狀態通常是比較難見到的,而FIN_WAIT_2狀態還有時經常能夠用netstat看到。
(7) FIN_WAIT_2:FIN_WAIT_2狀態下的SOCKET,表示半鏈接,也即有一方要求close鏈接,但另外還告訴對方,還有數據須要傳送,稍後再關閉鏈接。
(8) TIME_WAIT: 表示收到了對方的FIN報文,併發送出了ACK報文,就等2MSL後便可回到CLOSED可用狀態了。若是FIN_WAIT_1狀態下,收到了對方同時帶FIN標誌和ACK標誌的報文時,能夠直接進入到TIME_WAIT狀態,而無須通過FIN_WAIT_2狀態。
(9) CLOSING: 屬於一種比較罕見的例外狀態。正常狀況下,當你發送FIN報文後,按理來講是應該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文。可是CLOSING狀態表示你發送FIN報文後,並無收到對方的ACK報文,反而卻也收到了對方的FIN報文。
(10) CLOSE_WAIT: 這種狀態的含義表示在等待關閉。當對方close一個SOCKET後發送FIN報文,你係統毫無疑問地會迴應一個ACK報文給對方,此時則進入到CLOSE_WAIT狀態。
(11) LAST_ACK: 它是被動關閉一方在發送FIN報文後,最後等待對方的ACK報文。當收到ACK報文後,也便可以進入到CLOSED可用狀態了。linux
(一) OSI ( Open System Interconnect ),即開放式系統互聯。 通常都叫 OSI 參考模型,是 ISO (國際標準化組織)組織在 1985 年研究的網絡互聯模型。該體系結構標準定義了網絡互連的七層框架(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層),即 ISO 開放系統互連參考模型。在這一框架下進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性、互操做性和應用的可移植性。
ISO 爲了更好的使網絡應用更爲普及,就推出了 OSI 參考模型。其含義就是推薦全部公司使用這個規範來控制網絡。這樣全部公司都有相同的規範,就能互聯了。提供各類網絡服務功能的計算機網絡系統是很是複雜的。根據分而治之的原則, ISO 將整個通訊功能劃分爲七個層次,劃分原則是:
(1) 網路中各節點都有相同的層次;
(2) 不一樣節點的同等層具備相同的功能;
(3) 同一節點內相鄰層之間經過接口通訊;
(4) 每一層使用下層提供的服務,並向其上層提供服務;
(5) 不一樣節點的同等層按照協議實現對等層之間的通訊。
分層的好處是利用層次結構能夠把開放系統的信息交換問題分解到一系列容易控制的軟硬件模塊-層中,而各層能夠根據須要獨立進行修改或擴充功能,同時,有利於個不一樣製造廠家的設備互連,也有利於你們學習、理解數據通信網絡。
(二) OSI 參考模型中不一樣層完成不一樣的功能,各層相互配合經過標準的接口進行通訊。
第7層--應用層: OSI 中的最高層。 爲特定類型的網絡應用提供了訪問 OSI 環境的手段。應用層肯定進程之間通訊的性質,以知足用戶的須要。應用層不只要提供應用進程所須要的信息交換和遠程操做,並且還要做爲應用進程的用戶代理,來完成一些爲進行信息交換所必需的功能。它包括:文件傳送訪問和管理 FTAM 、虛擬終端 VT 、事務處理 TP 、遠程數據庫訪問 RDA 、製造報文規範 MMS 、目錄服務 DS 等協議;應用層能與應用程序界面溝通,以達到展現給用戶的目的。 在此常見的協議有 :HTTP , HTTPS , FTP , TELNET , SSH , SMTP , POP3 等。
第6層--表示層:主要用於處理兩個通訊系統中交換信息的表示方式。 爲上層用戶解決用戶信息的語法問題。它包括數據格式交換、數據加密與解密、數據壓縮與終端類型的轉換。
第5層--會話層:在兩個節點之間創建端鏈接。 爲端系統的應用程序之間提供了對話控制機制。此服務包括創建鏈接是以全雙工仍是以半雙工的方式進行設置,儘管能夠在層 4 中處理雙工方式 ;會話層管理登入和註銷過程。它具體管理兩個用戶和進程之間的對話。若是在某一時刻只容許一個用戶執行一項特定的操做,會話層協議就會管理這些操做,如阻止兩個用戶同時更新數據庫中的同一組數據。
第4層--傳輸層:—常規數據遞送-面向鏈接或無鏈接。 爲會話層用戶提供一個端到端的可靠、透明和優化的數據傳輸服務機制。包括全雙工或半雙工、流控制和錯誤恢復服務;傳輸層把消息分紅若干個分組,並在接收端對它們進行重組。不一樣的分組能夠經過不一樣的鏈接傳送到主機。這樣既能得到較高的帶寬,又不影響會話層。在創建鏈接時傳輸層能夠請求服務質量,該服務質量指定可接受的誤碼率、延遲量、安全性等參數,還能夠實現基於端到端的流量控制功能。
第3層--網絡層:本層經過尋址來創建兩個節點之間的鏈接,爲源端的運輸層送來的分組,選擇合適的路由和交換節點,正確無誤地按照地址傳送給目的端的運輸層。 它包括經過互連網絡來路由和中繼數據 ;除了選擇路由以外,網絡層還負責創建和維護鏈接,控制網絡上的擁塞以及在必要的時候生成計費信息。經常使用設備有交換機;
第2層--數據鏈路層:在此層將數據分幀,並處理流控制。 屏蔽物理層,爲網絡層提供一個數據鏈路的鏈接,在一條有可能出差錯的物理鏈接上,進行幾乎無差錯的數據傳輸(差錯控制)。本層指定拓撲結構並提供硬件尋址。經常使用設備有網卡、網橋、交換機;
第1層--物理層:處於 OSI 參考模型的最底層。 物理層的主要功能是利用物理傳輸介質爲數據鏈路層提供物理鏈接,以便透明的傳送比特流。經常使用設備有(各類物理設備)集線器、中繼器、調制解調器、網線、雙絞線、同軸電纜。
數據發送時,從第七層傳到第一層,接收數據則相反。
上三層總稱應用層,用來控制軟件方面。下四層總稱數據流層,用來管理硬件。除了物理層以外其餘層都是用軟件實現的。
數據在發至數據流層的時候將被拆分。
在傳輸層的數據叫段,網絡層叫包,數據鏈路層叫幀,物理層叫比特流,這樣的叫法叫 PDU (協議數據單元)。
(三) 各層功能詳述:
(1) 物理層 (Physical Layer)
物理層是 OSI 參考模型的最低層,它利用傳輸介質爲數據鏈路層提供物理鏈接。它主要關心的是經過物理鏈路從一個節點向另外一個節點傳送比特流,物理鏈路多是銅線、衛星、微波或其餘的通信媒介。它關心的問題有:多少伏電壓表明 1 ?多少伏電壓表明 0 ?時鐘速率是多少?採用全雙工仍是半雙工傳輸?總的來講物理層關心的是鏈路的機械、電氣、功能和規程特性。
(2) 數據鏈路層 (Data Link Layer)
數據鏈路層是爲網絡層提供服務的,解決兩個相鄰結點之間的通訊問題,傳送的協議數據單元稱爲數據幀。
數據幀中包含物理地址(又稱 MAC 地址)、控制碼、數據及校驗碼等信息。該層的主要做用是經過校驗、確認和反饋重發等手段,將不可靠的物理鏈路轉換成對網絡層來講無差錯的數據鏈路。
此外,數據鏈路層還要協調收發雙方的數據傳輸速率,即進行流量控制,以防止接收方因來不及處理髮送方來的高速數據而致使緩衝器溢出及線路阻塞。
(3) 網絡層 (Network Layer)
網絡層是爲傳輸層提供服務的,傳送的協議數據單元稱爲數據包或分組。該層的主要做用是解決如何使數據包經過各結點傳送的問題,即經過路徑選擇算法(路由)將數據包送到目的地。另外,爲避免通訊子網中出現過多的數據包而形成網絡阻塞,須要對流入的數據包數量進行控制(擁塞控制)。當數據包要跨越多個通訊子網才能到達目的地時,還要解決網際互連的問題。
(4) 傳輸層 (Transport Layer)
傳輸層的做用是爲上層協議提供端到端的可靠和透明的數據傳輸服務,包括處理差錯控制和流量控制等問題。該層向高層屏蔽了下層數據通訊的細節,使高層用戶看到的只是在兩個傳輸實體間的一條主機到主機的、可由用戶控制和設定的、可靠的數據通路。
傳輸層傳送的協議數據單元稱爲段或報文。
(5) 會話層 (Session Layer)
會話層主要功能是管理和協調不一樣主機上各類進程之間的通訊(對話),即負責創建、管理和終止應用程序之間的會話。會話層得名的緣由是它很相似於兩個實體間的會話概念。例如,一個交互的用戶會話以登陸到計算機開始,以註銷結束。
(6) 表示層 (Presentation Layer)
表示層處理流經結點的數據編碼的表示方式問題,以保證一個系統應用層發出的信息可被另外一系統的應用層讀出。若是必要,該層可提供一種標準表示形式,用於將計算機內部的多種數據表示格式轉換成網絡通訊中採用的標準表示形式。數據壓縮和加密也是表示層可提供的轉換功能之一。
(7) 應用層 (Application Layer)
應用層是 OSI 參考模型的最高層,是用戶與網絡的接口。該層經過應用程序來完成網絡用戶的應用需求,如文件傳輸、收發電子郵件等。
(四) 數據封裝過程:
每層封裝後的數據單元的叫法不一樣,在應用層、表示層、會話層的協議數據單元統稱爲data(數據),在傳輸層協議數據單元稱爲segment(數據段),在網絡層稱爲packet(數據包),數據鏈路層協議數據單元稱爲frame(數據幀),在物理層叫作bits(比特流)。nginx
A類IP地址範圍從1.0.0.0 到126.0.0.0。可用的A類網絡有126個。
B類IP地址範圍從128.0.0.0到191.255.255.255。可用的B類網絡有16382個 。
C類IP地址範圍從192.0.0.0到223.255.255.255。C類網絡可達209萬餘個。
D類地址用於多點廣播(Multicast)。 D類IP地址第一個字節以「lll0」開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。
E類IP地址以「llll0」開始,爲未來使用保留。web
(1) Client最大Tcp鏈接數:
Client每次發起Tcp鏈接請求時,除非綁定端口,一般會讓系統選取一個空閒的本地端口(local port),該端口是獨佔的,不能和其餘Tcp鏈接共享。Tcp端口的數據類型是unsigned short,所以本地端口個數最大隻有65536,端口0有特殊含義,不能使用,這樣可用端口最多隻有65535,因此在所有做爲Client端的狀況下,一個Client最大Tcp鏈接數爲65535,這些鏈接能夠連到不一樣的server ip。
(2) Server最大Tcp鏈接數:
Server一般固定在某個本地端口上監聽,等待client的鏈接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的狀況下,即便server端有多個ip,本地監聽端口也是獨佔的,所以server端tcp鏈接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,所以最大tcp鏈接爲客戶端ip數×客戶端port數,對IPV4,不考慮ip地址分類等因素,最大tcp鏈接數約爲2的32次方(ip數)×2的16次方(port數),也就是server端單機最大tcp鏈接數約爲2的48次方。
(3) 實際的Tcp鏈接數:
上面給出的是理論上的單機最大鏈接數,在實際環境中,受到機器資源、操做系統等的限制,特別是sever端,其最大併發tcp鏈接數遠不能達到理論上限。在unix/linux下限制鏈接數的主要因素是內存和容許的文件描述符個數(每一個tcp鏈接都要佔用必定內存,每一個socket就是一個文件描述符),另外1024如下的端口一般爲保留端口。
對server端,經過增長內存、修改最大文件描述符個數等參數,單機最大併發TCP鏈接數超過10萬, 甚至上百萬是沒問題的,國外 Urban Airship 公司在產品環境中已作到 50萬併發 。在實際應用中,對大規模網絡應用,還須要考慮C10K ,c100k問題。算法
什麼是長鏈接?
其實長鏈接是相對於一般的短鏈接而說的,也就是長時間保持客戶端與服務端的鏈接狀態。
一般的短鏈接操做步驟是:
鏈接-》數據傳輸-》關閉鏈接;
而長鏈接一般就是:
鏈接-》數據傳輸-》保持鏈接-》數據傳輸-》保持鏈接-》…………-》關閉鏈接;
這就要求長鏈接在沒有數據通訊時,定時發送數據包,以維持鏈接狀態,短鏈接在沒有數據傳輸時直接關閉就好了。
何時用長鏈接,短鏈接?
長鏈接主要用於在少數客戶端與服務端的頻繁通訊,由於這時候若是用短鏈接頻繁通訊常會發生Socket出錯,而且頻繁建立Socket鏈接也是對資源的浪費。
長鏈接多用於操做頻繁,點對點的通信,且鏈接數不能太多的狀況。 數據庫的鏈接通常都用長鏈接。smtp,pop3,telnet這種就能夠認爲是長鏈接。通常的網絡遊戲應用都是長鏈接。
短鏈接多用於併發量大,可是每一個用戶又不需頻繁操做的狀況。web網站的http服務通常都用短鏈接。http 1.0通常就指短鏈接。
可是對於服務端來講,長鏈接也會耗費必定的資源,須要專門的線程(unix下能夠用進程管理)來負責維護鏈接狀態。
總之,長鏈接和短鏈接的選擇要視狀況而定。sql
select和epoll這兩個機制都是多路I/O機制的解決方案,select爲POSIX標準中的,而epoll爲Linux所特有的。
epoll的最大好處是不會隨着FD的數目增加而下降效率,在select中採用輪詢處理,其中的數據結構相似一個數組的數據結構,而epoll是維護一個隊列,直接看隊列是否是空就能夠了。
nginx就是使用epoll來實現I/O複用支持高併發,目前在高併發的場景下,nginx愈來愈收到歡迎。
select的一個缺點在於單個進程可以監視的文件描述符的數量存在最大限制。
epoll:
(1) IO的效率不會隨着監視fd的數量的增加而降低。epoll不一樣於select和poll輪詢的方式,而是經過每一個fd定義的回調函數來實現的。只有就緒的fd纔會執行回調函數;
(2) 支持電平觸發和邊沿觸發(只告訴進程哪些文件描述符剛剛變爲就緒狀態,它只說一遍,若是咱們沒有采起行動,那麼它將不會再次告知,這種方式稱爲邊緣觸發)兩種方式,理論上邊緣觸發的性能要更高一些,可是代碼實現至關複雜。
(3) 有着良好的就緒事件通知機制。
select:
(1) 單個進程可監視的fd數量受到了限制,在32位機器上,他所能管理的fd數量最大爲1024;
(2) 對socket進行掃描時是線性掃描,當socket文件描述符數量變多時,大量的時間是被白白浪費掉的。
poll的實現和select很是類似,只是描述fd集合的方式不一樣,poll使用pollfd結構而不是select的fd_set結構,其餘的都差很少。數據庫
當一個基於TCP/IP的應用程序須要從一臺主機發送數據給另外一臺主機時,它把信息分割並封裝成包,附上目的主機的IP地址。而後,尋找IP地址到實際MAC地址的映射,這須要發送ARP廣播消息。當ARP找到了目的主機MAC地址後,就能夠造成待發送幀的完整以太網幀頭。最後,協議棧將IP包封裝到以太網幀中進行傳送。
當主機A要和主機B通訊(如主機A Ping主機B)時。主機A會先檢查其ARP緩存內是否有主機B的MAC地址。若是沒有,主機A會發送一個ARP請求廣播包,此包內包含着其欲與之通訊的主機的IP地址,也就是主機B的IP地址。
當主機B收到此廣播後,會將本身的MAC地址利用ARP協議響應包傳給主機A,並更新本身的ARP緩存,也就是同時將主機A的IP地址/MAC地址對保存起來,以供後面使用。主機A在獲得主機B的MAC地址後,就能夠與主機B通訊了。同時,主機A也將主機B的IP地址/MAC地址對保存在本身的ARP協議緩存內。數組
流量劫持經常使用的手段有以下:
Hub嗅探, MAC欺騙, MAC沖刷, ARP攻擊, DHCP釣魚, DNS劫持, CDN入侵, 路由器弱口令, 路由器CSRF, PPPoE釣魚, 蜜罐代理, WiFi 弱口令, WiFi僞熱點, WiFi強制斷線, WLAN基站釣魚。緩存
生存時間(TTL):長度8比特, 最大值爲255。當IP包進行傳送時,先會對該字段賦予某個特定的值。用來控制數據報在網絡中存在的時間。目前TTL的值並不表明時間,而是表明經由路由器的個數。數據報每通過一臺路由器時,路由器將TTL值減1,一旦TTL=0,系統就丟棄該數據報,並返回錯誤信息。這樣避免了路由出現環路時數據報在路由器之間無休止地循環。安全
集線器的英文稱爲「Hub」。「Hub」是「中心」的意思,集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把全部節點集中在以它爲中心的節點上。它工做於OSI(開放系統互聯參考模型)參考模型第一層,即「物理層」。集線器與網卡、網線等傳輸介質同樣,屬於局域網中的基礎設備,採用CSMA/CD(即帶衝突檢測的載波監聽多路訪問技術)介質訪問控制機制。集線器每一個接口簡單的收發比特,收到1就轉發1,收到0就轉發0,不進行碰撞檢測。
集線器(hub)屬於純硬件網絡底層設備,基本上不具備相似於交換機的"智能記憶"能力和"學習"能力。它也不具有交換機所具備的MAC地址表,因此它發送數據時都是沒有針對性的,而是採用廣播方式發送。也就是說當它要向某節點發送數據時,不是直接把數據發送到目的節點,而是把數據包發送到與集線器相連的全部節點。
(1) TCP SYN泛洪:
對於TCP協議,當客戶端向服務器發起鏈接請求並初始化時,服務器一端的協議棧會留一塊緩衝區來處理「握手」過程當中的信息交換。請求創建鏈接時發送的數據包的包頭SYN位就代表了數據包的順序,攻擊者能夠利用在短期內快速發起大量鏈接請求,以至服務器來不及響應。同時攻擊者還能夠僞造源IP 地址。也就是說攻擊者發起大量鏈接請求,而後掛起在半鏈接狀態,以此來佔用大量服務器資源直到拒絕服務。雖然緩衝區中的數據在一段時間內(一般是三分鐘)都沒有迴應的話,就會被丟棄,但在這段時間內,大量半鏈接足以耗盡服務器資源。
(2) TCP LAND:
LAND攻擊利用了TCP鏈接創建的三次握手過程,經過向一個目標主機發送一個用於創建請求鏈接的TCP SYN報文而實現對目標主機的攻擊。與正常的TCP SYN報文不一樣的是:LAND攻擊報文的源IP地址和目的IP地址是相同的,都是目標主機的IP地址。這樣目標主機接在收到這個SYN 報文後,就會向該報文的源地址發送一個ACK報文,並創建一個TCP鏈接控制結構,而該報文的源地址就是本身。因爲目的IP地址和源IP地址是相同的,都是目標主機的IP地址,所以這個ACK 報文就發給了目標主機自己。
(1) ARP欺騙攻擊:分爲對路由器ARP表的欺騙和對內網PC的網關欺騙。 第一種ARP欺騙的原理是—截獲網關數據。 第二種ARP欺騙的原理是— 僞造網關。
(2) 重放攻擊:重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊或新鮮性攻擊(FreshnessAttacks)是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。
(3) 暴力攻擊:暴力破解攻擊是指攻擊者經過系統地組合全部可能性(例如登陸時用到的帳戶名、密碼),嘗試全部的可能性破解用戶的帳戶名、密碼等敏感信息。攻擊者會常用自動化腳本組合出正確的用戶名和密碼。
(4) DNS欺騙攻擊:DNS欺騙就是攻擊者冒充域名服務器的一種欺騙行爲。 若是能夠冒充域名服務器,而後把查詢的IP地址設爲攻擊者的IP地址。
(1) sqlserver默認端口號爲:1433
URL:"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname";
DRIVERNAME:"com.microsoft.jdbc.sqlserver.SQLServerDriver";
(2) mysql默認端口號爲:3306
URL:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk;
DRIVERNAME:"com.mysql.jdbc.Driver";
(3) oracle默認端口號爲:1521
URL:"jdbc:oracle:thin:@localhost:1521:orcl";
DRIVERNAME:"oracle.jdbc.driver.OracleDriver";