• Linux网络管理


    ISO:国际标准化组织

    OSI:开发系统互联模型

    发送数据时,上层传到下层,再从主机A物理层传到主机B的物理层,有主机B的物理层往上传递

    接受数据时,下层往上层,由物理层往应用层传递

    上三层为用户提供服务,下四层对实际的数据传递提供服务

    TCP/IP协议的四层模型

    网络接口层

      网络接入层与OSI参考模型中的物理层数据链路层相对应。负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。

      地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。把ip地址翻译成物理地址

      

    网际互联层

      网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。

      该层有三个主要协议:网际协议(IP)互联网组管理协议(IGMP)互联网控制报文协议(ICMP)

    传输层:

      传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。

      该层有两个主要协议:传输控制协议(TCP)、用户数据包协议(UDP)

      

    应用层:

      应用层对应于OSI参考模型的上三高层,为用户提供所需要的各种服务。例如:FTP、Telnet、DNS、SMTP等

      

    TCP/IP与OSI模型的比较

    相同点:

      1. 都采用了层次结构的概念

      2. 都能够提供面向连接和无连接两种通信服务机制

    不同点:

      1. 前者四层模型,后者七层

      2. 对可靠谱要求不同

      3. OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络

    IP地址

      

    IP包头的字节数不一定是20字节,它是不固定的,着也就是为什么IP4协议传输没有IP6传输快的原因,IP6包头是固定的,每次传输不需要判断包头的长度

    端口

    查看本机启用的端口:netstat -an

              -a:查看所有连接和监听端口

              -n:显示IP地址和端口号,而不显示域名和服务名

    端口号用于区分不同的应用程序,范围为0~65535,其中0~1023为系统保留

    IP地址和端口号组成了所谓的Scoket(套接字),Scoket是网络上运行的程序之间双向通信链路的终结点,

    是TCP(是一种面向连接的、可靠的、基于字节流的传输层通信协议)和UDP(无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责)的基础

    Java提供了网络功能四大类

    1 InetAddress: 用于标识网络上的硬件资源,InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。

    1 //获取本机的InetAddress实例 
    2 InetAddress address = InetAddress.getLocalHost(); 
    3 address.getHostName();//获取计算机名 
    4 address.getHostAddress();//获取IP地址 
    5 byte[] bytes = address.getAddress();//获取字节数组形式的IP地址,以点分隔的四部分 
    6 //获取其他主机的InetAddress实例 
    7 InetAddress address2 = InetAddress.getByName("其他主机名"); 
    8 InetAddress address3 = InetAddress.getByName("IP地址"); 

    2 URL:统一资源定位符,通过URL可以直接读取和写入网络上的数据,表示Internet上某一资源的地址,由协议名称和资源名称两部分组成 如 http://www.taobao.com

     1 //创建一个URL的实例 
     2 URL baidu = new URL("http://www.baidu.com"); 
     3 URL url = new URL(baidu,"/index.html?username=tom#test");//?表示参数,#表示锚点 
     4 url.getProtocol();//获取协议 
     5 url.getHost();//获取主机 
     6 url.getPort();//如果没有指定端口号,根据协议不同使用默认端口。此时getPort()方法的返回值为 -1 
     7 url.getPath();//获取文件路径 
     8 url.getFile();//文件名,包括文件路径+参数 
     9 url.getRef();//相对路径,就是锚点,即#号后面的内容 
    10 url.getQuery();//查询字符串,即参数 

    通过URL对象的openStream()方法可以得到指定资源的输入流,通过流能够读取或访问网页上的资源

     1 //使用URL读取网页内容 
     2 //创建一个URL实例 
     3 URL url = new URL("http://www.baidu.com"); 
     4 InputStream is = url.openStream();//通过openStream方法获取资源的字节输入流 
     5 InputStreamReader isr = new InputStreamReader(is,"UTF-8");//将字节输入流转换为字符输入流,如果不指定编码,中文可能会出现乱码 
     6 BufferedReader br = new BufferedReader(isr);//为字符输入流添加缓冲,提高读取效率 
     7 String data = br.readLine();//读取数据 
     8 while(data != null){ 
     9 System.out.println(data);//输出数据 
    10 data = br.readLine(); 
    11 12 br.close(); 
    13 isr.close(); 
    14 is.close(); 

    3 Sockets: 使用TCP协议实现网络通信的Socket相关的类  客户端的Socket类  服务器端的ServerSocket类

     服务器端

     1 import java.io.DataInputStream;
     2 import java.io.DataOutputStream;
     3 import java.io.IOException;
     4 import java.net.ServerSocket;
     5 import java.net.Socket;
     6 import java.net.SocketTimeoutException;
     7 
     8 /**
     9  * Created by ht on 2017/8/1.
    10  */
    11 public class SocketServer extends Thread{
    12 
    13     private ServerSocket serverSocket;
    14 
    15     public SocketServer(int port) throws IOException
    16     {
    17         //创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
    18         serverSocket = new ServerSocket(port);
    19         serverSocket.setSoTimeout(10000);
    20     }
    21 
    22     public void run()
    23     {
    24         while(true)
    25         {
    26             try
    27             {
    28                 System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
    29                 //调用accept()方法开始监听,等待客户端的连接
    30                 Socket server = serverSocket.accept();
    31                 System.out.println("Just connected to " + server.getRemoteSocketAddress());
    32                 //获取输入流,并读取客户端信息
    33                 DataInputStream in = new DataInputStream(server.getInputStream());
    34                 System.out.println(in.readUTF());
    35                 //获取输出流,响应客户端的请求
    36                 DataOutputStream out = new DataOutputStream(server.getOutputStream());
    37                 out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "
    Goodbye!");
    38                 //关闭资源
    39                 server.close();
    40             }catch(SocketTimeoutException s)
    41             {
    42                 System.out.println("Socket timed out!");
    43                 break;
    44             }catch(IOException e)
    45             {
    46                 e.printStackTrace();
    47                 break;
    48             }
    49         }
    50     }
    51     public static void main(String [] args)
    52     {
    53         int port = Integer.parseInt(args[0]);
    54         try
    55         {
    56             //用一个线程跑,跑完直接结束
    57             Thread t = new SocketServer(port);
    58             t.start();
    59         }catch(IOException e)
    60         {
    61             e.printStackTrace();
    62         }
    63     }
    64 }

    客户端

     1 import java.io.*;
     2 import java.net.Socket;
     3 
     4 /**
     5  * Created by ht on 2017/8/1.
     6  */
     7 public class SocketClient {
     8     public static void main(String[] args) {
     9         String serverName = args[0];
    10         int port = Integer.parseInt(args[1]);
    11         try
    12         {
    13             System.out.println("Connecting to " + serverName + " on port " + port);
    14             //创建客户端Socket,指定服务器地址和端口
    15             Socket client = new Socket(serverName, port);
    16             System.out.println("Just connected to " + client.getRemoteSocketAddress());
    17             //获取输出流,向服务器端发送信息
    18             OutputStream outToServer = client.getOutputStream();
    19             DataOutputStream out = new DataOutputStream(outToServer);
    20             out.writeUTF("Hello from " + client.getLocalSocketAddress());
    21             //获取输入流,并读取服务器端的响应信息
    22             InputStream inFromServer = client.getInputStream();
    23             DataInputStream in = new DataInputStream(inFromServer);
    24             System.out.println("Server says " + in.readUTF());
    25             //关闭资源
    26             client.close();
    27         }catch(IOException e)
    28         {
    29             e.printStackTrace();
    30         }
    31     }
    32 }

    编译两个实现类

    分别启动两个命令符,先启动服务端,再启动客户端

    4 Datagram: 使用UDP协议,将数据保存在数据报中,通过网络进行通信,进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去

     服务器端代码

     1 //服务器端,实现基于UDP的用户登录 
     2 //创建服务器端DatagramSocket,指定端口 
     3 DatagramSocket socket =new DatagramSocket(10010); 
     4 //创建数据报,用于接受客户端发送的数据 
     5 byte[] data = new byte[1024];
     6 DatagramPacket packet =new DatagramPacket(data,data.length); 
     7 //接受客户端发送的数据 
     8 socket.receive(packet);//此方法在接受数据报之前会一致阻塞 
     9 //读取数据 
    10 String info = newString(data,o,data.length); 
    11 System.out.println("我是服务器,客户端说"+info); 
    12 //========================================================= 
    13 //向客户端响应数据 
    14 //定义客户端的地址、端口号、数据 
    15 InetAddress address = packet.getAddress(); 
    16 int port = packet.getPort(); 
    17 byte[] data2 = "欢迎您!".getBytes(); 
    18 //创建数据报,包含响应的数据信息 
    19 DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port); 
    20 //响应客户端 
    21 socket.send(packet2); 
    22 //关闭资源 
    23 socket.close(); 

    客户端代码

     1 //客户端 
     2 //定义服务器的地址、端口号、数据 
     3 InetAddress address = InetAddress.getByName("localhost"); 
     4 int port = 10010 5 byte[] data = "用户名:admin;密码:123".getBytes(); 
     6 //创建数据报,包含发送的数据信息 
     7 DatagramPacket packet = new DatagramPacket(data,data.length,address,port); 
     8 //创建DatagramSocket对象 
     9 DatagramSocket socket = new DatagramSocket(); 
    10 //向服务器发送数据 
    11 socket.send(packet); 
    12 //接受服务器端响应数据 
    13 //====================================== 
    14 //创建数据报,用于接受服务器端响应数据 
    15 byte[] data2 = new byte[1024]; 
    16 DatagramPacket packet2 = new DatagramPacket(data2,data2.length); 
    17 //接受服务器响应的数据 
    18 socket.receive(packet2); 
    19 String raply = new String(data2,0,packet2.getLength()); 
    20 System.out.println("我是客户端,服务器说:" + raply); 
    21 //关闭资源 
    22 socket.close(); 

    DNS作用(域名系统的缩写,也称作名称解析)

      在互联网中,通过IP地址来进行通信

      IP地址用数字表示,记忆困难,改成域名方便记忆。例如:116.213.123.342 ==> www.baidu.com

    网关作用

      1. 又称网间连接器,协议转化器

      2. 网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连

      3. 既可以用于广域网互连,也可以用于局域网互连

      4. 是一种充当转换重任的服务器或路由器

  • 相关阅读:
    opencv学习(六)——图像基本操作
    GAN实战笔记——第一章GAN简介
    opencv学习(三)——绘图功能
    opencv学习(四)——鼠标作为画笔
    TensorFlow从入门到入坑(1)
    opencv学习(五)——轨迹栏作为调色板
    GAN实战笔记——第二章自编码器生成模型入门
    TensorFlow从入门到入坑(2)
    KDE Plasma 卡住
    未来5到10年前端技术发展趋势分析
  • 原文地址:https://www.cnblogs.com/hzzjj/p/6817403.html
Copyright © 2020-2023  润新知