32.javaEE-OSI/tcp/ip/http

本文的架构图
在这里插入图片描述

一.OSI七层模型

OSI七层模型的表示为:
在这里插入图片描述
数据包的打包方式为:
在这里插入图片描述

物理层:
主要是物理连接,光纤,电缆等物理设备.

数据链路层:
早期的时候,数据链路层就是来对电信号来做分组的。以前每个公司都有自己的分组方式,非常的乱,后来形成了统一的标准(标准就是协议),即以太网协议Ethernet。

网路层
ipV4协议,ipv6协议,主要是端口连接之间的协议.

传输层
传输层主要是数据传输的协议,建立端口到端口的通信;
1.tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
2.udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

应用层
用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。主要协议有http协议,FTP协议.等

二.TCP/UDP

1.tcp连接3次握手?4次挥手?
(1) 三次握手:握手过程中使用了 TCP 的标志(flag) SYN(synchronize)表示请求同步,一般值为1.
ACK(acknowledgement) 表示确认连接,确认回复,值为seq的值+1,表示同步的数据位置.
Seq 表示传输数据的起始位置.
FIN 表示主动发起断开连接的请求.

第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,完成三次握手。
在这里插入图片描述

2)、四次挥手:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。先进行关闭的一方将执行主动关闭,而另一方被动关闭。

1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
2.服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
3.服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
4.客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
在这里插入图片描述

2.tcp协议和udp协议的区别?

1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制); UDP提供无连接的传输,通信前不需要建立连接。
2) TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。
3)TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组; UDP是面向数据报的传输,没有分组开销。
4)TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制和流量控制机制。

tcp协议的详情参考文章:
https://www.toutiao.com/i6921339628444205581/
tcp状态转换图参考文章:
https://www.pianshen.com/article/6579280764/

三.http协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。

具体说,HTTP协议中主要规定了两个内容:
(1)规定了浏览器该如何给服务器发送请求信息(即请求信息的格式)
(2)同时也规定了服务器该如何给浏览器做响应信息(即响应信息的格式)

*Http工作时遵循的基本原则(了解):
(1) 一次请求只对应一次响应
(2) 只能是浏览器向服务器发送请求, 服务器只能等待浏览器的请求, 再根据请求做出回应.

HTTP协议详解

一.http请求
在这里插入图片描述
1、请求行(包含了请求方式、请求资源的路径、遵循的协议及版本)

GET:请求方式,在HTTP协议中一共规定了7种请求方式, 只用GET和POST
/news3/1.html:请求资源的路径
HTTP/1.1:浏览器发送请求时所使用的协议及版本

2、若干请求头
http协议中请求头非常多,下面列出常见的请求头及其功能:

