文章目录
网络编程概述
概述
1、计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。
2、Java网络编程
(1)Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
(2)Java提供的网络类库,可以实现网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
3、网络编程的目的
(1)网络编程是用来实现网络互连的不同计算机上运行的程序间可以进行数据交互。
(2)java.net包中J2SE的API包含类和接口,他们提供底层次的通信细节。可以让使用者直接使用这些类和接口,用来专注解决问题,而不用关注通信细节。
(3)直接或间接通过网络协议与其它计算机进行通讯。
4、网络编程中的两个主要的问题
(1)如何准确定位网络上的一台或多台主机?—— IP
(2)找到主机后如何进行可靠高效的数据传输?—— 网络传输协议
通讯要素:IP和端口号
IP地址
IP地址的描述
1、IP地址:由java.net包中的InetAddress类表示,作用是唯一的标识Internet上的计算机。
2、本机IP的两种表示:
(1)本地回环地址(hostAddress):127.0.0.1
(2)主机名(hostName):localhost
3、IP地址的分类1:IPV4 和 IPV6
(1)IPV4:由4个字节(32位)组成,形式为a.b.c.d,其表示范围为4个0~255(即0.0.0.0 ~ 255.255.255.255),大约有42亿个,2011年初已经用尽,因此我们需要另一种方式来表示IP地址。
(2)IPV6:由16个字节(128位)组成,写成8个无符号整数,每个整数用4个十六进制位表示。数之间用冒号分割,如 fe80:8080:8ce2:b149:64a5:c49e:1984
4、IP地址的分类2:公网地址(万维网使用)和私有地址(局域网使用),以(192.168.)开头的就是私有地址,范围是192.168.0.0 ~ 192.168.255.255,专门为组织机构内部使用。
InetAddress类
1、Internet上的主机有两种方式表示地址:域名(hostName)和IP地址(hostAddress),如百度的域名就是www.baidu.com ,IP地址为 220.181.111.37。
2、InetAddress类主要表示IP地址,有两个子类:Inet4Address、Inet6Address。
3、域名比较容易记,当在连接网络时输入一个主机域名后,域名服务器(DNS)负责将域名转化为IP地址,这样才能和主机建立连接。——域名解析
代码示例——InetAddress类的使用
public class InetAddressDemo {
/*这是一个程序入口*/
public static void main(String[] args) throws UnknownHostException {
//返回主机名的IP地址,输入IP返回IP输入域名,返回域名和IP
InetAddress inet = InetAddress.getByName("www.baidu.com");
System.out.println(inet);
//getHostAddress()返回文本显示中的IP地址字符串。
System.out.println(inet.getHostAddress());
//getHostName()返回域名
System.out.println(inet.getHostName());
//getLocalHost()返回本地主机的地址。
InetAddress inet1 = InetAddress.getLocalHost();
System.out.println(inet1);
//getLoopbackAddress() 返回本地回环地址
InetAddress inet2 = InetAddress.getLoopbackAddress();
System.out.println(inet2);
}
}
端口号
端口号的描述
1、端口号标识正在计算机上运行的进程(程序)。
2、不同的进程有不同的端口号。
3、端口号被规定为一个16位的整数,表数0 ~ 65535。
4、端口分类:公认端口、注册端口、动态/私有端口
(1)公认端口:0~1023,被预先定义的服务通信占用。(HTTP占用端口80,FTP占用端口21,Telnet占用端口23);
(2)注册端口:1024~49151,分配给用户进程或应用程序。(Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521);
(3)动态、私有端口:49152~65535。
端口号+IP地址
端口号+IP地址的组合就是一个网络套接字。
通讯要素:网络通讯协议
计算机网络
1、计算机网络的OSI七层模型、TCP/IP四层模型图
2、物理层和数据链路层涉及物理介质访问和二进制数据流传输。
3、网络层的主要协议有IP(Internet protocol)、ICMP(Internet Control Message,互联网控制报文协议)、IGMP(Internet Group Management Protocol,互联网组管理协议)、ARP(Address Resolution Protocol,地址解析协议)、RARP(Reverse Address Resolution Protocol,反向地址解析协议)等,涉及寻址和路由选择。
4、传输层的基本功能是为两台主机间的应用程序提供端到端的通信。传输层从应用层接受数据,并且在必要的时候将其分为较小的单元传递给网络层,并且包到达对方的信息正确无误。
5、应用层提供应用程序的网络接口。
网络通讯协议概述
1、协议:明确一点协议就是一种规则,大家传输东西的所有细节都要按照这个规则来。
**2、网络通信协议:**计算机网络中实现通信有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等指定标准。
**3、通信协议分层的思想:**由于结点键联系很复杂,在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式就是层次方式,即同层次间可以通信、上一层可以调用下一层、而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展。
**4、传输层的两个重要协议:**传输控制协议TCP(Transmission Control Protocol)、用户数据报协议UDP(User Datagram Protocol)
5、TCP/IP协议:因TCP和网络互联协议(IP)而得名,实际是一组协议,包括多个具有不同功能且互为关联的协议。
**6、IP协议:**IP(Internet Protocol)协议是网络层的主要协议,支持网间互联的数据通信。
TCP协议
TCP协议的描述
1、使用TCP协议前,必须建立TCP连接,形成传输数据通道。
2、传输前,采用“三次握手”方式,可靠。
3、TCP协议进行通信的两个应用进程:客户端、服务端。
4、在连接中可进行大数据量的传输。
5、传输完毕,需释放已建立的连接,效率低。
6、断开时进行“四次挥手”
TCP三次握手
1、TCP的标志位:占6个比特位
标志位 | 含义 |
---|---|
URG | Urgent:紧急位,URG=1,表示紧急数据 |
ACK | Acknowledgement:确认位,ACK=1,确认号才生效 |
PSH | Push:推送位,PSH=1,尽快地把数据交付给应用层 |
RST | Reset:重置位,RST=1,重新建立连接 |
SYN | Synchronization:同步位,SYN=1,表示连接请求报文 |
FIN | Finish:终止位,FIN=1,表示释放连接 |
2、图解
详细图解
TCP四次挥手
1、第一次挥手:客户端设置seq和ACK,向服务器发送一个FIN(终结)报文段。此时,客户端进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务端了。
2、第二次挥手:服务端收到了客户端发送的FIN报文段,向客户端回了一个ACK报文段。
3、第三次挥手:服务端向客户端发送FIN报文段,请求关闭连接,同时服务端进入LAST_ACK状态,
4、第四次挥手:客户端收到服务端的FIN报文段后,向服务端发送ACK报文段,然后客户端进入TIME_WAIT状态。服务端收到客户端的ACK报文段以后,就关闭连接。此时,客户端等待2MSL(指第一个片段在网络中最大的存活时间)后仍没有收到回复,说明服务端已经正常关闭,客户端关闭连接。
UDP协议
1、将数据、源、目的封装成数据包,不需要建立连接。
2、每个数据报的大小限制在64K内。
3、因无序连接,所以不可靠。
4、发送数据结束时无序释放资源,速度快。
TCP协议和UDP协议的区别
区别点 | UDP | TCP |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对n,n对n交互通信 | 只能1对1通信 |
传输方式 | 面向报文 | 面向字节流 |
资源需求 | 对系统资源需求较少 | 对系统资源需求较多 |
适用场景 | IP电话、视频会议、直播等 | 适用于要求可靠传输的应用、例如文件传输 |