小生努力加载中 . . .


网络: 将不同区域的电脑连接在一起,组成局域网,城域网或广域网。把分布再不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件,软件,数据信息等资源。

  • 资源共享
  • 信息传输与集中处理
  • 负载均衡与分布处理

通信协议: 计算机网络中实现通信必须有一些约定即通信协议,对速率,传输代码,代码结构,传输控制步骤,出错控制等指定标准。

通信接口: 为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换。接口包括两部分:

  • 硬件装置:实现结点之间的信息传送;
  • 软件装置:规定双方进行通信的约定协议

网络分层: 由于结点之间联系很复杂,在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层,而与再下一层不发生关系。

​ TCP/IP是一个协议族,也是按照层次划分,共四层:应用层,传输层,互连网络层,网络接口层(物理+数据链路层)。

​ OSI网络通信协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI模型,但是并没有严格按照OSI规定的七层标准去划分,而只划分了四层,这样会更简单点,当划分太多层次时,你很难区分某个协议是属于那个层次的。


数据封装:Data Encapsulation是指将协议数据单元(PDU)封装在一组协议头和协议尾中的过程。在OSI七层参考模型中,每层主要负责与其它机器上的对等层进行通信。该过程是在协议数据单元(PDU)中实现的,其中每层的PDU一般由本层的协议头,协议尾和数据封装构成。

​ 由于用户传输的数据一般都比较大,有的可以达到MB字节,一次性发送出去十分困难,于是就需要把数据分成许多片段,再按照一定的次序发送出去。这个过程就需要对数据进行封装


数据拆除:Data dismantling是指将接受到的数据进行拆包,每一层只把对该层有意义的数据拿走,或者说每一层只能处理发送方同等层的数据,然后把其余的部分传递给上一层,这就是对等层通信的概念。


常用类操作

IP地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。比如互联网的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。路由器是连接两个或多个网络的网络设备。

  • IP地址分类

IPV4:32位地址,以点分十进制表示,如192.168.0.1

IPV6:128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开,如-》 3ffe:3201:1401:1280:c8ff:fe4d:db39:1984

  • 特殊的IP

127.0.0.1本机地址

192.168.0.0——192.168.255.255私有地址,属于非注册地址,专门为组织机构内部使用


InetAddress

  • 封装计算机的ip地址,没有端口

//使用getLocalHost方法创建InetAddress对象

InetAddress addr = InetAddress.getLocalHost();

System.out.println(addr.getHoustAddress());//返回:192.168.1.110

System.out.println(addr.getHostName());//输出计算机名

//根据域名得到InetAddress对象

addr = InetAddress.getByName(“www.163.com");

System.out.println(addr.getHostAddress());//返回163服务器的ip:61.135.253.15

System.out.println(addr.getHostName());//输出:www.163.com

//根据ip得到InetAddress对象

addr = InetAddress.getByName(“61.135.253.15”);

System.out.println(addr.getHostAddress()); //返回163服务器的ip:61.135.253.15

System.out.println(addr.getHostName());//输出ip而不是域名。如果这个IP地址不存在或DNS服务器不允许进行IP地址和域名的映射,getHostName方法就直接返回这个IP地址。

  • InetAddress: 多个静态方法

  • getLocalHost: 本机

  • getByName: 根据域名DNS | IP地址 –> IP

  • 两个成员方法

  • getHostAddress: 返回地址

  • getHostName: 返回计算机名


端口

​ IP地址用来标识一台计算机,但是一台计算机上可能提供多种网络应用程序,如何来区分这些不同的程序呢?这就要用到端口。

​ 端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。端口的表示是一个16位的二进制整数,2个字节,对应十进制的0-65535.

​ Oracle,MySQL,Tomcat,QQ,msn,迅雷,360等网络程序都有自己的端口:

  • 公认端口 0-1023 比如80端口分配给www,21端口分配给FTP
  • 注册端口 1024-49151 分配给用户进程或应用程序
  • 动态/私有端口 49152–65535
  • 查看所有端口:netstat -ano
  • 查看指定端口:netstat -aon | findstr “808”
  • 查看具体程序:使用任务管理器查看PID

InetSocketAddress

  • 包含端口,用于socket通信

//包含端口

InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",808);
InetSocketAddress socketAddress = new InetSocketAddress("localhost",9000);
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress.getAddress());

URL

package cn.location;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * URL: 统一资源定位器,互联网三大基石之一(html http),区分资源
 * 1. 协议
 * 2. 域名,计算机
 * 3. 端口:默认80
 * 4. 请求资源
 * http://www.baidu.com:80/index.html?uname=shsxt&age=18#a
 * @author HQF
 *
 */
public class URLTest01 {

    public static void main(String[] args) throws MalformedURLException {
    URL url  = new URL("http://www.baidu.com:80/index.html?uname=shsxt&age=18#a");
    //获取四个值
    System.out.println("协议:" + url.getProtocol());
    System.out.println("ip:" + url.getHost());
    System.out.println("资源:" + url.getFile());
    System.out.println("端口:" + url.getPort());
    System.out.println("资源:" + url.getPath());

    System.out.println("参数:" + url.getQuery());
    System.out.println("描点:" + url.getRef());
    }

}

评论