操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    roduction-Grade Container Orchestration - Automated container deployment, scaling, and management.生產級別的容器編排系統——自動化的容器部署、擴展和管理。

    1. 引言

    由于最近在學習微服務,所以就基于之前docker的基礎上把玩一下k8s(Kubernetes),以了解基本概念和核心功能。

    2. What's k8s?

    k8s涉及到很多基本概念,可以看十分鐘帶你理解Kubernetes核心概念快速了解。下面這張圖包含了k8s了核心組成模塊:

    這里就簡單羅列一下:

    1. k8s Master:k8s主節點,主要包括:
    • API Server:提供可以用來和集群交互的REST端點。
    • Replication Controller:用來創建和復制Pod。
    1. Node:k8s節點,可以是虛擬機或物理機。其又包含以下組件:
    • Kubelet:是主節點代理。
    • Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。
    • Docker或Rocket:Kubernetes使用的容器技術來創建容器。
    1. Pod:用來托管應用程序實例,包含:
    • Container:運行的容器
    • Volume:共享存儲 (卷)
    • IP Address:IP 地址
    1. Labels:標簽,用于給pod打標簽
    2. Service:服務,由一組相同Label的Pod組成,其用來控制訪問Pods的策略

    3. 環境準備

    梳理完基本概念,我們來動手玩一玩吧。有三種玩法:一種就是跟隨k8s官方的在線實驗室進行實操;第二種就是基于Docker For Windows 中集成的k8s進行玩耍;第三種就是安裝MiniKube搗鼓。這里選擇第二種進行講解。

    PS:很多初學者在環境準備階段遭遇挫折的后就直接放棄了,筆者為了搭建這個k8s環境也耗費了不少時日,其中包含一次重裝系統,汗!希望下面的步驟助你k8s之行有個好的開端。

    3.1. 在Docker for Windows中啟用Kubernetes

    首先確保你已安裝Docker for Windows。因為那道墻,在Docker For Windows Client中啟用Kubernetes,并沒有想象的那么順利。最后參照這篇文章成功啟用:為中國用戶在 Docker for Mac/Windows 中開啟 Kubernetes。如果安裝了最新版本的docker for windows 客戶端(v2.0.0.3),可參考以下步驟:

    1. 為 Docker daemon 配置 Docker Hub 的中國官方鏡像加速 https://registry.docker-cn.com
    2. git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git
    3. cd k8s-for-docker-desktop
    4. git checkout v2.0.0.2 (這一步很重要!!!)
    5. Powell shell執行./load_images.ps1
    6. Enable Kubernetes
    7. 執行kubectl cluster-info,輸出以下,表示正常啟動。
    Kubernetes master is running at https://localhost:6445
    KubeDNS is running at https://localhost:6445/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    

    環境搭建成功,你就成功了一半,請再接再厲動手完成以下實驗!

    4. 運行第一個Pod

    4.1. 創建初始鏡像

    1:首先我們執行dotnet new mvc -n K8s.NET.Demo 創建一個ASP.NET Core Mvc應用K8s.NET.Demo修改HomeController如下所示:

    public class HomeController : Controller {
        public IActionResult Index () {
            var hostname = Dns.GetHostName ();
            ViewBag.HostName = hostname;
            ViewBag.HostIp = Dns.GetHostAddresses (hostname).FirstOrDefault (ip => ip.AddressFamily == AddressFamily.InterNetwork);
            return View ();
        }
        public IActionResult Privacy () {
            return View ();
        }
        public IActionResult CheckHealth () {
            if (new Random ().Next (100) > 50) {
                return Ok ("OK");
            } else {
                return BadRequest ();
            }
        }
        [ResponseCache (Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error () {
            return View (new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
    

    修改Index.cshtml如下:

    @{
        ViewData["Title"] = "Home Page";
    }
    <div class="text-center">
        <h1 class="display-4">Welcome</h1>
        <h1>Host Name:@ViewBag.HostName</h1>
        <h1>Host IP:@ViewBag.HostIp</h1>
        <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
    </div>
    

    2:然后添加Dockerfile:

    FROM microsoft/dotnet:sdk AS build-env
    WORKDIR /app
    
    # Copy csproj and restore as distinct layers
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy everything else and build
    COPY . ./
    RUN dotnet publish -c Release -o out
    
    # Build runtime image
    FROM microsoft/dotnet:aspnetcore-runtime
    WORKDIR /app
    COPY --from=build-env /app/out .
    ENTRYPOINT ["dotnet", "K8s.NET.Demo.dll"]
    

    3:然后執行docker build -t k8s.net.demo .構造鏡像,構造成功后執行docker images即可查看到名為k8s.net.demo的鏡像。

    4.2. 創建 pod 描述文件

    添加k8s-web-pod.yaml文件如下:

    apiVersion: v1
    kind: Pod # 定義Kubernetes資源的類型為Pod
    metadata:
      name: k8s-net-pod # 定義資源的名稱
      labels: # 為Pod貼上標簽,后面會介紹其用處
        app: k8s-net-pod
    spec: # 定義資源的狀態,對于Pod來說,最重要屬性就是containers
      containers: # containers一個數組類型,如果你希望部署多個容器,可以添加多項
        - name: web # 定義本Pod中該容器的名稱
          image: k8s.net.demo # 定義Pod啟動的容器鏡像地址
          imagePullPolicy: IfNotPresent # k8s默認值為Always,總是從遠端拉取鏡像,通過設置IfNotPresent或Never來使用本地鏡像
          ports:
            - containerPort: 80 # 定義容器監聽的端口(與Dockerfile中的EXPOSE類似,只是為了提供文檔信息)
          livenessProbe: # 存活探針定義
            httpGet:
              path: /Home/CheckHealth # 存活探針請求路徑
              port: 80 #存活探針請求端口
    

    4.3. 使用kubectl create 創建 pod

    執行以下命令完成pod的創建:

    $ kubectl create -f k8s-web-pod.yaml
    pod "k8s-web-pod.yaml" created
    $ kubectl get pod
    NAME           READY     STATUS    RESTARTS   AGE
    k8s-net-pod   1/1       Running   0         1m
    

    4.4. 訪問 pod 中運行的容器

    要想與 pod 進行通信,可以通過kubectl port-forward配置端口轉發,來完成。

    $ kubectl port-forward k8s-net-pod 8090:80
    Forwarding from 127.0.0.1:8090 -> 80
    Forwarding from [::1]:8090 -> 80
    

    瀏覽器訪問http://localhost:8090/,效果如下圖所示:

    至此我們成功跑起了第一個pod。

    這時你可能會問,這和我直接用docker run -d -p 8091:80 k8s.net.demo 運行一個容器有什么區別呢?并沒有看到k8s強大在哪里啊?!別急,你現在再執行一次kubectl get pod,我來告訴你答案。

    $ kubectl get po
    NAME           READY     STATUS    RESTARTS   AGE
    k8s-net-pod   1/1       Running   17         1h
    

    看到RESTARTS列沒有,它是用來說明pod重啟了多少次。使用docker運行容器,如果容器掛掉,docker是不會負責給你重啟容器的。而在k8s中,只需要配置存活探針,k8s就會自動探測容器的運行狀態,進行自動重啟。而存活探針僅需要在yaml文件中指定livenessProbe節點即可。(PS:/home/checkhealth 使用隨機數來模擬容器應用運行狀態,當隨機數小于50,就返回BadRequest。)

    而這,只是k8s的冰山一角。

    5. 運行第一個 Service

    Pod運行于集群內部,雖然使用kubect port-forward可以映射端口在本機訪問,但對于外部依舊無法訪問,如果需要暴露供外部直接訪問,則需要創建 service。

    5.1. 使用 kubectl expose 創建 service

    我們可以通過kubectl expose pod直接將當前運行的pod實例暴露出去。

    $ kubectl expose pod k8s-net-pod --name k8s-net-service --type=NodePort
    service "k8s-net-service" exposed
    $ kubectl get service
    NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    k8s-net-service    NodePort    10.98.62.192    <none>        80:30942/TCP   7m
    

    如上,它有一個CLUSTER-IP為10.98.62.192,因此我們可以在集群內使用10.98.62.192:80來訪問該服務,如果是在集群外部,可以使用NodeIP:30942(節點所在服務器IP)來訪問。

    5.2. 使用 servive 描述文件創建

    另外一種方式就是創建描述文件來創建了,添加k8s-net-service.yaml文件:

    apiVersion: v1
    kind: Service # 定義Kubernetes資源的類型為Service
    metadata:
      name: k8s-net-service # 定義資源的名稱
    spec:
      selector: # 指定對應的Pod
        app: k8s-net-pod # 指定Pod的標簽為k8s-net-pod
      ports:
      - protocol: TCP # 協議類型
        port: 80 # 指定Service訪問的端口
        targetPort: 80 # 指定Service轉發請求的端口
        nodePort: 30000
      type: NodePort # 指定Service的類型,在這里使用NodePort來對外訪問
    

    執行kubectl create -f k8s-net-service.yaml來創建service。

    $ kubectl create -f k8s-net-service.yaml
    service "k8s-net-service" created
    $ kubectl get service
    NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    k8s-net-service   NodePort    10.98.62.192    <none>        80:30942/TCP   23m
    k8s-net-service   NodePort    10.97.110.150   <none>        80:30000/TCP   34s
    kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        1d
    

    6. 試試 k8s 的自由伸縮

    是時候來體驗下k8s強大的自動伸縮功能了。k8s中通過創建ReplicaSet或Deployment來管理 pod,進而完成自動化擴展和管理。PS: 也可以使用ReplicaController,但推薦使用ReplicaSet,因為其標簽匹配功能更強大。

    6.1. 運行第一個 ReplicaSet

    首先定義 ReplicaSet 描述文件k8s-net-replicaset.yaml:

    apiVersion: apps/v1beta2 # rs 的版本號為apps/v1beta2
    kind: ReplicaSet # 定義Kubernetes資源的類型為ReplicaSet
    metadata:
      name: k8s-net-replicaset # 定義資源的名稱
    spec:
      replicas: 3 # 指定pod實例的個數
      selector: # pod選擇器
        matchLabels: # 指定匹配的標簽
          app: k8s-net-pod # 指定Pod的標簽為k8s-net-pod
      template: # 創建新的pod模板配置
        metadata:
          labels:
            app: k8s-net-pod # 指定使用哪個pod
        spec:
          containers:
          - name: k8s-net-replicaset
            image: k8s.net.demo # 指定使用的鏡像 
            imagePullPolicy: IfNotPresent # k8s默認值為Always,總是從遠端拉取鏡像,通過設置IfNotPresent或Never來使用本地鏡像
    

    執行以下命令創建 ReplicaSet,并觀察自動創建的pod實例。

    $ kubectl create -f k8s-net-replicaset.yaml
    replicaset.apps "k8s-net-replicaset" created
    $ kubectl get rs
    NAME                 DESIRED   CURRENT   READY     AGE
    k8s-net-replicaset   3         3         3         8s
    $ kubectl get pod
    NAME                       READY     STATUS    RESTARTS   AGE
    k8s-net-pod                1/1       Running   61         12h
    k8s-net-replicaset-bxw9c   1/1       Running   0          35s
    k8s-net-replicaset-k6kf7   1/1       Running   0          35s
    $ kubectl delete po k8s-net-replicaset-bxw9c
    pod "k8s-net-replicaset-bxw9c" deleted
    $ kubectl get po
    NAME                       READY     STATUS        RESTARTS   AGE
    k8s-net-pod                1/1       Running       61         12h
    k8s-net-replicaset-bxw9c   0/1       Terminating   0          2m
    k8s-net-replicaset-k6kf7   1/1       Running       0          2m
    k8s-net-replicaset-xvb9l   1/1       Running       0          6s
    

    從上面看到,k8s-net-replicaset以k8s-net-pod為模板創建了額外兩個pod副本,當我們嘗試刪除其中一個副本后,再次查看pod列表,replicaset會自動幫我們重新創建一個pod。那我們嘗試把剛創建的k8s-net-replicaset暴露為Service,看看實際運行是什么效果吧。依次執行以下命令:

    $ kubectl expose replicaset k8s-net-replicaset --type=LoadBalancer --port=8091 --target-port=80 --name k8s-net-rs
    -service
    service "k8s-net-rs-service" exposed
    $ kubectl get service
    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    k8s-net-rs-service   LoadBalancer   10.99.134.237   localhost     8091:32641/TCP   8s
    k8s-net-service      NodePort       10.104.21.80    <none>        80:30000/TCP     12h
    kubernetes           ClusterIP      10.96.0.1       <none>        443/TCP          12h
    

    然后瀏覽器訪問http://localhost:8091/,嘗試多次刷新瀏覽器,顯示效果如下,我們發現ReplicaSet已幫我們做好了負載均衡。

    假如現在網站訪問量劇增,3個實例仍然無法有效支撐,可以不停止應用的情況下做到水平伸縮嗎?Of course, Yes!僅需執行kubectl scale命令進行擴展即可。

    $ kubectl get pod
    NAME                       READY     STATUS    RESTARTS   AGE
    k8s-net-replicaset-g4n6g   1/1       Running   0          13m
    k8s-net-replicaset-lkrf7   1/1       Running   0          13m
    k8s-net-replicaset-tf992   1/1       Running   0          13m
    $ kubectl scale replicaset k8s-net-replicaset --replicas=6
    replicaset.extensions "k8s-net-replicaset" scaled
    $ kubectl get pod
    NAME                       READY     STATUS              RESTARTS   AGE
    k8s-net-replicaset-cz2bs   0/1       ContainerCreating   0          3s
    k8s-net-replicaset-g4n6g   1/1       Running             0          13m
    k8s-net-replicaset-lkrf7   1/1       Running             0          13m
    k8s-net-replicaset-pjl9m   0/1       ContainerCreating   0          3s
    k8s-net-replicaset-qpn2l   0/1       ContainerCreating   0          3s
    k8s-net-replicaset-tf992   1/1       Running             0          13m
    

    從以上的輸出可以看,我們一句命令就擴展pod實例到6個,是不是很簡單?!

    你可能又問了,我現在訪問高峰過了,我怎么快速縮放應用呢?啊,和上面一樣的,你把--replicas參數改小點就是了,就像這樣kubectl scale replicaset k8s-net-replicaset --replicas=3。

    7. 最后

    本文從使用docker創建image,到使用k8s創建第一個pod,到暴露第一個Service,再到使用ReplicaSet 進行容器伸縮,基本串通了k8s的核心基礎概念,從而對k8s有了基礎的認知,希望對你的K8S之路有所幫助。

    由于篇幅有限,筆者也是初玩,k8s的很多功能并未一一羅列,那就留著下次分享吧。如果要問我,k8s有什么好書推薦,首推《Kubernetes In Action》,國內已經有中文版了,翻譯的不錯!本文示例代碼已上傳至GitHub:https://github.com/sheng-jie/K8S.NET.Demo。


    原文地址:https://www.cnblogs.com/sheng-jie/p/10591794.html

    網絡是非常非常重要的功能,如今,不管我們使用手機,電腦,平臺等等,都離不開網絡。對于Linux開發或者運維人員來說,檢測網絡,如何配置網絡,以確保網絡的正常工作,是非常非常重要的,比如,你在維護一個基于Linux的服務器,那這個服務器的網路情況,狀態,性能等,都是你必須要關注的,當網絡出現問題時,你也需要使用各種工具和命令去排查網絡問題。Linux下,網絡相關的命令非常多,我這邊只是介紹幾個我覺得比較常用的命令。如果你是運維管理人員,可能需要學習更多的網絡知識和命令,這里,就先看幾個比較常用的的網絡命令。

    以下內容多摘抄自網絡,并稍作整理,如有侵權,請聯系我刪除。謝謝!

    • ifconfig:命令用于顯示或設置網絡設備
    • netstat :命令用于顯示網絡狀態
    • ping :命令用于網絡是否連通的命令
    • iperf:一個網絡性能測試工具

    在Ubuntu下,有些命令默認是沒有的,需要安裝net-tools軟件包,按照如下方式安裝:

    #apt-get install net-tools

    1) ifconfig:命令用于顯示或設置網絡設備

    描述

    Linux ifconfig命令用于顯示或設置網絡設備。

    ifconfig可設置網絡設備的狀態,或是顯示目前的設置。

    語法

    ifconfig [網絡設備][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<網絡設備類型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<網絡媒介類型>][mem_start<內存地址>][metric<數目>][mtu<字節>][netmask<子網掩碼>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

    參數

    參數說明

    • add<地址> 設置網絡設備IPv6的IP地址。
    • del<地址> 刪除網絡設備IPv6的IP地址。
    • down 關閉指定的網絡設備。
    • <hw<網絡設備類型><硬件地址> 設置網絡設備的類型與硬件地址。
    • io_addr<I/O地址> 設置網絡設備的I/O地址。
    • irq<IRQ地址> 設置網絡設備的IRQ。
    • media<網絡媒介類型> 設置網絡設備的媒介類型。
    • mem_start<內存地址> 設置網絡設備在主內存所占用的起始地址。
    • metric<數目> 指定在計算數據包的轉送次數時,所要加上的數目。
    • mtu<字節> 設置網絡設備的MTU。
    • netmask<子網掩碼> 設置網絡設備的子網掩碼。
    • tunnel<地址> 建立IPv4與IPv6之間的隧道通信地址。
    • up 啟動指定的網絡設備。
    • -broadcast<地址> 將要送往指定地址的數據包當成廣播數據包來處理。
    • -pointopoint<地址> 與指定地址的網絡設備建立直接連線,此模式具有保密功能。
    • -promisc 關閉或啟動指定網絡設備的promiscuous模式。
    • [IP地址] 指定網絡設備的IP地址。
    • [網絡設備] 指定網絡設備的名稱。

    實例

    顯示網絡設備信息:

    eth0就是你設備上的網卡,這里面包含了各種信息,比如網卡的MAC地址是00:50:56:0A:0B:0C(MAC地址是每個網卡唯一的標識符,是不會變的),IP地址是192.168.0.3。

    lo通常被稱為本地回環地址(Loop back address),不屬于任何一個有類別地址類。它代表設備的本地虛擬接口,IP就是127.0.0.1,代表本機,所以默認被看作是永遠不會宕掉的接口。如果你再本機上ping 127.0.0.1,始終是通的。如果你在瀏覽器中訪問127.0.0.1,就是訪問本機的web服務(如果你機器上有web服務的話)。

    (ifconfig版本不同,可能顯示的信息也會稍有不同)

    # ifconfig
    eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
    inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
    TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
    Interrupt:185 Base address:0x2024
    
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
    TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)

    啟動關閉指定網卡

    # ifconfig eth0 down //關閉網卡
    # ifconfig eth0 up  //啟動網卡

    為網卡配置和刪除IPv6地址

    # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //為網卡設置IPv6地址
    # ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //為網卡刪除IPv6地址

    用ifconfig修改MAC地址,前面提到過,MAC地址是網卡唯一的,一般來說,是沒有必要去修改,網卡廠商已經將MAC地址燒錄在硬件上了,但有些網卡也提供了修改MAC地址的功能,但你修改時,一定要主要,這個網卡地址的唯一的,否則可能造成網絡通信的問題。

    # ifconfig eth0 down //關閉網卡
    # ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
    # ifconfig eth0 up //啟動網卡
    # ifconfig eth1 hw ether 00:1D:1C:1D:1E //關閉網卡并修改MAC地址 
    # ifconfig eth1 up //啟動網卡

    配置IP地址

    # ifconfig eth0 192.168.1.56 //給eth0網卡配置IP地址
    # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 // 給eth0網卡配置IP地址,并加上子掩碼
    # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255// 給eth0網卡配置IP地址,加上子掩碼,加上個廣播地址

    設置最大傳輸單元:

    # ifconfig eth0 mtu 1500 //設置能通過的最大數據包大小為 1500 bytes

    最大傳輸單元(Maximum Transmission Unit)是指一種通信協議的某一層上面所能通過的最大數據包大小(以字節為單位)。
    我們在使用互聯網時進行的各種網絡操作,都是通過一個又一個“數據包”傳輸來實現的。而MTU指定了網絡中可傳輸數據包的最大尺寸,在我們常用的以太網中,MTU是1500字節,超過此大小的數據包就會將多余的部分拆分再單獨傳輸 。
    MTU的設置不是一個值天下通用,所以需要我們合理設置特殊場景的MTU 。

    MTU值的合理性原則:

    a.本地MTU值大于網絡MTU值時,本地傳輸的數據包過大導致網絡會拆包后傳輸,不但產生額外的數據包,而且消耗了“拆包、組包”的時間 。

    b.本地MTU值小于網絡MTU值時,本地傳輸的數據包可以直接傳輸,但是未能完全利用網絡給予的數據包傳輸尺寸的上限值,傳輸能力未完全發揮 。

    因此所謂合理的設置MTU值,就是讓本地的MTU值與網絡的MTU值一致,既能完整發揮傳輸性能,又不讓數據包拆分。能提高網絡的傳輸能力,還能減低CPU的負載。

    2) netstate:用于顯示網絡狀態

    描述

    Linux netstat 命令用于顯示網絡狀態。

    利用 netstat 指令可讓你得知整個 Linux 系統的網絡情況。


    語法

    netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]

    參數

    • -a或--all 顯示所有連線中的Socket。
    • -A<網絡類型>或--<網絡類型> 列出該網絡類型連線中的相關地址。
    • -c或--continuous 持續列出網絡狀態。
    • -C或--cache 顯示路由器配置的快取信息。
    • -e或--extend 顯示網絡其他相關信息。
    • -F或--fib 顯示路由緩存。
    • -g或--groups 顯示多重廣播功能群組組員名單。
    • -h或--help 在線幫助。
    • -i或--interfaces 顯示網絡界面信息表單。
    • -l或--listening 顯示監控中的服務器的Socket。
    • -M或--masquerade 顯示偽裝的網絡連線。
    • -n或--numeric 直接使用IP地址,而不通過域名服務器。
    • -N或--netlink或--symbolic 顯示網絡硬件外圍設備的符號連接名稱。
    • -o或--timers 顯示計時器。
    • -p或--programs 顯示正在使用Socket的程序識別碼和程序名稱。
    • -r或--route 顯示Routing Table。
    • -s或--statistics 顯示網絡工作信息統計表。
    • -t或--tcp 顯示TCP傳輸協議的連線狀況。
    • -u或--udp 顯示UDP傳輸協議的連線狀況。
    • -v或--verbose 顯示指令執行過程。
    • -V或--version 顯示版本信息。
    • -w或--raw 顯示RAW傳輸協議的連線狀況。
    • -x或--unix 此參數的效果和指定"-A unix"參數相同。
    • --ip或--inet 此參數的效果和指定"-A inet"參數相同。

    實例

    顯示詳細的網絡狀況

    # netstat -a

    顯示當前戶籍UDP連接狀況

    # netstat -nu

    顯示UDP端口號的使用情況

    # netstat -apu
    Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    udp 0 0 *:32768 *:* -
    udp 0 0 *:nfs *:* -
    udp 0 0 *:641 *:* 3006/rpc.statd
    udp 0 0 192.168.0.3:netbios-ns *:* 3537/nmbd
    udp 0 0 *:netbios-ns *:* 3537/nmbd
    udp 0 0 192.168.0.3:netbios-dgm *:* 3537/nmbd
    udp 0 0 *:netbios-dgm *:* 3537/nmbd
    udp 0 0 *:tftp *:* 3346/xinetd
    udp 0 0 *:999 *:* 3366/rpc.rquotad
    udp 0 0 *:sunrpc *:* 2986/portmap
    udp 0 0 *:ipp *:* 6938/cupsd
    udp 0 0 *:1022 *:* 3392/rpc.mountd
    udp 0 0 *:638 *:* 3006/rpc.statd

    顯示網卡列表

    # netstat -i
    Kernel Interface tableIface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
    eth0 1500 0 181864 0 0 0 141278 0 0 0 BMRU
    lo 16436 0 3362 0 0 0 3362 0 0 0 LRU

    顯示組播組的關系

    # netstat -g
    IPv6/IPv4 Group MembershipsInterface RefCnt Group--------------- ------ ---------------------
    lo 1 ALL-SYSTEMS.MCAST.NET
    eth0 1 ALL-SYSTEMS.MCAST.NET
    lo 1 ff02::1
    eth0 1 ff02::1:ff0a:b0c
    eth0 1 ff02::1

    顯示網絡統計信息

    # netstat -sIp:
    184695 total packets received
    0 forwarded
    0 incoming packets discarded
    184687 incoming packets delivered
    143917 requests sent out
    32 outgoing packets dropped
    30 dropped because of missing routeIcmp:
    676 ICMP messages received
    5 input ICMP message failed.
    ICMP input histogram:
    destination unreachable: 44
    echo requests: 287
    echo replies: 345
    304 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
    destination unreachable: 17
    echo replies: 287Tcp:
    473 active connections openings
    28 passive connection openings
    4 failed connection attempts
    11 connection resets received
    1 connections established
    178253 segments received
    137936 segments send out
    29 segments retransmited
    0 bad segments received.
    336 resets sentUdp:
    5714 packets received
    8 packets to unknown port received.
    0 packet receive errors
    5419 packets sentTcpExt:
    1 resets received for embryonic SYN_RECV sockets
    ArpFilter: 0
    12 TCP sockets finished time wait in fast timer
    572 delayed acks sent
    3 delayed acks further delayed because of locked socket
    13766 packets directly queued to recvmsg prequeue.
    1101482 packets directly received from backlog
    19599861 packets directly received from prequeue
    46860 packets header predicted
    14541 packets header predicted and directly queued to user
    TCPPureAcks: 12259
    TCPHPAcks: 9119
    TCPRenoRecovery: 0
    TCPSackRecovery: 0
    TCPSACKReneging: 0
    TCPFACKReorder: 0
    TCPSACKReorder: 0
    TCPRenoReorder: 0
    TCPTSReorder: 0
    TCPFullUndo: 0
    TCPPartialUndo: 0
    TCPDSACKUndo: 0
    TCPLossUndo: 0
    TCPLoss: 0
    TCPLostRetransmit: 0
    TCPRenoFailures: 0
    TCPSackFailures: 0
    TCPLossFailures: 0
    TCPFastRetrans: 0
    TCPForwardRetrans: 0
    TCPSlowStartRetrans: 0
    TCPTimeouts: 29
    TCPRenoRecoveryFail: 0
    TCPSackRecoveryFail: 0
    TCPSchedulerFailed: 0
    TCPRcvCollapsed: 0
    TCPDSACKOldSent: 0
    TCPDSACKOfoSent: 0
    TCPDSACKRecv: 0
    TCPDSACKOfoRecv: 0
    TCPAbortOnSyn: 0
    TCPAbortOnData: 1
    TCPAbortOnClose: 0
    TCPAbortOnMemory: 0
    TCPAbortOnTimeout: 3
    TCPAbortOnLinger: 0
    TCPAbortFailed: 3
    TCPMemoryPressures: 0

    顯示監聽的套接口

    # netstat -l
    Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 *:32769 *:* LISTEN
    tcp 0 0 *:nfs *:* LISTEN
    tcp 0 0 *:644 *:* LISTEN
    tcp 0 0 *:1002 *:* LISTEN
    tcp 0 0 *:netbios-ssn *:* LISTEN
    tcp 0 0 *:sunrpc *:* LISTEN
    tcp 0 0 vm-dev:ipp *:* LISTEN
    tcp 0 0 *:telnet *:* LISTEN
    tcp 0 0 *:601 *:* LISTEN
    tcp 0 0 *:microsoft-ds *:* LISTEN
    tcp 0 0 *:http *:* LISTEN
    tcp 0 0 *:ssh *:* LISTEN
    tcp 0 0 *:https *:* LISTEN
    udp 0 0 *:32768 *:*
    udp 0 0 *:nfs *:*
    udp 0 0 *:641 *:*
    udp 0 0 192.168.0.3:netbios-ns *:*
    udp 0 0 *:netbios-ns *:*
    udp 0 0 192.168.0.3:netbios-dgm *:*
    udp 0 0 *:netbios-dgm *:*
    udp 0 0 *:tftp *:*
    udp 0 0 *:999 *:*
    udp 0 0 *:sunrpc *:*
    udp 0 0 *:ipp *:*
    udp 0 0 *:1022 *:*
    udp 0 0 *:638 *:* Active UNIX domain sockets (only servers)Proto RefCnt Flags Type State I-Node Path
    unix 2 [ ACC ] STREAM LISTENING 10621 @/tmp/fam-root-
    unix 2 [ ACC ] STREAM LISTENING 7096 /var/run/acpid.socket
    unix 2 [ ACC ] STREAM LISTENING 9792 /tmp/.gdm_socket
    unix 2 [ ACC ] STREAM LISTENING 9927 /tmp/.X11-unix/X0
    unix 2 [ ACC ] STREAM LISTENING 10489 /tmp/ssh-lbUnUf4552/agent.4552
    unix 2 [ ACC ] STREAM LISTENING 10558 /tmp/ksocket-root/kdeinit__0
    unix 2 [ ACC ] STREAM LISTENING 10560 /tmp/ksocket-root/kdeinit-:0
    unix 2 [ ACC ] STREAM LISTENING 10570 /tmp/.ICE-unix/dcop4664-1270815442
    unix 2 [ ACC ] STREAM LISTENING 10843 /tmp/.ICE-unix/4735
    unix 2 [ ACC ] STREAM LISTENING 10591 /tmp/ksocket-root/klauncherah3arc.slave-socket
    unix 2 [ ACC ] STREAM LISTENING 7763 /var/run/iiim/.iiimp-unix/9010
    unix 2 [ ACC ] STREAM LISTENING 11047 /tmp/orbit-root/linc-1291-0-1e92c8082411
    unix 2 [ ACC ] STREAM LISTENING 11053 /tmp/orbit-root/linc-128e-0-dc070659cbb3
    unix 2 [ ACC ] STREAM LISTENING 8020 /var/run/dbus/system_bus_socket
    unix 2 [ ACC ] STREAM LISTENING 58927 /tmp/mcop-root/vm-dev-2c28-4beba75f
    unix 2 [ ACC ] STREAM LISTENING 7860 /tmp/.font-unix/fs7100
    unix 2 [ ACC ] STREAM LISTENING 7658 /dev/gpmctl
    unix 2 [ ACC ] STREAM LISTENING 10498 @/tmp/dbus-s2MLJGO5Ci

    3) ping:用于檢測主機

    描述

    Linux ping 命令用于檢測主機。

    執行 ping 指令會使用 ICMP 傳輸協議,發出要求回應的信息,若遠端主機的網絡功能沒有問題,就會回應該信息,因而得知該主機運作正常。

    語法

    ping [-dfnqrRv][-c<完成次數>][-i<間隔秒數>][-I<網絡界面>][-l<前置載入>][-p<范本樣式>][-s<數據包大小>][-t<存活數值>][主機名稱或IP地址]

    參數

    • -d 使用Socket的SO_DEBUG功能。
    • -c <完成次數> 設置完成要求回應的次數。
    • -f 極限檢測。
    • -i<間隔秒數> 指定收發信息的間隔時間。
    • -I<網絡界面> 使用指定的網絡接口送出數據包。
    • -l<前置載入> 設置在送出要求信息之前,先行發出的數據包。
    • -n 只輸出數值。
    • -p<范本樣式> 設置填滿數據包的范本樣式。
    • -q 不顯示指令執行過程,開頭和結尾的相關信息除外。
    • -r 忽略普通的Routing Table,直接將數據包送到遠端主機上。
    • -R 記錄路由過程。
    • -s<數據包大小> 設置數據包的大小。
    • -t<存活數值> 設置存活數值TTL的大小。
    • -v 詳細顯示指令的執行過程。
    • -w <deadline> 在 deadline 秒后退出。
    • -W <timeout> 在等待 timeout 秒后開始執行。

    實例

    檢測是否與主機連通

    # ping www.runoob.com //ping主機
    PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
    64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
    64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms
    --- aries.m.alikunlun.com ping statistics ---
    10 packets transmitted, 30 received, 0% packet loss, time 29246ms
    rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms

    //需要手動終止Ctrl+C

    指定接收包的次數

    # ping -c 2 www.runoob.com
    PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
    64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
    64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms
    --- aries.m.alikunlun.com ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1016ms
    rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms

    //收到兩次包后,自動退出

    多參數使用

    # ping -i 3 -s 1024 -t 255 g.cn //ping主機
    PING g.cn (203.208.37.104) 1024(1052) bytes of data.
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms
    --- g.cn ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 6001ms
    rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
    [root@linux ~]#

    //-i 3 發送周期為 3秒 -s 設置發送包的大小 -t 設置TTL值為 255。

    TTL是 Time To Live的縮寫,該字段指定IP包被路由器丟棄之前允許通過的最大網段數量。TTL是IPv4包頭的一個8 bit字段。在IPv4包頭中TTL是一個8 bit字段,它位于IPv4包的第9個字節。TTL的作用是限制IP數據包在計算機網絡中的存在的時間。TTL的最大值是255,TTL的一個推薦值是64。

    4) iperf

    描述

    iperf命令是一個網絡性能測試工具。iperf可以測試TCP和UDP帶寬質量。iperf可以測量最大TCP帶寬,具有多種參數和UDP特性。iperf可以報告帶寬,延遲抖動和數據包丟失。利用iperf這一特性,可以用來測試一些網絡設備如路由器,防火墻,交換機等的性能。

    Iperf的主要功能

    1、TCP方面

    測試網絡帶寬

    支持多線程,在客戶端與服務端支持多重連接

    報告MSS/MTU值大小

    支持TCP窗口值自定義并可通過套接字緩沖

    2、UDP方面

    可以設置指定帶寬的UDP數據流

    可以測試網絡抖動值、丟包數

    支持多播測試

    支持多線程,在客戶端與服務器端支持多重連接

    語法

    iperf [-s|-c host] [options]

    參數

    Server or Client:

    -p, --port # server port to listen on/connect to

    -f, --format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes

    -i, --interval # seconds between periodic bandwidth reports

    -F, --file name xmit/recv the specified file

    -A, --affinity n/n,m set CPU affinity

    -B, --bind <host> bind to a specific interface

    -V, --verbose more detailed output

    -J, --json output in JSON format

    --logfile f send output to a log file

    -d, --debug emit debugging output

    -v, --version show version information and quit

    -h, --help show this message and quit

    Server specific:

    -s, --server run in server mode

    -D, --daemon run the server as a daemon

    -I, --pidfile file write PID file

    -1, --one-off handle one client connection then exit

    Client specific:

    -c, --client <host> run in client mode, connecting to <host>

    -u, --udp use UDP rather than TCP

    -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)

    (default 1 Mbit/sec for UDP, unlimited for TCP)

    (optional slash and packet count for burst mode)

    -t, --time # time in seconds to transmit for (default 10 secs)

    -n, --bytes #[KMG] number of bytes to transmit (instead of -t)

    -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n)

    -l, --len #[KMG] length of buffer to read or write

    (default 128 KB for TCP, 8 KB for UDP)

    --cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)

    -P, --parallel # number of parallel client streams to run

    -R, --reverse run in reverse mode (server sends, client receives)

    -w, --window #[KMG] set window size / socket buffer size

    -C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only)

    -M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)

    -N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm

    -4, --version4 only use IPv4

    -6, --version6 only use IPv6

    -S, --tos N set the IP 'type of service'

    -L, --flowlabel N set the IPv6 flow label (only supported on Linux)

    -Z, --zerocopy use a 'zero copy' method of sending data

    -O, --omit N omit the first n seconds

    -T, --title str prefix every output line with this string

    --get-server-output get results from server

    --udp-counters-64bit use 64-bit counters in UDP test packets

    實例

    iperf是基于Server-Client模式實現的。在測量網絡參數時,Iperf區分聽者(Audience)和說者(Speaker)兩種角色。說者向聽著發送一定量的數據,由聽者統計并記錄帶寬、時延抖動等參數。說者的數據全部發送完成后,聽者通過向說者回送一個數據包,將測量數據告知說者。這樣,在聽者和說者兩邊都可以顯示記錄的數據。如果網絡過于擁塞或誤碼率較高,當聽者回送的數據包無法被說者收到時,說者就無法顯示完整的測量數據,而只能報告本地記錄的部分網絡參數,發送的數據量、發送時間、發送帶寬等,像延時抖動等參數在說者一側則無法獲得(因此在報告時,服務器和客戶端所得到的信息是不同的)。

    帶寬測試通常采用UDP模式,因為能測出極限帶寬、時延抖動、丟包率。在進行測試時,首先以鏈路理論帶寬作為數據發送速率進行測試,例如,從客戶端到服務器之間的鏈路的理論帶寬為100Mbps,先用-b 100M進行測試,然后根據測試結果(包括實際帶寬,時延抖動和丟包率),再以實際帶寬作為數據發送速率進行測試,會發現時延抖動和丟包率比第一次好很多,重復測試幾次,就能得出穩定的實際帶寬。

    UDP模式

    服務器端:

    iperf -u -s

    客戶端:

    iperf -u -c 192.168.1.1 -b 100M -t 60

    在udp模式下,以100Mbps為數據發送速率,客戶端到服務器192.168.1.1上傳帶寬測試,測試時間為60秒。

    iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60

    客戶端同時向服務器端發起30個連接線程,以5Mbps為數據發送速率。

    iperf -u -c 192.168.1.1 -b 100M -d -t 60

    以100M為數據發送速率,進行上下行帶寬測試。

    TCP模式

    服務器端:

    iperf -s

    客戶端:

    iperf -c 192.168.1.1 -t 60

    在tcp模式下,客戶端到服務器192.168.1.1上傳帶寬測試,測試時間為60秒。

    iperf -c 192.168.1.1 -P 30 -t 60

    客戶端同時向服務器端發起30個連接線程。

    iperf -c 192.168.1.1 -d -t 60

    進行上下行帶寬測試。

    iperf的功能很強大,在測試網絡時很有用,更多高級功能,你們可以在網絡上搜索,在加深學習。Windows下也有iperf的命令。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有