1、网络通信协议分几层?各层解决的问题是什么?
物理层:比特流传输
数据链路层:两个相邻结点间的点到点的帧传输
网络层:跨多个链路甚至不同网络设备间的通信问题
传输层:为两主机间的进程通信提供可靠服务
会话层:提供网络中两主机之间会话的建立、维持和终止等
表示层:提供网络传输的标准格式
应用层:直接为用户的应用进程提供服务
2、TCP和UPD协议有什么不同,为什么称TCP是面向连接的可靠协议?
TCP和UDP的不同点
- TCP是基于连接的,UDP是一种无连接的协议,每个数据报是一个独立信息,包括完整的源地址和目的地址。
- 在传输数据量方面,TCP协议可以传输大量数据,UDP传输时有大小限制,每个数据报必须在64KB之内。
- 在可靠性方面,TCP是一个可靠的协议,可以确保接收方完全正确的获取发送方所发送的全部数据。UDP是一个不可靠的协议,不能保证数据报一定被接收方收到,也不能保证次序正确。
- UDP操作简单,传输效率更高。TCP则传输量大,可靠性高。
TCP是面向连接的可靠协议
“三次握手”建立连接,通过“连接请求消息段”、“允许连接消息段”和“连接确认消息段”建立连接。
使用ack机制,发送方向接收方发送数据后,接收方要向发送方发送ack。比如:发送方发送的数据序号是seq,那么接收方会发送seq + 1作为ack,这样发送方就知道接下来要发送序号为seq + 1的数据给接收方。
3、在Java语言当中,网络编程是从协议的什么层次开始的?程序设计时,什么情况选择Java高层次网络编程,什么情况选择低层次网络编程?
Java网络编程从传输层开始。
Java高层次网络编程:使用http协议,可以跨越网络防火墙,适用于面向Internet的通信。
Java低层次网络编程:面向内部网络通信。
4、Socket编程时,目的地址和端口号需要在什么地方指出?使用数据报时,又在什么地方指出?
Socket编程:在创建客户端socket时指出目的机器的地址和端口号。
数据报:使用DatagramPacket类对象作为传输数据的载体,在构造DatagramPacket时指出目的地址。
5、利用URLConnetction对象编写程序返回某网页的首页,并将首页内容存放在文件当中。
将必应主页的内容写入到当前目录下urlreadout.txt中。
import java.net.*;
import java.io.*;
public class URLReader {//声明抛出所有例外
public static void main(String[] args) throws Exception {
try{
URL url = new URL("https://cn.bing.com/");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is,"UTF-8"));
BufferedWriter out = new BufferedWriter(new FileWriter("urlreadout.txt"));
String inputLine;
//从输入流不断的读数据,直到读完为止
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine); //把读入的数据打印到屏幕上
out.write(inputLine+"\r\n");
}
in.close(); //关闭输入流
out.close();
}catch(Exception e){
System.out.println(e);
}
}
}