TCP/UDP/HTTP三次握手四次挥手网络分层
2021-02-25 16:58:39 39 举报
AI智能生成
TCP/UDP,三次握手,四次挥手,网络分层,HTTP
作者其他创作
大纲/内容
喜欢收藏+点赞👍 谢谢
网络分层
OSI 七层模型
应、表、会、传、网、链、物
TCP/IP 四层模型
应用层、传输层、网络层、数据链路层
综合网络五层模型
应用层、传输层、网络层、数据链路层、物理层
应用层FTP/DNS/HTTP
DNS域名解析过程
先查找本地的host文件是否有配置域名解析,本地没有的情况下就去运营商查询
HTTP协议
HTTP是超文本传输协议,基于TCP,稳定
http协议是一种无状态协议,服务器为了记住用户状态,采用的是session机制
session机制原理:服务器会自动生成会话级别的cookie来保存session标识
HTTP报文格式
请求报文
请求行:包含请求方法、URI、HTTP版本信息
请求首部字段
请求内容实体
响应报文
状态行:包含HTTP版本、状态码、状态码的原因短语
响应首部字段
响应内容实体
HTTP中重定向和请求转发的区别?
本质区别
转发是服务器行为
重定向是客户端行为
转发:一次请求,发生在服务器内部的跳转,保存在request对象中的数据不会丢失
重定向:多次请求,发生在客户端的跳转,浏览器地址发生变化,request对象中的数据会丢失,此时需要用到session对象
面试官提问:后台程序想跳转到百度,应该用重定向还是转发?
重定向,因为转发的范围,限制在服务器内部
HTTP 有哪些问题?
通信使用明文不加密,内容可能被窃听
不验证通信方身份,可能遭到伪装
无法验证报文完整性,可能被篡改
HTTPS
HTTP采用混合加密机制,在证书验证阶段使用的是非对称加密,在数据传输阶段采用的是对称加密
HTTPS的传输过程
证书验证阶段
客户端(浏览器)发起HTTPS请求
服务端返回证书(包含公钥)给客户端
客户端检验证书的合法性,不合法则警告
数据传输阶段
验证证书合法后,在本地生成随机数
通过公钥加密随机数后发送到服务端
服务端通过私钥对随机数进行解密
之后的数据交互通过对称加密算法进行加解密
传输过程
两种加密机制
对称加密常用AES算法
客户端和服务器都使用了同一个密钥加密,效率较高
缺点是不够安全;密钥泄漏则会导致信息被破解
非对称加密常用RSA算法
分为了公开密钥和私有密钥,公开密钥可以在网络上传输
使用公钥加密后的内容只有私钥才能解密,效率较低
常见问题
HTTPS为什么安全?
因为HTTPS采用了SSL加密传输协议,使用密文传输,保证数据传输的安全
为什么数据传输是用对称加密?
首先非对称加解密的效率非常低,其次一对公私钥只能实现单向的加解密
为什么需要CA认证机构颁发证书?
防止中间人攻击。如果所有机构都可以颁发证书,那么中间人也可以伪造
浏览器如何验证证书的合法性?这些条件都满足才认证为合法
验证域名、有效期等信息是否正确
判断证书来源是否合法(根证书地址)
判断证书是否被篡改,需要与CA服务器进行校验
判断证书是否已吊销(通过CRL证书注销列表和OCSP在线证书状态协议来判定)
本地随机数被窃取怎么办?如何保证随机数不会被窃取?
其实HTTPS 并不保证随机数的安全,HTTPS保证的只是传输过程安全,而随机数存储于本地,本地的安全属于另一安全范畴,应对的措施有安装杀毒软件、反木马、浏览器升级修复漏洞等
用了HTTPS会被抓包吗?
会被抓包,不过正常情况下抓包工具抓到的内容是加密的,无法直接查看
但是对于浏览器提示有安全风险的网站,用户仍然授权访问的话是有被抓包的风险的
HTTPS只防止用户在不知情的情况下通信被监听,如果主动授信则不能保证安全性
HTTP和HTTPS的区别?
http传输信息是明文传输
https加入了SSL加密传输协议,更安全
http使用的是80端口,https默认443端口
GET和POST的区别?
GET
GET重点是从服务器上获取资源
GET传输数据量小,因为受URL长度限制,但是效率高
GET是不安全的,因为URL是可见的,可能会泄漏私密信息
GET方式只支持ASCII字符,向服务器传的中文字符可能会乱码
POST
POST重点是向服务器发送数据
post可以传输大量数据,所以上传文件时只能用post
POST比GET安全性高,将字段和对应值封存在请求实体中发送给服务器
POST支持标准字符集,可以正确传递中文字符
传输控制层TCP/UDP
区别
两者都属于 传输层协议三握四挥 保证连接可靠
TCP协议是面向连接的、可靠的协议,效率低(字节流)
UDP协议是面向无连接,不可靠的协议,效率高(报文)
TCP可靠连接
三次握手
客户端先发送一个建立连接的报文给服务端(SYN=1,seq=x(随机序号))
服务端收到请求后,向客户端回传消息(SYN=1,seq=y,ACK=1,ack=x+1)
客户端收到应答后,最后通知服务端(ACK=1,ack=y+1)此时建立连接成功
为什么不是两次握手?
第三次握手是让客户端确认服务端返回的响应是否是正确,如果不正确则不建立连接
如果在第二次握手的时候就建立了连接,不能避免因为网络延迟造成不必要的服务器开销
四次挥手
客户端发送一个断开连接的报文给服务端(FIN=1,seq=x(增长序号))
服务端收到请求后,可能手头还有数据没处理完,所以先回复确认消息给客户端(ACK=1,ack=x+1)
服务端处理完数据后,通知客户端断开连接(FIN=1,seq=y)此时服务端停止发送数据,保持接收
客户端收到响应后通知服务端(ACK=1,ack=y+1)客户端等待2MSL后关闭,此时断开连接
为什么不是三次挥手?
释放连接时,服务端是很被动的,突然接到客户端释放连接的请求不能立马释放,而是先返回确认报文,等数据处理完再返回释放连接的响应,对比三次握手,服务器在响应时多了一步操作
为什么要等待2MSL?
MSL是一段TCP报文在传输过程中的最大生存期
服务器端在1MSL内没有收到客户端发出的确认报文会再次向客户端发出同意关闭请求客户端等待2MSL再关闭,在此期间没有收到服务端的请求,说明服务端已经正常关闭
TCP报文格式
TCP首部(报头)
数据
源端口号(16位)| 目的端口号(16位)
序号(32位)
seq
确认号(32位)
ack
数据偏移(4位)| 保留6位|6个标志位(URG、ACK、PSH、RST、SYN、FIN,窗口大小(16位)
校验和(16位)| 紧急指针(16位)
选项(长度可变)| 填充
TCP报文段的数据部分
网络层 IP
链路层 ARP
物理层 MAC
面试连环炮
浏览器从输入地址发起请求到相应都经历了什么?
DNS 解析:将域名解析成 IP 地址
建立连接:TCP 三次握手
客户端在应用层发送一个 HTTP 请求
服务器处理请求,并返回 HTTP 报文
浏览器解析渲染页面
断开连接:TCP 四次挥手
你刚才有谈到 tcp/ip 的分层,能详细说下吗?
应用层
主要是与应用通信使用到的协议,比如:HTTP、FTP、DNS、SSH
传输层
为应用层提供在两台机器之间数据传输,有两种协议:TCP、UDP
网络层
两台机器之间在传输的过程中会经过多个路由器有多条路线,网络层主要是从中选择一条路线
数据链路层
用来处理连接网络的硬件部分,比如说网卡、设备驱动等
在 tcp/ip 的分层里面,当客户端发起http请求到达服务端的过程中,数据包的封装以及解包的过程是怎样的?
客户端在应用层(Http协议)发起一个HTTP请求
传输层(TCP协议)把Http请求数据包分隔成小的数据包,并打好序
网络层(IP协议)收到数据包后选择发送路径
服务器收到数据后按照顺序往上发送,直到应用层收到数据
总结:在发送方每经过一层,就会被加上该层的首部信息接收方接受到数据后,在每一个层会去掉对应的首部信息
tcp 如何保证数据可靠到达目的地?
三次握手四次挥手
为什么说 http 协议无状态协议?怎么解决 http 协议无状态?
HTTP协议本身是不保存状态的,自身不对请求和响应的通信状态进行保存,所以是无状态的协议
引入 Session 机制
Cookie 和 Session 有什么区别?
存在位置
cookie 存在于客户端的本地文件中
session 存在于服务器的内存中
存储格式
session:value为对象,Object类型
cookie:value为字符串,如果存储对象,则转换为json
存储大小
session 受服务器内存限制
cookie 一般最大为 4k
安全性
cookie 是以明文的方式存放在客户端的,安全性低
session 存放于服务器的内存中,所以安全性好
生命周期
cookie 的生命周期是客户端控制的,默认是会话级别的,随着浏览器关闭而消失非会话级别的cookie,通过设置有效期来控制,比如“7天免登录”功能
session 的生命周期是服务器控制,默认是30分钟,用户关闭浏览器session也不会消失
网络传输量
cookie 会传递消息给服务器所以会产生网络传输
session 本身存放于服务器,不会有传送流量
访问范围
cookie 为多个用户浏览器共享
session 为一个用户浏览器独享
常见的 http 协议状态码有哪些?
1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务端错误--服务器未能实现合法的请求
0 条评论
下一页