欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算机网络--应用层Web简单介绍

程序员文章站 2024-02-21 22:16:28
...

计算机网络养成:第六天

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是无状态的

服务器并不维护关于客户的任何信息

因为维护状态的协议很复杂【必须维护历史信息(状态),如果服务端/客户端死机,它们的状态信息可能不一样,二者的信息是必须一致的】无状态的服务器能过支持更多的客户端