一、网络概述
1.网络的概念和分类
计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。下面先对网络编程的一些基础知识进行介绍,最后给出使用Java语言进行网络编程的实例。
按照地理覆盖范围,计算机网络可以分为局域网(LAN)、城域网(MAN)、广域网(WAN)。
2.网络分层模型
主要有2个:开放系统互联(OSI)参考模型、TCP/IP模型
1)OSI参考模型的7个层次:
- 物理层
物理层处于OSI的最底层,是整个开放系统的基础。物理层涉及通信信道上传输的原始比特流(bits),它的功能主要是为数据端设备提供传送数据的通路以及传输数据。
- 数据链路层
数据链路层的主要任务是实现计算机网络中相邻节点之间的可靠传输,把原始的、有差错的物理传输线路加上数据链路协议以后,构成逻辑上可靠的数据链路。需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧是对物理层的原始比特流进行界定,数据链路层也能够对帧的丢失进行处理。
- 网络层
网络层涉及源主机节点到目的主机节点之间可靠的网络传输,它需要完成的功能主要包括路由选择、网络寻址、流量控制、拥塞控制、网络互连等。
- 传输层
传输层起着承上启下的作用,涉及源端节点到目的端节点之间可靠的信息传输。传输层需要解决跨越网络连接的建立和释放,对底层不可靠的网络,建立连接时需要三次握手,释放连接时需要四次挥手。
- 会话层和表示层
会话层的主要功能是负责应用程序之间建立、维持和中断会话,同时也提供对设备和结点之间的会话控制,协调系统和服务之间的交流,并通过提供单工、半双工和全双工3种不同的通信方式,使系统和服务之间有序地进行通信。
表示层关心所传输数据信息的格式定义,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。
- 应用层
应用层为OSI的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。
2)传输协议/网络互联协议(TCP/IP)模型
早期的TCP/IP模型时4层结构,后来借鉴OSI7层模型,将网络接口层划分为物理层和数据链路层,形成新的5层结构。
- 网络接口层
TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着物理层和数据链路层。
- 互联网层 ( IP层 )
互联网层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。互联网层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。
- 传输层 ( TCP层 )
TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。
- 应用层
应用层为Internet中的各种网络应用提供服务。
二、IP地址介绍
1.IP地址概述
网络中的每台机器为一个节点(node)。大多数节点是计算机,但是打印机、路由器、网桥、网关、ATM机也都是节点。每个网络节点都有地址 (IP地址),这是用于唯一标识节点的一个字节序列。每个地址中的字节越多,可用的地址就越多,就可以有更多的设备同时连入网络。
IP地址目前存在IPv4和IPv6两种标准。
2.IP地址的组成和分类
1)IP地址的组成
IPv4采用点分四组或点分十进制表示,例如:165.195.130.107.点分四组表示法由四个用点分隔的十进制数组成,每个数字是一个非负整数,范围为[0,255],代表整个IP地址的四分之一。在很多情况下,我们更关注IPv4地址的二进制结构,例如点分四组表示的10.0.0.255,二进制表示为:00001010 00000000 00000000 11111111。
IPv6地址的长度是128位,是IPv4地址长度的四倍,IPv6地址的传统表示方法是采用称为块或字段的四个十六进制数,这些被称为块或字段的数用冒号分隔,例如一个包含8个块的IPv6地址:5f05:2000:80ad:5800:0058:0800:2023:1d71。
2)IP地址的分类
IP地址包含网络地址和主机地址,网络地址决定可以分配的最大网络数,主机地址决定网络中可以存在的计算机的最大数量。
IP地址的网络地址由互联网数字分配机构(IANA)统一分配,以确保IP地址的唯一性。IANA将IP地址分为A、B、C、D、E五类。
- A类IP地址:第一组数字表示网络地址,其余三位表示主机地址,有效网络范围为1~126
- B类IP地址:前二组数字表示网络地址,其余两位表示主机地址,有效网络范围为128~191
- C类IP地址:第三组数字表示网络地址,其余一位表示主机地址,有效网络范围为192~223
- D类IP地址:用于组播通信,不能在互联网上作为节点使用,第1个8位的范围为224~239
- E类IP地址:用于科学研究的地址,不能在互联网上作为节点使用,第1个8位的范围为240~254
- 0.0.0.0: 表示当前主机
- 127.0.0.1:等效于localhost或本机IP,一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。http://127.0.0.1:8080 等效 http://localhost:8080
- 255.255.255.255:表示当前子网,一般用于向当前子网广播信息
3)IP地址的配置和检测
1)配置IP地址:控制面板-->本地连接-->属性-->勾选“Internet协议版本4(TCP/IPv4)”复选框,打开属性-->选中“使用下面的IP地址”,并输入IP地址、子网掩码和默认网关(你的网络中连接到其他网络的计算机或路由器)-->选中“使用下面的DNS服务器地址”并输入DNS地址-->点击确定。
实际应用中,在配置局域网(支持DHCP服务)中计算机的IP地址时,为了避免人为输入产生地址冲突的错误,通常选中“自动获得IP地址”选项。
2)使用DOS命令检测IP地址
- windows下可以使用 ipconfig来查看本机IP地址、子网掩码、默认网关等信息,判断TCP/IP属性是否设置正确。
- 使用 ping 命令测试网络是否通畅,检查故障原因。
语法:ping 目标IP地址
另外,可以ping默认网关的IP地址来检测连接是否通畅,ping某一远程计算机来测试是否可以与远程主机正常通信。
三、网络相关的重要概念及作用
1.网络编程
网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。
现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。
在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。
连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。
2.端口
为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。
规定一个设备有216个,也就是65536个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。
使用端口号,可以找到一台设备上唯一的一个程序。
所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。
同一台主机上,任何两个进程不能同时使用同一个端口。
3.域名和DNS域名解析
由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。
域名后缀一般分为国际域名和国内域名,常见的域名后缀有.com(商业组织)、.org(非盈利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。
其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成域名解析。
DNS域名解析过程如下图:
4.网络服务器
网络服务器通常指在网络环境下,具有较高计算能力,能够提供用户特殊服务功能的计算机。下面介绍几种常见的Web服务器:
- Tomcat服务器
目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应用的首选。
- Apache服务器
Apache是目前世界上使用量排名第一的Web服务器软件。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面的优势。因为Apache是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。
其他还有如WebLogic 服务器、WebSphere 服务器、JBoss服务器等服务器,也是使用的比较广泛的。
5.网络通信协议
网络通信协议是为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合。它规定了网络通信时,数据必须采用的格式以及这些格式的意思。
1)应用层:
- HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页)
http是应用层的协议,tcp/ip接受到数据之后通过htp协议来解析。HTTP 负责 web 服务器与 web 浏览器之间的通信。HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。http协议中的报文结构很重要:
-
- request message 首行,头部和主体 首行包括请求类型(get,head,post,put,delete),urL 和http版本
- response 首行包括状态行,状态码(1XX, 2xx成功状态吗,3xx重定向状态吗,4xx:客户端状态吗,为请求到资源,5xx服务器端错误码,500内部错误),简短原因,http版本
HTTP请求方法和响应状态码:
- DNS(Domain Name System)域名系统
- FTP(File Transfer Protocol)文件传输协议
是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(21 + PASV端口范围)的TCP协议即可。
- SFTP(SSH File Transfer Protocol,和FTP不一样)安全文件传送协议
安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
- SCP(Secure copy,based on SSH)SCP是智能网的核心部件,一般由小型机、高性能微机和大型实时高速数据库组成。
scp就是secure copy,是用来进行远程文件复制的,并且整个复制过程是加密的。数据传输使用ssh,并且和使用和ssh相同的认证方式,提供相同的安全保证。
- SSH (Secure Shell)
由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
- SSH是由客户端和服务端的软件组成的:服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接; 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
- 从客户端来看,SSH提供两种级别的安全验证:第一种级别(基于口令的安全验证); 第二种级别(基于密匙的安全验证)。
- SSH 主要有三部分组成: 传输层协议 [SSH-TRANS] ;用户认证协议 [SSH-USERAUTH] ;连接协议 [SSH-CONNECT]。
2)通信层:
- TCP/IP(Transmission Control Protocol/Internet Protocol 三次握手传输协议)
用于计算机网络通信的协议集,即协议族。是internet最基本的协议,不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准。TCP/IP协议族包含诸如IP协议、TCP协议、UDP协议等诸多协议。
- TCP协议(建立数据通道、无限制)
TCP是面向连接的协议,TCP协议采用字节流传输数据,因此每个TCP连接都有3个阶段:连接建立、数据传送和连接释放。连接建立经历三个步骤,通常称为“三次握手”。
TCP三次握手过程如下:
- 第一次握手
客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。(SYN = 1,seq=x) - 第二次握手
服务器收到连接请求报文,如果同意建立连接,向客户机发回确认报文段,并为该TCP连接分配TCP缓存和变量。(SYN=1,ACK=1,seq=y,ack=x+1)。 - 第三次握手
客户机收到服务器的确认报文段后,向服务器给出确认报文段,并且也要给该连接分配缓存和变量。此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(ACK=1,seq=x+1,ack=y+1)。
TCP四次挥手过程如下:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
- 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器关闭客户端的连接,发送一个FIN给客户端。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
- UDP协议(数据打包、有限制、无连接、效率高、不可靠)
即用户数据报协议,是一个无连接协议,在传输数据之前,客户端和服务器并不建立连接和维护连接。UDP协议的主要作用是把网络通信的数据压缩成数据报的形式。
从上图中可以看到,UDP协议十分简单,它由两部分组成:首部和数据。其中,首部仅有8个字节,包括源端口和目的端口,长度(UDP用于数据报的长度)、校验和。
3)网络层:
- IP(Internet Protocol)
IP设计为允许任意两点之间有多个路由,可以绕过被破坏的路由器实现数据包的路由。由于两点间存在多个路由,并且两点间的最短路径可能由于网络业务流量或其他因素而随时间改变,所以构成某个特定数据流的包可能不会采用相同的路由。另外,即使它们全部到达,也可能不会以发送的顺序到达。
- ICMP(Internet Control Message Protocol,主要用于路由发送错误报告)
4)链接层:
- MAC(media access control)