计算机网络养成:第六天
内容导航
Java(打卡第62天)
学习内容
计算机网络----应用层
首先表明一下,我使用的是《计算机网络第7版–自顶向下方法》Kurouse , 我主要是先说明基础的知识,尽量表述的通俗易懂,并且内容很基础,才疏学浅,如果没有帮助到你,我很抱歉,一起学习~一起加油 ~
网络已经有很长时间没有更新了,原因也提到过,但是网络基本的概念,前面已经讲到了的,像基本的protocol,service,还有检查连接的cmd命令transert,前面已经从整体上对网络进行分析,介绍了接入网,核心,边缘,介绍了protcol模型,service,peer,接下来就是自顶向下分析计算机网络,所以最先分析应用层,之前已经大概介绍了应用层的大概,接下来详细分析
Web and HTTP
之前大概介绍了应用层的message交互是要使用传输层的socket接口,socket就是一个整数包含可IP和port等信息,表示当前主机与目标主机的会话关系,而且这个socket只是本地的代号;在OSI模型中,在传输层和应用层之间还有会话层和表示层,但是由于其包容性不好,普遍采用的还是五层的网络结构。传输层提供的service主要又UDP和TCP两种,主要区别就是是否面向连接。关于安全TCP,即在TCP上加载SSL,在网络安全章节详细介绍
那么昨天也提过web,web就是一种应用,而Http就是支持web的协议,那么先来简单看一下web
- web页 :由一些对象组成,对象可以是HTML文件,JPEG图像,Java小程序,声音剪辑文件等,HTML文件本身只是一个空的网页,所以上面的图像之类的还要再次又HTML提供链接访问
- Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用
- 通过URL对每一个对象进行引用,通过协议,用户名,口令,端口等
所以HTML网页中包含了很多URL,客户端访问时,HTML将网页再客户端上面画出来,通过URL链接再将网页上的各种文件画出来,对象指对象,所以非常复杂
URL (Uniform Resource Locator)统一资源定位符
URL是统一资源定位符,对可以从互联网得到的资源的位置和访问方法的一种简洁的表示,是互联网的标准资源地址,每一个文件都有一个唯一的URL。
URL的格式
【协议名】prot : //【用户】user : 【口令】psw&【主机名】www.someSchool.edu /【路径名】someDept/pic.gif【文件名】:port【端口】
比如给一个例子,打开哔哩哔哩网页
https://www.bilibili.com/video/BV1JV411t7ow?p=14
https是协议,之后是主机名,路径和端口号【这里是匿名访问,没有用户口令】
在之前的小欢聊天室中就已经使用过URL,当时是用URL来加载图片,加载图片还有另外的方式
Image icon = getImage("icon.gif");
Image getImage(String filename) {
URLClassLoader urLoader = (URLClassLoader)this.getClass().getClassLoader();//类加载
URL url = null;
Image image = null;
url = urLoader.findResource(filename);
image = Toolkit.getDefaultToolkit().getImage(filename);
MediaTracker mediatracker = new MediaTracker(this);
try {
mediatracker.addImage(image, 0);
mediatracker.waitForID(0);
}catch(InterruptedException e) {
image = null; //线程中断就没有
}
if(mediatracker.isErrorID(0)) {
image = null;
}
return image;
}
//这里就是使用了URL来加载图像文件
可以直接使用BufferedImage 定义之后,使用ImageIO的read方法,传入类的字节码文件getResource方法,就可以获取到导入到包中的图片
这里可以使用java的URL类来看一下URL
try {
URL url = new URL("https://www.bilibili.com/video/BV1JV411t7ow?p=14");
System.out.println("URL是" + url.toString());
System.out.println("协议是" + url.getProtocol());
System.out.println("DNS主机名是" + url.getAuthority());//authroity,获取服务器的域名系统DNS主机名或者IP地址和端口号
System.out.println("query查询是" + url.getQuery());//query查询
System.out.println("用户info是" + url.getUserInfo()); //用户的info,命令,这里为匿名访问,为null
System.out.println("ref是" + url.getRef());
System.out.println("文件是" + url.getFile());
System.out.println("路径是" + url.getPath());
System.out.println("主机是" + url.getHost());
System.out.println("端口号是" + url.getPort());
System.out.println("默认端口号是" + url.getDefaultPort());
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL是https://www.bilibili.com/video/BV1JV411t7ow?p=14
协议是https
DNS主机名是www.bilibili.com
query查询是p=14
用户info是null
ref是null
文件是/video/BV1JV411t7ow?p=14
路径是/video/BV1JV411t7ow
主机是www.bilibili.com
端口号是-1
默认端口号是443
这里就可以清楚看到该网址的各个部分,是没有用户口令的,并且最后的p = 14是查询query
HTTP概况【hype text transpot protocol】超文本传输协议
HTTP :超文本传输协议
- Web的应用层协议
- 使用了客户/服务器模式 ----- 客户 : 请求,接收和显示Web对象的浏览器 ; 服务器 ---- 对请求进行响应,发送对象的Web服务器
- HTTP 1.0 :RFC 1945
- HTTP 1.1 : RFC 2068
HTTP使用的是TCP service,服务过程:
- 客户端发起一个与服务器的TCP连接(建立套接字)端口号为80
- 服务器接收客户的TCP连接
比如原来的服务器端口是80,那么最初由一个等待建立连接的wait socket,s1,当来了一个客户端的连接请求,就会产生一个socket来表示两者的连接关系,java中就是socket.accept方法,有新的socket连接,就会建立新的socket来指代
- 在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)
- TCP连接关闭
HTTP是无状态的
服务器并不维护关于客户的任何信息
因为维护状态的协议很复杂【必须维护历史信息(状态),如果服务端/客户端死机,它们的状态信息可能不一样,二者的信息是必须一致的】无状态的服务器能过支持更多的客户端