/*
* 主要关注网络和通信协议
*
* 网络:把不同区域的电脑连接在一起,组成局域网,城域网或者广域网
* 把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个大规模
* 功能强大的网络系统,从而使众多计算机可以方便的互相传递信息,共享硬件,软件,数据信息等资源
* 1.资源共享 2.信息传输与集中处理 3.负载均衡与分布处理
* 高并发高性能高可用
*
* 通信协议:计算机网络中实现通信比有一些约定即通信协议,对速率,传输代码,代码结构,传输控制步骤,出错控制等指定标准
*
* 通信接口:为了使两个结点之间能进行对话,必须在它们之间建立通信工具,是彼此之间能进行信息交换,接口包含两部分:
* 1.硬件装置:实现结点之间的信息传送
* 2.软件装置:规定双方进行通信的约定协议
*
* OSI参考模式:开放系统互连参考模型(Open System Interconnect)
*
* 真实使用的标准使 TCP/IP协议(传输控制/网际协议)
* 重点关注TCP,UDP即传输层
*
* 数据封装:是指把协议数据单元封装在一组协议头和协议尾的过程,在七层参考模型中,每层主要负责与其他机器上的对等层进行通信
* 该过程实在协议数据单元中PDU实现的,其中每层的PDU一般有本层的协议头协议尾和数据封装构成
* 应用层:准备数据
* 传输层:接收应用层数据添加上TCP的控制信息称为TCP的头部,这个数据段元的段加入控制信息的过程称为封装,由此将段
* 交给网络层
* 网络层:接收到段,在添加上IP的头,这个数据单元称为包,然后把包交给数据链路层
* 数据链路层:把包再添加上MAC头部和尾部,这个数据单元称为帧,然后把帧交给物理层
* 物理层:把接收到的数据转化为比特流,然后再网线中传送
*
*
* 数据的拆封:是指把接收到的数据进行拆包,每一层只把对该层有意义的数据拿走,或者说每一层只能处理发送方同层的数据,然后把其余部分
* 递交给上一层,这就是对等层通信的概念
*
* 物理层:接收到比特流,经过处理后把数据交给数据链路层
* 数据链路层:把接收到的数据转化为数据帧,再除去MAC头部和尾部,这个出去控制信息的过程称为解封,然后把包交给网络层
* 网络层:接收到包,再出去IP头部,然后把段交给传输层
* 传输层;接收到端再去TCP头部,然后把数据交给应用层
* 应用层:数据处理
*
* 接收方数据处理的方式使从底层到高层,逐层进行数据解封装
*
* */
*
public class IpConcept {
/*
*
* Ip地址(用来定位计算机):用来表示网络中的一个通信实体的地址 通信实体可以是计算机,路由器等 比如
* 互联网的每一个服务器,都要有自己的IP地址,而每一个局域网的计算机要通信也要配置IP地址。
* 路由器是连接两个或多个网络的网络设备
*
* IP地址分类:
* IPV4:32位地址,以十进制表示
* IPV6:128位即16个字节写成8个16位的无符号整数,每个整数用四个十六位进制位表示
* 特殊的IP:本机地址 私有地址(属于费非注册地址,专门位组织机构内部使用)
*
* */
public static void main(String[] args) throws UnknownHostException {
InetAddress addr = InetAddress.getLocalHost();
System.out.println(addr.getHostAddress());//返回 本机地址
System.out.println(addr.getHostName());//输出计算机命
}
}
'''
```java
import java.net.InetSocketAddress;
public class NetStatTest {
/*
* 端口:区分软件 两个字节 同一个协议端口不能冲突 定义端口越大越好
* IP地址用来标识一台计算机,但是一台计算机可能提供多种网络应用程序,如何来区分这些不同的程序呢
* 这就要用到端口
* 端口是一个虚拟的概念,并不是说在主机上真的有若干个端口,通过端口,可以在一个主机上运行多个网络程序
* 端口表示的是一个16位的二进制整数,两个字节,对应十进制的0-65535
*
* */
public static void main(String[] args) {
InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080);
InetSocketAddress socketAddress2=new InetSocketAddress("localhost",9000);
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress2.getAddress());
}
}