计算机网络 :
把分布在不同地理区域的计算机与专门的外部设备,
用通信线路连接成一个规模大,功能强的网络系统 ,
而使计算机可以方便的传递信息,共享硬件,软件,数据信息等资源,称为计算机网络.
网络分类 :
规模和范围 : 局域网 , 城域网 , 广域网
网络拓扑结构: 星型 , 总线 , 环形 等
传输介质: 双绞线 ,同轴电缆和光线 等
网络工作模式 :
客户机 / 服务器模式 ( client / server )
浏览器 / 服务器模式 ( browser / server )
对等式网络 ( peer to peer )
专门服务结构 ( Server - Based )
网络通信协议 :
计算机向在网络间进行通信必须遵循一定的标准.
这些标准以协议的形式出现.不同计算机之间必须使用相同的通信协议才能机械能通信.
例如 : 对数据传输速率的限制, 传输数据格式的限制 出错控制等等.
主要的网络协议:
TCP/IP
英文是Transmission Control Protocol/Internet Protocol的缩写,
意思是“传输控制协议/网际协议”
此外还有HTTP , FTP , SMTP , UDP 和 POP3/IMAP 等协议
TCP/IP
它为分散的和不同类型的硬件提供了一个通用的编程接口,
TCP 协议 是面向连接的可靠的数据传输协议
IP 协议 支持网络间连接的数据报通信
基本传输单位是数据包(datagram)
TCP连接的三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),
即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),
此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
IP
为实现Internet上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址---IP地址。
IP地址是数字型的,32位(32bit),由4个 8位的二进制数组成,每8位之间用圆点隔开,
一般在实际中看到的大部分IP地址都是以十进制的数据形式表示的,如192.168.6.101。
IP地址分为5类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数据不同。
. |
地址分类 |
地址范围 |
1 |
A类地址 |
1.0.0.1——126.255.255.254 |
2 |
B类地址 |
128.0.0.1——191.255.255.254 |
3 |
C类地址 |
192.0.0.1——223.255.255.254 |
4 |
D类地址 |
244.0.0.1——239.255.255.254 |
5 |
E类地址 |
240.0.0.1——255.255.255.254 |
关于域名 : 域名容易记忆,不能直接用于网络主机的查询,域名只能被域名服务器解析转化为IP地址后才能起到作用。
关于端口 : 是计算机连接网络的逻辑接口,
通过端口应用机制才可使计算机可能提供多种服务,共享一条物理通道。
端口是一个软件结构,被客户程序或服务程序用来发送和接收数据,一台服务器有256*256个端口
关于端口号: 具有网络功能的应用软件的标识号
Ø0-1023是公认端口号,即已经公认定义或为将要公认定义的软件保留的
Ø1024-65535是并没有公共定义的端口号,用户可以自己定义这些端口的作用。
Ø端口与协议有关:TCP和UDP的端口互不相干
UDP
UDP(User Datagram Protocol)用户数据报协议
(面向无连接的数据传输,不可靠,但效率高)
1.UDP是一种面向无连接的通信协议。UDP向应用程序提供了一种发送封装的原始IP数据报的方法,
并且发送时无需建立连接,不保证可靠数据的传输。一次发送数据不可超过64KB
UDP不被应用于那些使用虚电路的面相直接服务,UDP主要用于面向查询--应答的服务.
UDP的通信基本模式 : 将数据打包,然后将数据发往目的地,接收别人发来的数据包,然后查看数据包中的内容
2.UDP编程所需要的类
DatagramSocket 用来发送和接收数据包的套接字
DatagramPacket 此类表示数据包
DatagramPacket( byte [ ] buf , int length , InetAddress address , int port )
buf-包数据
length -包长度
address -目的地址
port -目的端口号
ds = new DatagramSocket(端口);//创建字buff节数组接收
DatagramPacket dp = new DatagramPacket(X) ; //表示数据包
X
接收时:buff,buff.length/数据包,包长度
1,定义UDPsocket服务
2,定义 一个数据包,因为要存储接收到的字节数据
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息
3,通过socket服务的receive接收方法,将接收到的数据存入已定义好的数据包中,
4 通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
String ip = dp.getAddress().getHostAddress
String data = new String (dp.getData(),0,dp.getLength())
5,关闭流
将接收数据放入str将其输出
并关闭
ds.close();
byte data[ ]=new byte[100];
int length=90;
DatagramPacket pack = new DatagramPacket(data,length);
DatagramSocket receiver = new DatagramSocket(980);
//与发送包时定义的端口号一致
receiver.receive(pack);
——————————————————————————
发送时:
1,创建UDP服务,通过DatagramSocket对象。
2,确定数据,并封装成数据包。
DatagramPacket( byte[ ] buf , int length , Address,port ) ;
3, 通过Socket服务,将已有的数据包发送出去,通过send,
4,关闭资源。
将所送的数据放入str
str. getBytes () , str. getBytes(). length() , InetAddress . getByName( "127.0.0.1" ) , 2046 );//本机IP
ds.send(dp);//将数据发送
并结束
ds.close();
URL
URL(Uniform Resource Locators,统一资源定位器)是一种 资源定位的工具。URL值是使用数字和字母的排列来表示网络中的某一资源(文件、目录、对对象的引用)的地址
URL的基本结构:
<传输协议名称>://〈主机名〉:〈端口号〉/〈文件名〉#〈引用〉
如:http://www.mbalib.com/china/index.htm
http://:代表超文本传输协议
www:代表一个万维网服务器
mbalib.com/:服务器的域名,或服务器名称
China/:子目录,类似于我们的文件夹
Index.htm:是文件夹中的一个文件
/china/index.htm统称为URL路径
URL类位于java.net包中,表示URL地址。
构造方法:
URL(addr);
常用方法:
getProtocol():返回URL中的协议名称
getHost():返回URL中的主机名。
getPort():返回URL中的端口号。如果URL中没有设定端口号,该函数返回-1。
public class URLDemo {
public static void main(String[] args) {
try {
URL url = new
URL("http://www.163.com");
SysO ("the protocol:" + url.getProtocol());
SysO("the hostname:" + url.getHost());
SysO("the port:" + url.getPort());
} catch (MalformedURLException e) {
System.out.println(e);}}}
public class InetAddressDemo {
public static void main(String args[]) throws
UnknownHostException {
InetAddress ia;
ia = InetAddress.getLocalHost();
System.out.println(ia.getHostName());
System.out.println(ia.getHostAddress());
ia = InetAddress.getByName("www.163.com");
System.out.println(ia.getHostName());
System.out.println(ia.getHostAddress());
}
}
附加:web资源访问原理
在浏览器中输入网址后,浏览器先去访问Windows的host文件,获取主机名对应的IP,如果找不到,就去查询DNS,获取主机名对应的IP;查询到IP后,就访问网址的服务器,发送HTTP请求;
1,查询Windows ,获取主机名对应的ip
2,如果没找到就去查询DNS,获取主机名对应的ip
3,用查询到的ip连上服务器
4,发送http请求
5,从请求信息中获取客户端向访问的主机名
6,从请求信息中获取客户端访问的web应用
7,从请求信息中获取客户端想访问的web资源
8,读取相应主机下的,web应用下的web资源
9,用读取到的web资源的数据,创建一个http响应
10,服务器回送http响应
11,浏览器收到HTTP响应后,解析出资源数据显示
请求例如:
GET/mail/1.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Host: www.google.com
Connction:Keep-Alive
此时可以发现主机名起到两个作用:
①用于查询对应的IP
②服务器去获取客户机所想访问的的指定主机
响应例如:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges:bytes
Content-Type-text/html
Content-Lenght: 27
Date:Mon,24,Apr 2015 01:01:01 GMT