网络通信协议分层及各层解决的问题:
物理层:
通过物理电气接口实现互联设备间的比特形式的信息传输。
数据链路层:
网络相邻节点设备间二进制信息传输的数据通道,是一种点到点的通信。数据链路层负责数据通道的建立与拆除,当物理层受到干扰而发生传输错误时,链路层可以对数据进行检错和纠错。
网络层:
解决跨越多个链路甚至不同网络设备间的通信问题(路由选择、流量控制、传输确认、中断、差错及故障恢复等),是一种端到端的通信。
传输层:
解决处于不同网络设备间的通信连接、通信管理,对上层需要通信的数据信息分解为标准的适于传输的数据单元,这些数据单元到达终端后能对这些数据单元进行重新排序和整合。
会话层:
为用户交互信息而按特定规律建立的连接,提供会话地址和会话管理服务。
表示层:
将会话层得到的数据转化为应用层可以理解的表达形式,或者将应用层数据转化为会话层可以传输的形式。
应用层:面向特定的网络应用提供服务,例如网页传输、文件传送、邮件收发、终端控制、网络设备管理等。
总的来说,网络通信协议的分层就像送信时为了安全方便而给信套上一层又一层信封,送到目的地后再一层一层打开。
TCP和UDP协议的不同:
TCP协议是可靠的而UDP协议是不可靠的。
TCP传输数据前需要先通过“三次握手”建立连接通道,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据,且能确保接收方完全正确地获取全部数据。
UDP的每个数据报都是都是一个独立的信息,包括完整的源地址和目的地址,但传输数据时有大小限制,且信息能否送到以及信息内容的准确性都无法被保证。
Java网络编程:
Java网络编程是从传输层开始的。基于应用层时,选择高层次网络编程;基于传输层时,选择低层次网络编程。
Socket编程和数据报编程时目的地址和端口号分别需要在什么地方指出:
socket编程时目的地址和端口需要在创建Socket对象(表示通信通道的一端)时指出;数据报编程时目的地和端口需要在创建DatagramPacket对象(一个数据报)时指出。
利用URLConnection对象编写程序返回某网站的首页,并将首页内容存放到文件当中:
import java.net.*;
import java.io.*;
public class RULReader {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
URL tirc = new URL("http://baidu.com");
File file = new File("D:\\test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream()));
FileWriter filewriter = new FileWriter(file);
String inputLine;
while((inputLine = in.readLine()) != null) {
filewriter.write(inputLine);
}
filewriter.close();
}
}