网络编程概述
1、计算机网络
- 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
2、网络编程
- 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
3、网络参考模型
注:网络模型7层概述:
- 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
- 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
- 网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。
- 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
- 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
- 表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。
- 应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。
4、网络编程三要素
- IP地址:用来找到目标主机
- 端口号:用来找到目标主机上的目标应用程序
- 通信协议:
5、网络编程三要素之IP地址
(1)IP地址的概述与分类
- IP地址:网络中计算机的唯一标识。
- 计算机只能识别二进制的数据,所以我们的IP地址应该是一个二进制的数据。但是呢,我们配置的IP地址确不是二进制的,为什么呢?
IP地址:192.168.1.100
换算:11000000 10101000 00000001 01100100
假如真是:11000000 10101000 00000001 01100100的话,我们如果每次再上课的时候要配置该IP地址,记忆起来就比较的麻烦。所以,为了方便表示IP地址,我们就把IP地址的每一个字节上的数据换算成十进制,然后用.分开来表示:"点分十进制"
IP地址的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号可以有这么多台主机:256*256*256 = 16777216
B类:前二号段为网络号段+后二段的主机号段
一个网络号可以有这么多台主机:256*256 = 65536
C类:前三号段为网络号段+后一段的主机号段
一个网络号可以有这么多台主机:256
IP地址的分类:
A类 1.0.0.1---127.255.255.254 (1) 10.X.X.X 是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2) 127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255 是私有地址。169.254.X.X 是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X 是私有地址。
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
两个DOS命令:
(1)ipconfig 查看本机ip地址
(2)ping 后面跟ip地址:测试本机与指定的ip地址间的通信是否有问题
特殊的IP地址:
127.0.0.1 回环地址(表示本机)
x.x.x.255 广播地址
x.x.x.0 网络地址
(2)对IP地址的获取和操作
- 为了方便我们对IP地址的获取和操作,java提供了一个类 :InetAddress 类 供我们使用。
- 这个类没有构造方法,那么如何使类提供的功能呢?
- 要掌握的功能:
- public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
- public String getHostName():获取主机名
- public String getHostAddress():获取主机Ip地址
(2.1)PS:
/*
* 如果一个类没有构造方法,那该怎么使用这个类的成员方法呢?
* A: 成员全部是静态的(Math,Arrays,Collections)
* B: 单例设计模式(Runtime)
* C: 类中有静态方法返回该类的对象(InetAddress)
* class Demo {
* private Demo(){ }
* public static Demo getXxx() {
* return new Demo();
* }
* }
*/
(2.2)对IP地址的获取和操作编程举例
package cn.itcast_01;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
public static void main(String[] args) throws UnknownHostException {
// public static InetAddress getByName(String host)
// InetAddress address = InetAddress.getByName("liuyi");
// InetAddress address = InetAddress.getByName("192.168.12.92");
InetAddress address = InetAddress.getByName("192.168.12.63");
// 获取两个东西:主机名,IP地址
// public String getHostName()
String name = address.getHostName();
// public String getHostAddress()
String ip = address.getHostAddress();
System.out.println(name + "---" + ip);
}
}
6、网络编程三要素之端口号
(1)物理端口:网卡口。
(2)逻辑端口:就是指常说的端口号,是一个正在运行的应用程序的标识。
A: 每个网络程序都会至少有一个逻辑端口
B: 用于标识进程的逻辑地址,不同进程的标识
C: 有效端口:0~65535,其中0~1024系统使用或保留端口。
7、网络编程三要素之通信协议
(1)通信协议:源主机和目标主机进行通信的规则。
(2)通信协议的分类:
- UDP:面向无连接。不可靠。速度快。将数据封包传输,数据包最大64k。
- 举例:聊天留言,在线视频,视频会议,发短信,邮局包裹。
- TCP:面向连接。安全可靠。效率稍低。通过三次握手确保连接的建立。
- 举例:下载,打电话,QQ聊天。
8、Socket网络编程
(1)Socket机制图解
(2)Socket套接字:网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
(3)Socket原理机制:
- 通信的两端都有Socket套接字
- 网络通信其实就是Socket之间的通信
- 数据在两个Socket之间通过IO传输