一、TCP/IP协议
TCP/IP协议是计算机间进行通信所遵守的各种规则的集合。Internet的主要协议有:网络层的IP协议、传输层的TCP和UDP协议、应用层的FTP、HTTP、SMTP等协议。其中TCP和IP是Internet的主要协议,它们定义了计算机与外设进行通信所使用的规则。TCP、IP网络参考模型包括四个层次:应用层、传输层、网络层和链路层。每一层负责不同的功能。
二、网络通信解决的问题
不同机器,不同程序之间的数据交换
三、地址
因特网上的每台计算机和其它设备都拥有一个唯一的地址,保证用户在连网的计算机上操作时,能够高效且方便地从千千万万台计算机中选出自己所需的对象来。本机ip地址为127.0.0.1/0.0.0.0/路由器分配的ip地址
3.1 IPV4
是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
3.2 IPV6
随着互联网的蓬勃发展,IP位址的需求量愈来愈大,使得IP地址的发放愈趋严格,各项资料显示全球IPv4地址可能在2005至2010年间全部发完(实际情况是在2019年11月25日IPv4位地址分配完毕)。地址空间的不足必将妨碍互联网的进一步发展。为了扩大地址空间,拟通过IPv6重新定义地址空间。IPv6采用128位地址长度。在IPv6的设计过程中除了一劳永逸地解决了地址短缺问题以外,还考虑了在IPv4中解决不好的其它问题。 ? 现有的互联网是在IPv4协议的基础上运行的。IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将妨碍互联网的进一步发展。为了扩大地址空间,拟通过IPv6以重新定义地址空间。IPv4采用32位地址长度,只有大约43亿个地址,估计在2005~2010年间将被分配完毕,而IPv6采用128位地址长度,几乎可以不受限制地提供地址。按保守方法估算IPv6实际可分配的地址,整个地球的每平方米面积上仍可分配1000多个地址。在IPv6的设计过程中除解决了地址短缺问题以外,还考虑了在IPv4中解决不好的其它一些问题,主要有端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等。
四、子网
单个节点的能力有限,不可能所有的节点都接入一个网络,一个节点记住所有的节点信息,所以只能组成一个个子网,层层嵌套,组成广域网,城域网和局域网,
五、DNS
全称是Domain Name Server,互联网上的服务器是通过ip地址进行识别的,而ip地址是由一组枯燥且没有任何意义的数字组成,不便于人们记忆,后来便出现了便于记忆的域名,通过域名和ip地址的对应关系实现了寻址,DNS的作用就在于将便于人们记忆的域名解析成INTERNET可以识别的ip地址。本地C:\Windows\System32\drivers\etc目录下的host文件也可以配置这个域名
六、根服务器
主要用来管理互联网的主目录,最早是IPV4,全球只有13台(这13台IPv4根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国,由美国互联网机构Network Solutions运作。其余12个均为辅根服务器,其中9个在美国,2个在欧洲(位于英国和瑞典),1个位于日本。 ?在与现有IPv4根服务器体系架构充分兼容基础上,“雪人计划”于2016年在全球16个国家完成25台IPv6根服务器架设
七、Windows10开启telnet
打开控制面板——>点击程序——>点击程序和功能下的”启用或关闭Windows功能“——>勾选上Telnet客户端——>点击确定即可
?八、通信实战
依据:通过ip地址可以确定所在网络及所在网络的终端,端口号可以确定该终端的进程。即ip加端口号可以定位一个程序 思路:先在eclipse上写好服务端代码,运行服务端程序,然后以cmd为客服端,借助Telnet请求连接服务端并与服务端进行通信
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable
{
static ServerSocket ssc;
static OutputStream output;
public static void main(String[] args) throws IOException
{
/**
* Socket 包装TCP连接
* 指定端口地址:10001
* 建立监听服务
*/
ssc = new ServerSocket(10001);
System.out.println ("服务端开启:ip:"+ssc.getInetAddress ().getHostAddress ()+"端口号:"+ssc.getLocalSocketAddress ());
/**
* 监听器客户端 Socket的连接(可以认为服务端进程阻塞在此,直到有客户端连接上来继续执行)
* clientSocket:负责当前线程中c/s通信中的Socket对象
*/
Socket socketClient = ssc.accept();
System.out.println ("客户端端口:"+socketClient.getPort());
// 获取一个输出流 对象
output = socketClient.getOutputStream ();
output.write ("Hello Client!!!!".getBytes ());
//启动线程,向客户端发送信息
Server s=new Server();
Thread rt=new Thread(s);
rt.start();
// 获取一个输入流对象,从客户端读入信息
InputStream input = socketClient.getInputStream ();
while(true)
{
int readnum = input.read ();
System.out.print((char)readnum);
}
}
@Override
public void run() {
while(true)
{
int ch;
try {
while((ch=System.in.read())!=-1)
{//从键盘接收字符并向客户端发生
output.write(((byte)ch));
output.flush();//将缓冲区内容向客户端输出
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
代码写好后点击运行,然后打开cmd,输入:telnet 127.0.0.1 10001?就可以实现通信了:
?
|