TCP/IP五层模型
应用层
作用:
为用户的应用进程提供网络通信服务;
HTTP协议
数据报格式
HTTP请求:
①起始行:包括请求方法,URL和版本号(它们之间以空格分割);
②请求头部信息:包括Content-Length、Content-Type等信息内容,每个属性独占一行,以键值对的形式存在(如Content-Type: text/html),用冒号加空格分割;
③空行:代表请求头部信息结束;
④body:http请求正文;
Http响应:
①起始行:包括请求的版本号、状态码、状态码描述(之间以空格分割);
②响应头部信息::包括Content-Length、Content-Type等信息内容,每个属性独占一行,以键值对的形式存在(如Content-Type: text/html),用冒号加空格分割;
③空行:表示响应头部信息结束;
④body:http响应正文;
Http的方法
方法 | 说明 |
---|---|
Get | 获取资源 |
Post | 传输实体 |
Put | 传输文件 |
Head | 获取报文头首部 |
Delete | 删除文件 |
Options | 询问支持的方法 |
Trace | 追踪访问路径 |
Get和Post的区别
- Get方法请求的数据在URL中,所有人可见;Post方法请求的数据在请求体的body部分;
- Get方法可以收藏为书签、缓存,Post不行;
- Get方法请求的数据长度有上限,而Post没有;
- Get方法相对Post方法来说,安全性较弱;
状态码
类别 | 描述 | |
---|---|---|
1xx | 信息类状态码 | 接收的请求正在处理 |
2xx | 成功类状态码 | 请求正常处理完毕 |
3xx | 重定向类状态码 | 需要进行附加操作完成 |
4xx | 客户端错误状态码 | 服务器无法处理请求 |
5xx | 服务器错误状态码 | 服务器处理请求出错 |
常见Http状态码及描述
状态码 | 英文名称 | 中文描述 |
---|---|---|
200 | OK | http请求成功 |
301 | Moved Permanently | 该状态码表示所请求的URI资源路径已经改变,新的URL会在响应的Location:头字段里找到 |
302 | Found | 该状态码表示所请求的URI资源路径临时改变,并且还可能继续改变.因此客户端在以后访问时还得继续使用该URI.新的URL会在响应的Location:头字段里找到 |
303 | See Other | 服务器发送该响应用来引导客户端使用GET方法访问另外一个URI. |
400 | Bad Request | 因发送的请求语法错误,服务器无法正常读取. |
403 | Forbidden(禁止访问) | 客户端没有权利访问所请求内容,服务器拒绝本次请求. |
404 | Not Found | 服务器找不到所请求的资源. |
405 | Method Not Allowed | 该请求使用的方法被服务器端禁止使用 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
Http和Https
Http协议运行在TCP上,使用明文传输,客户端和服务端都无法验证对方的身份;
Https是添上SSL外壳的Http,运行于SSL上,SSL运行于TCP上,是添加了加密和认证机制的Http;
Http和Https的区别:
①http默认以http://开头,https默认以https://开头;
②http默认端口是80,https默认端口是443;
③http是不安全的,信息是明文传输;https是安全的,信息是密文传输;
④在OSI模型中,http工作于应用层,https工作于传输层;
⑤由于https需要加密好人认证证书,会消耗更多的cpu资源;
DNS域名解析协议
Servlet
概念
Servlet是用来处理客户端请求并产生动态网页内容的Java类生命周期
-
初始化
调用init()方法,仅执行一次,负责初始化Servlet对象,创建Servlet实例;
-
建立服务请求
每当请求一个HTTPServlet对象的时候,该对象的Service()方法就要被调 用,一般只重写doPost/doGet类似的方法;
-
销毁
destory()方法仅执行一次,在服务端停止且卸载Servlet的时候执行该方法, 当Servlet对象退出生命周期的时候,负责释放占用的资源;
Session
概念
Session指的是Web系统的会话,用户在登陆以后,在退出之前都是一个会话;作用
session是在用户登录的时候,服务器保存用户信息(Map[value,session] ),在之后访问敏感资源的时候,通过key=value,服务器通过key对应到value,然后在map中获取用户身份信息;Cookie
作用
Cookie是一小段文本信息,在客户端保存用户的身份信息;使用场景
免密码登录、记住密码生活实例区分cookie和session
烧烤店店在开业的时候总会搞活动,消费满2000,送200瓶啤酒;但是对于大多数人群来说,一次性消费2000是不太现实的,所以得想办法记录下来:
①第一种就是给用户发一张卡片,每次消费多少,用户就在上面记录多少;
②第二种就是发给用户的卡片是有卡号的,每次消费多少,店员就在机器上记录一下;
对于第一种来说就是客户端自己记录,也就是cookie;对于第二种来说就是在服务器端记录,即session;
Cookie和Session的联系
服务器在第一次接收到请求的时候,会生成一个会话,与此同时也会产生一个SessionId;
并通过响应头中的Set-Cookie:JSESSIONID=xxxxxxx 命令,要求在客户端生成Cookie,客户端收到响应后,会在本机生成cookie信息,当本次会话完成Cookie也就结束了;
以后每次向服务器发起请求,请求头都会携带Cookie信息,然后,服务器通过读取请求头中的Cookie信息,获取JSESSIONID的值,得到本次请求的Session id;
传输层
传输层五元组
源端口、目的端口、源IP、目的IP、协议号
查看一个进程的端口号
Windows系统
netstat -ano|findstr 端口号
Linux系统
nestat -anp|grep 端口号
TCP协议
源/目的端口:表示数据从哪个进程来,去哪个进程;
ACK:确认号
SYN:请求建立连接
FIN:请求断开连接
TCP协议如何保证可靠性
①协议头中的16位校验和和序列号,确保了每一个分段只能被正确接收一次;
②确认应答机制:在发送数据包的同时携带的有序列号,响应的数据包中携带的有确认号,这样发送方就可以确认有哪些数据包被接收了;
③超时重传机制:如果主机A在一定时间(2MSL)中没有收到主机B发来的确认信息,就会重新发送一遍数据;
④连接管理机制:正常情况下TCP需要三次握手四次挥手才能断开连接;
⑤拥塞控制:发送端在不清楚网络状况的情况下,不会贸然发送大量的数据包,因为可能会导致网络拥塞;(也就是慢开始,快重传,快恢复);
⑥流量控制:采用可变长的滑动窗口来控制收发双方保持步调一致;接收端接受能力有限(如果发送的太快,导致接收端缓存区被塞满,就会产生丢包),需要告知发送端发送数据的大小,通过窗口大小字段来设置;
三次握手和四次挥手
三次握手
三次握手的流程:
①客户端向服务端发送TCP连接请求数据包;
②服务端接收到客户端的请求后,确认自己收到了客户端的请求,并向客户端发送数据包,请求和客户端建立连接;
③由于TCP是全双工通信,在前两次的过程中证明了客户端的发送功能和客户端的接收功能是没问题的,第三次客户端在向服务端发送响应数据包证明服务端是没问题的,这也间接证明了TCP是可靠的;
四次挥手:
四次挥手流程:
①客户端向服务端发起断开连接的请求,将FIN位置1;
②服务端收到客户端的请求,此时服务端不一定能够立刻做好断开连接的准备,它可能正在发送(接收)文件;
③当服务端做好了断开连接的准备,向客户端发起断开连接的请求,将FIN位置为1;
④客户端响应服务端断开连接的请求,并发送确认ACK给服务端;
为什么不能两次握手?
TCP是全双工通信,两次握手只能表明客户端发送、服务端接收没问题,不能保证服务端发送、客户端接收没问题;因此需要三次握手来保证;
为什么不能三次挥手?
如果将四次挥手中的②③步骤合为一步,那么就不能保证服务端能正确无误的将客户端发过来的文件处理完毕,可能会造成文件丢失等情况;
拥塞控制
- 慢启动:一开始只发送少量数据,探测一下网络拥塞程度,然后逐渐增大传输的数据,拥塞窗口也就会小到大指数增长;
- 拥塞避免:当拥塞窗口达到慢启动的阈值的时候,使用拥塞算法让拥塞窗口缓慢增加,不再指数增加,而是加法增大(每经过一个往返就把窗口大小加1),这样拥塞窗口就会按照线性规律缓慢增加;
- 快重传与快恢复:快速恢复丢失的数据包;
UDP协议
特点
- 无连接:在传输的时候不需要建立连接,只需要知道目的端口和IP就可以进行传输;
- 不可靠:UDP没有确认重传机制,如果在传输过程中发生故障导致数据无 法发送到对方,UDP也不会向应用层提交任何错误信息;
- 面向数据报:应用层交给UDP多长的数据报文,UDP就原样发送;
- 缓冲区:UDP有接收缓冲区,没有发送缓冲区(如果缓冲区满了,在到达的数据就只能被丢弃);
- UDP能够传输的数据是有长度限制的,不能超过64K;
TCP协议和UDP协议的区别
- TCP是面向连接的,UDP是无连接的;
- TCP是面向字节流,UDP是面向数据报;
- TCP是可靠传输,UDP是不可靠传输;
在浏览器输入URL发生了什么?
①输入URL以后,浏览器先查看浏览器缓存-系统缓存-路由器缓存种是否有,如果缓存中有,就直接返回页面;如果没有那么浏览器就像DNS服务器发起请求解析URL,解析URL后就会得到相应的域名和IP地址;
②根据得到的IP地址和默认的端口号,浏览器就向服务器发起请求TCP连接,于是浏览器和服务器进行三次握手建立连接;
③服务器对请求作出响应,并把响应结果返回给浏览器;
④浏览器向服务器发起断开TCP的请求,于是浏览器和服务器进行四次会后释放连接;
⑤浏览器开始根据请求得到的相应的资源开始渲染页面呈现给用户;
网络层
ARP协议
作用
通过IP地址获取Mac地址
RARP协议
作用
反向地址解析协议,将Mac地址解析为IP地址
RIP协议
作用
路由信息协议,决定IP转发的下一跳;
数据链路层
数据链路层的功能主要是保证相邻接点之间的无差错传输,是点到点的传输;
物理层
传输二进制比特流