1、TCP/IP协议(由网络接入层、网际互联层、传输层、应用层4个层次组成)
(1、) 网络接入层:对应于OSI参考模型中的物理层和数据链路层。它负责监视数据在主机和网络之间的交换。
(2、)网际互联层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。
(3、)传输层:为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议——传输控制协议(TCP)和用户数据报协议(UDP)。
(4、)传输层:为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议——传输控制协议(TCP)和用户数据报协议(UDP)。
2、IP地址和端口号
(1、)IP地址可以唯一标识互联网上的一台计算机
[1、] IPv4地址是一个32位的二进制数
[2、] IPv4地址通常用“点分十进制”表示成a.b.c.d的形式
[3、] 新一代的IPv6采用了128位的地址,通常以十六进制形式表示,如2001:A012:B1234:1。
(2、)如果想访问目标计算机中的某个应用程序,还需要指定端口号。
[1、] 端口号用两个字节表示,它的取值范围是0~65 535
3、InetAddress类
(1、)该类创建的对象包含一个Internet主机地址的域名和IP地址,并提供了一系列与IP地址相关的方法
4、TCP与UDP协议
(1、)TCP面向连接
[1、] 即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
[2、] 在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”
二、Socket编程
1、Socket称作套接字,用于描述IP地址和端口,可以用来实现不同虚拟机或不同计算机之间的通信。
2、根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为3个步骤。
(1、)服务器监听
服务器端应用程序启动后,服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2、)客户端请求
客户端请求是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字提出连接请求。
(3、)连接确认
3、套接字有两种类型:流套接字和数据报套接字。
(1、)流套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,TCP是一种流套接字协议。
(2、)数据报套接字也支持双向的数据流,但并不保证是可靠、有序、无重复的,它保留记录边界,UDP是一种数据报套接字协议。
4、Socket和ServerSocket类
(1、)Socket类
(2、)ServerSocket类
5、常用方法
三、数据报编程
1、java.net包提供了Datagram-Packet类和DatagramSocket类,这两个类可实现基于UDP的网络程序设计
2、使用Datagram-Socket类表示无连接的socket,用来接收和发送数据报。
3、接收和要发送的数据报内容保存在DatagramPacket对象中。
4、DatagramPacket类
(1、)用于处理报文,将byte数组、目标地址、目标端口等数据封装成报文或者将报文拆卸成byte数组
(2、)在创建一个发送端和接收端的DatagramPacket对象时,使用的构造方法不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组,还需要指定发送端IP地址和端口号
(3、)DatagramPacket(byte[]buf,int length)。
[1、] 构造DatagramPacket,数据装进buf数组,用来接收长度为length的数据包。该方法没有指定IP地址和端口号,其创建的对象只能用于接收端。
(4、)DatagramPacket(byte[]buf,int length,InetAddress address,int port)。
[1、] 从buf数组中,取出长度为length的数据创建数据包对象,发送到指定主机(address)的指定端口号(port)。该方法创建的对象通常用于发送端。
(5、)DatagramPacket(byte[]buf,int offset,int length)。
[1、] 构造DatagramPacket,用来接收长度为length的包,在缓冲区中指定了偏移量offset参数,该参数用于指定接收到的数据在放入buf缓冲数组时是从offset处开始的。
5、DatagramSocket类
(1、)是接收和发送UDP的Socket实例。
(2、)数据报套接字是包投递服务的发送或接收点,每个在数据报套接字上发送或接收的包都是单独编址和路由的。
(3、)从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。
(4、)DatagramSocket()
[1、] 构造数据报套接字并将其绑定到本地主机上任何可用的端口。通常系统会分配一个没有被其他网络程序所使用的端口号,用于客户端编程。
(5、)DatagramSocket(int port)
[1、] 创建实例,并固定监听Port端口的报文。创建数据报套接字并将其绑定到本地主机上的指定端口。既可用于接收端又可用于发送端。
(6、)DatagramSocket(int port,InetAddress laddr)
[1、] 创建数据报套接字,将其绑定到指定的本地地址。当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自laddr的报文。