一、网络编程
1.网络:全称:计算机网络,由在不同的地理位置、不同的计算机互联形成的一个计算机系统
2.网络编程:在已经拥有的完备成熟的网络系统中,在整个系统上,使用网络进行编程,是针对应
用层的设计活动
3.计算机网络七层协议
①应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的
②表示层:定义数据格式及加密
③会话层:它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在
只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如
果表示层收到了所有的数据,则用数据代表表示层
④传输层:选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进
行复用,还包括对收到的顺序不对的数据包的重新排序功能
⑤网络层:对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实
现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何
将一个包分解成更小的包的分段方法
⑥数据链路层:它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关
⑦物理层:OSI的物理层的规范是有关传输介质的特性,这些规范通常也参考了其他组织指定的标
准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用
多个规范完成对所有细节的定义
4.四层协议
①链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中
对应的网络接口卡。他们一起处理与电缆(或其他任何传输媒介)的物理接口细节
②网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族
中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及
IGMP协议(Internet组管理协议)
③运输层:主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相
同的传输协议:TCP(Transmission Control Protocol)和UDP(User Data Protocol)。TCP为两
台主机提供高可靠性的数据通信。它所作的工作包括把应用程序交给它的数据分成合适的小块交给
下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可
靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种
非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报
能到达另一端。任何必须的可靠性必须由应用层来提供,这两种运输层协议分别在不同的应用程序
中有不同的用途
④应用层:负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的
应用程序:Talnet远程登录、FTP文件传输协议、SMTP简单邮件传送协议、SNMP简单网络管理
协议
二、网络编程三要素
(一)IP地址
1.IP地址是计算机在网络中的唯一标志
2.分类
(1)IPV4
①构成:点分十进制的构成,有4个0-255之间的数组构成,来表示一个IP地址,4个字节即32位,
能够表示约40亿个地址
②四个字节中,有2个字节或者3个字节表示所在子网
③一个字节能表示0-255之间的256个数字,但是不能全用
④0表示子网网号:192.168.5.0,就当表示当前子网
⑤255表示广播地址:广播地址发送的内容所在子网内的所有设备都能接收到
⑥特殊:127.0.0.1表示本地回环地址,可以访问本机
⑦ping:可以查看网络是否联通
(2)IPV6
①构成:由8组数字组成,每组数字都是4个16进制数字,每个数字有16种状态,32个数字,最多
能表示16^32个IP地址
②号称能给地球上的每一粒沙子都拥有一个IP地址
(二)端口号
1.也就是一个数字,用于标记一台电脑中的默认进程
2.取值范围:0-65535
3.意味着计算机中至多能够运行65535个进程,当程序运行时,计算机会分配一个独一无二的端口
号,我们通过端口号就可以找到执行的进程,当进程结束时,端口号就会被回收
4.分配:可以是计算机随机分配,也可以是用于分配
5.常用的端口号
(1)操作系统:0-1024
(2)MySQL:3306
(3)Tomcat:8080
(4)QQ:4000
(5)Oracle:1521
(三)通信协议
1.用于定义通信双方在交互时,对信息的封装和解析的规则,就是协议
2.网络分工:每一层都可以做独立的事情
(1)应用层:http、https协议等(规定数据如何封装以及解析)
(2)传输层:UDP协议和TCP协议(更多关注的是端对端的传输)
(3)网络层:IP地址(如何完成两台设备之间的传输)
(4)物理层:底层的硬件设备,数据完整性的校验
三、InetAddress
1.InetAddress类的对象表示IP地址
2.对象获取方式
(1)getByName(String host):根据主机名称返回对象的ip地址
(2)getByAddress(byte【】 addr):给定装有ip地址的数组,返回InetAddress类对象
(3)getAllByName(String host):根据主机名获取所有当前类型对象的数组
(4)getLocalHost():获取本地主机主机名和IP地址的对象
3.常用方法
(1)getHostName():获取主机名称
(2)getAddress():获取IP地址的字节数组
(3)toString():获取主机名称和IP地址转为字符串
四、UDP和TCP
(一)概述
1.UDP和TCP协议都属于传输层,都是端到端的协议
2.区别
(1)UDP协议:面向无连接。像发短信,寄快递,效率高,不安全,先发送的消息未必收到,只
区分发送端和接收端,而不是像TCP那样区分客户端和服务端
(2)TCP协议:面向连接。像打电话。先发送的消息一定先到达,安全,效率低,区分客户端和
服务器端。在连接时,要经历三次握手,在断开时需要经历四次挥手
3.三次握手
(1)第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,
等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)
(2)第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个
SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
4.四次挥手
(1)第一步:当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN
附加标记的报文段(FIN表示英文finish)
(2)第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A
发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是
为了防止在这段时间内,对方重传FIN报文段)
(3)第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A发送一个FIN报文
段
(4)第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放
(二)Socket编程
1.Socket:是两台计算机之间的通信端,类似生活中的快递站、邮局、码头
2.Socket也叫做套接字,套接字编程:网络编程
(1)UDP中要是用到的套接字:DatagramSocket
(2)TCP中,客户端套接字使用Socket,服务端使用ServerSocket和Socket
(三)TCP编程
1.客户端和服务端区别
(1)客户端使用Socket的构造方法直接创建Socket对象
(2)服务器端不能直接使用Socket对象创建通信点对象,而是通过ServerSocket对象,从端口捕
获客户端的响应,专门为这个客户端生成一个Socket对象
2.构造方法
(1)Socket(InetAddress address, int port):创建一个通信点对象,专门用于和制定IP的主机中指
定进程进行通信
(2)只要这个对象创建成功,就说明这个连接已经建立好了,也就是说客户端已经连接上服务器
端,也就是已经获取到了服务器返回的响应
(3)创建对象的过程,就是在请求和服务器连接的过程
(4)ServerSocket(int port):创建一个服务器通信点对象
(5)ServerSocket要配合accept()方法使用
(6)accept():是专门用于接收客户端请求,并且返回一个对应的Socket对象
3、传输操作
(1)getOutputStream():返回此套接字的输出流
(2)getInputStream():返回此套接字的输入流
(3)一旦获取到IO对象,就变成了以IO的方式传输
4、关系
(1)客户端发送请求给服务器:客户端将请求从本机内存输出到网络,要用输出流
(2)服务器端接收客户端传来的响应:服务器将网络中的请求读取到服务器的内存中,要用输入
流