一、简介
所谓计算机网络指的是任意网络中,任意两台计算机可以互相通信,而要互相通信,每台计算机要按照统一的协议加入到网络中。互联网是把很多计算机网络连接起来,形成一个全球统一的互联网。
对某个特定的计算机网络来说,它可能使用网络协议ABC,而另一个计算机网络可能使用网络协议XYZ。如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。因此,为了把计算机网络接入互联网,就必须使用TCP/IP协议。
TCP/IP协议泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够联入互联网,使用其他网络协议(例如NetBIOS、AppleTalk协议等)是无法联入互联网的。
二、网络编程核心概念
IP地址
在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台联入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址。
IP地址分为IPv4和IPv6两种。IPv4采用32位地址,类似101.202.99.12
,而IPv6采用128位地址,类似2001:0DA8:100A:0000:0000:1020:F2F3:1428
。IPv4地址总共有232个(大约42亿),而IPv6地址则总共有2128个(大约340万亿亿亿亿),IPv4的地址目前已耗尽,而IPv6的地址是根本用不完的。
IP地址又分为公网IP地址和内网IP地址。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于:
- 192.168.x.x
- 10.x.x.x
有一个特殊的IP地址,称之为本机地址,它总是127.0.0.1
。
IPv4地址实际上是一个32位整数。例如:
1707762444 = 0x65ca630c = 65 ca 63 0c = 101.202.99.12
如果一台计算机只有一个网卡,并且接入了网络,那么,它有一个本机地址127.0.0.1
,还有一个IP地址,例如101.202.99.12
,可以通过这个IP地址接入网络。
如果一台计算机有两块网卡,那么除了本机地址,它可以有两个IP地址,可以分别接入两个网络。通常连接两个网络的设备是路由器或者交换机,它至少有两个IP地址,分别接入不同的网络,让网络之间连接起来。
如果两台计算机位于同一个网络,那么他们之间可以直接通信,因为他们的IP地址前段是相同的,也就是网络号是相同的。网络号是IP地址通过子网掩码过滤后得到的。例如:
某台计算机的IP是101.202.99.2
,子网掩码是255.255.255.0
,那么计算该计算机的网络号是:
IP = 101.202.99.2 Mask = 255.255.255.0 Network = IP & Mask = 101.202.99.0
每台计算机都需要正确配置IP地址和子网掩码,根据这两个就可以计算网络号,如果两台计算机计算出的网络号相同,说明两台计算机在同一个网络,可以直接通信。如果两台计算机计算出的网络号不同,那么两台计算机不在同一个网络,不能直接通信,它们之间必须通过路由器或者交换机这样的网络设备间接通信,我们把这种设备称为网关。
网关的作用就是连接多个网络,负责把来自一个网络的数据包发到另一个网络,这个过程叫路由。
所以,一台计算机的一个网卡会有3个关键配置:
- IP地址,例如:
10.0.2.15
- 子网掩码,例如:
255.255.255.0
- 网关的IP地址,例如:
10.0.2.2
java中获取ip地址和主机名api
//获取本机的ip地址以及主机名 InetAddress ip = InetAddress.getLocalHost(); System.out.println(ip);//OU62GG0AJUDT0B2/192.168.25.1 //获取任意的主机ip或者主机名获取ip或者主机名 InetAddress inetAddress = InetAddress.getByName("OU62GG0AJUDT0B2"); System.out.println(inetAddress.getHostName()); System.out.println(inetAddress.getHostAddress()); System.out.println(ip.getHostName()); System.out.println(ip.getHostAddress());
端口
正在运行进程的端口号
域名
因为直接记忆IP地址非常困难,所以我们通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。
用nslookup
可以查看域名对应的IP地址:
$ nslookup www.baidu.com Server: xxx.xxx.xxx.xxx Address: xxx.xxx.xxx.xxx#53 Non-authoritative answer: Name: www.baidu.com Address: 47.98.33.223
有一个特殊的本机域名localhost
,它对应的IP地址总是本机地址127.0.0.1
。
协议
- 网络协议:互联网使用TCP/IP协议,它泛指互联网协议簇;
- IP协议:一种分组交换传输协议;
- TCP协议:一种面向连接,可靠传输的协议;许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。
- UDP协议:一种无连接,不可靠传输的协议。
网络模型
由于计算机网络从底层的传输到高层的软件设计十分复杂,要合理地设计计算机网络模型,必须采用分层模型,每一层负责处理自己的操作。OSI(Open System Interconnect)网络模型是ISO组织定义的一个计算机互联的标准模型,注意它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护。这个模型从上到下依次是:
- 应用层,提供应用程序之间的通信;
- 表示层:处理数据格式,加解密等等;
- 会话层:负责建立和维护会话;
- 传输层:负责提供端到端的可靠传输;
- 网络层:负责根据目标地址选择路由来传输数据;
- 链路层和物理层负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等。
互联网实际使用的TCP/IP模型并不是对应到OSI的7层模型,而是大致对应OSI的5层模型:
OSI | TCP/IP |
应用层 | 应用层 |
表示层 | |
会话层 | |
传输层 | 传输层 |
网络层 | IP层 |
链路层 | 网络接口层 |
物理层 |
二、UDP编程
基本代码
网络聊天室
三、TCP编程
TCP案例1从客户端上传图片到服务器端
升级多个客户端发送
TCP案例2客户端键盘录入 服务器端输出到控制台上
TCP案例3客户键盘录入 服务器端输出文本文件
TCP案例4客户端文本文件 服务器端输出到控制台
TCP案例5客户端文本文件 服务器端输出文本文件