Accept: text/html,image/*
– 通知服务器当前浏览器可以接受那些格式的数据
Host: localhost
–浏览器所访问的虚拟主机的名称

3、请求实体内容
如果请求方式是GET提交,请求实体中没有数据
只有当请求方式为POST提交,并且请求中携带了数据, 请求实体才会有内容
只有当使用表单(form),并且在表单标签上明确的通过method属性指定提交方式为POST时,才是POST提交,其他的请求都是GET提交

二.HTTP响应
在这里插入图片描述
1、状态行(包含协议及版本、状态码、描述短语)

HTTP/1.1:服务器做出响应时遵循的协议及版本
200:状态码(一个三位的数字), 表示服务器处理请求的结果如何,200表示服务器成功的处理请求
200: 服务器成功的处理了请求
404: 表示客户端请求的资源不存在!
500: 表示服务器端发生了错误!
OK:描述短语, 也是用来表示服务器处理请求的结果。

2、若干响应头
http协议中响应头也非常多,下面列出部分常见的响应头及其功能:

Content-Length: 80
– 服务器发送的数据的大小,单位是字节。
Content-Type: text/html; charset=UTF-8
– 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据
Refresh: 3;url=http://www.tedu.cn
– 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址

3、响应实体内容
响应实体中的内容就是浏览器所请求文件的内容。
例如,浏览器请求服务器中的一个1.html文件,那么1.html文件的所有内容会通过响应实体发送给浏览器

1.html文件的内容:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
</head>
<body>
	<h1>Hello tedu</h1>
</body>
</html>

三.http协议中的请求方式
HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET
向指定的资源发出“显示”请求。

HEAD
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT
向指定资源位置上传其最新内容。

DELETE
请求服务器删除Request-URI所标识的资源。

TRACE
回显服务器收到的请求,主要用于测试或诊断。

OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

get请求和post请求的区别?

1.在浏览器进行回退操作时,get请求是无害的,而post请求则会重新请求一次
2.get请求参数是连接在url后面的,而post请求参数是存放在requestbody内的
3.get请求因为浏览器对url长度有限制(不同浏览器长度限制不一样)对传参数量有限制,而post请求因为参数存放在requestbody内所以参数数量没有限制(事实上get请求也能在requestbody内携带参数,只不过不符合规定,有的浏览器能够获取到数据,而有的不能)
4.因为get请求参数暴露在url上,所以安全方面post比get更加安全 get请求浏览器会主动cache,post并不会,除非主动设置
5.get请求参数会保存在浏览器历史记录内,post请求并不会 get请求只能进行url编码,而post请求可以支持多种编码方式
6.get请求产生1个tcp数据包,post请求产生2个tcp数据包;浏览器在发送get请求时会将header和data一起发送给服务器,服务器返回200状态码,而在发送post请求时,会先将header发送给服务器,服务器返回100,之后再将data发送给服务器,服务器返回200 OK

四.HTTP状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:

1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

在这里插入图片描述

五.URL
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

https://editor.csdn.net/md?articleId=104612043

传送协议。 例如:https
层级URL标记符号(为[//],固定不变) 例如:/路径
访问资源需要的凭证信息(可省略)例如:cookie
服务器。(通常为域名,有时为IP地址)例如:editor.csdn.net域名下的ip
端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)例如:默认80
路径。(以“/”字符区别路径中的每一个目录名称)例如:/md
查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
片段。以“#”字符为起点

http请求详解图:
在这里插入图片描述

面试问题

传输层

tcp与udp的区别?
直接说原理即可.
tcp三次握手与四次挥手

1.为什么需要三次握手?
2.3次握手的状态转换图
3.为什么需要四次挥手?
4.四次挥手的状态转换图.

tcp怎样保证可靠性的?

1.停止等待协议–超时重传–ack机制
2.顺序–seq
3.流控—滑动窗口
4.网络拥塞—慢开始,慢加速,快从传

tcp的状态转换图

应用层

DNS解析过程

第一步:浏览器查询缓存
第二步:查询本地hosts文件
第三步:查询本地域名解析服务器(你的入网的网络服务商提供的)
第四步:递归向上查询根域名服务器等

http与https之间的区别

1.产生原因及时间
2.底层原理
3.优缺点

http请求方式
8种请求方式:POST/GET/PUT/DELETE等

http请求头中包含的内容

1.请求相关的
协议 及协议版本
URL路径
连接方式
cookie
2.接受相关的
代理
本机接收语言
接收数据类型

http1.0和1.1以及2.0之间的区别

1.0与1.1最大的区别:
1.0是短连接,1.1是长连接
1.1与2.0的区别
2.0默认使用https请求
2.0 采用多路复用的模式,大大增加了请求和响应的并发量
2.0根据你本次的请求会有一些默认推送,推送本次请求相关联的一些数据,减少请求量.

一次https请求的过程

第一步: DNS解析得到IP地址 (参考dns解析过程)
第二步:与服务器进行TCP连接(参考TCP3次握手)
第三步:建立SSL会话
1.服务器将CA证书发给客户端
2.客户端校验通过
3.客户端随机生成对称秘钥
4.客户端将秘钥发送可服务器
5.双方通过此秘钥进行会话
第四步:发送与收取数据
第五步:TCP连接断开(参考TCP四次挥手)

7.相应状态码

网络安全

怎样保证接口请求的安全?

1.传输协议(使用https协议)
2.数据加密(加所有的数据加密)
3.身份校验,token签名(身份及权限校验)
4.每次请求,添加时间戳stamp,防止重发攻击
5.IP黑白名单

加密的方式?什么是RSA

对称加密
MD5加密
非对称加密
RSA加密,及其原理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我用Spring5的aop应用报这个错误Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\ecliple\web5\WEB-INF\applicationContext.xml]; nested exception is java.nio.file.NoSuchFileException: WEB-INF\applicationContext.xml,他说我的applicationContext.xml文件不存在,可是我明明有这个文件,另外我的web.xml需要更改吗<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation </param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <display-name>Struts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> <!--2.5版本的写法 --> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
05-30

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值