网络公开课1
概念*
常见面试题
输入URL发生哪些事 https http1.0 2.0的区别……
OSI七层模型 协议DNS
传输层 三次握手 四次挥手
http
物理层:并不是指光纤电缆那些,那些是设备。只关心如何传输数据,传输的是比特流 0 1。
应用层:数据一般叫报文。比如ajax接口
报文增加一些东西,把应用层的数据进行装包(增加端口)作为数据段。
数据链路层:最终通信是通过网卡来通信的。
物理层拿到帧,依次拆包。
ipv6:8个16位块所组成
ip+mac地址
通过ip找mac
网线传输:最多100米
中继器:放大器
集线器:多口中继器。安全问题 广播浪费流浪
物理层:你给我什么我就转发什么
链路层:交换机
聪明一些。有一张映射表,记住端口和mac地址。
网络层:路由器
让2个不同的网络通信要经历网关。子网掩码
路由器充当了网关的角色。
每一层中比较重要的协议
协议:就是我们所说的约定和规范
https就是http加了安全套接层
主要协议*
应用层:HTTP协议 DHCP DNS
传输层:TCP UDP
网络层:IP ARP
ARP协议
ARP协议:地址转换协议
ARP就会去做广播的操作:
做广播,然后有一个缓存表。
实现端到端的通信
DHCP协议
连上路由器,连上网:自动分配一个IP
DNS协议
域名
有几个点就是几级域名
两大种情况:
域名被解析过了:
自顶级域名往下 一级一级解析返回解析返回……
扩展:UDP通信我找你你返回结束,不用创造三次握手。 域名->根服务器,查找就是递归查找
总结:
DNS解析有两大种情况:
一种是这个域名已经被解析过了,我直接从缓存中取。那么缓存又分为:本地缓存。本地缓存指的是本地hosts文件和dns解析缓存。除了本地缓存,路由器也会做dns缓存,还有dns服务器中也有缓存。这个是从缓存中取的情况。
如果没有被解析过,那么就通过域名服务器和根服务器一级一级去解析,从顶级域名开始往下递归解析,然后返回缓存起来。
TCP UDP
http是基于tcp的 面向有连接的
udp是面向无连接的
tcp特点:
可靠。包丢了重传。在不可靠的ip层上建立了可靠的传输层,网络层很复杂,丢包了谁管,数据重发好处。
面向连接。要3次握手
全双工。双向沟通
TCP数据格式组成:32位
源端口号+目标端口号
序列号:接收方根据序列号重组数据段
代码实现:
抓包软件:wireshark
面试题:为什么TCP需要三次握手?
为了确认双方能互相通信
要把没发送的数据发送完毕,才能发送FIN报文。
SYN 握手
ACK 应答
FIN 结束,完成
PSH 发送数据
HTTP协议*
复习一下tcp的缺点:
1.1才是标准 0.9 1.0都是过渡版本
特点:
基于tcp传输层
客户端发一条数据,服务器应答。所以是半双工通信,服务器不会主动推送。
tcp通道无法复用。一次tcp通道建立只能发一次请求。
默认无状态。第1次和第2次之间数据有什么关系是不知道的。
纯文本协议:
协议本身是用可见字符去传输的。安全问题明文
请求头和响应头
组成结构:
请求行
请求头:描述我们的传输的数据内容。表单 文本 还是一张图片。
请求体
内容协商
服务器返回的数据类型,数据采用什么格式压缩
总结***重点
首先http协议是应用层的协议,是基于tcp的,是一种请求-响应模式的半双工通信协议。
我们工作中接触的最多的就是http报文。比如请求报文:请求行 请求头和请求体所组成。请求行很简单就是请求方式 url 和version。三者之中最有特点的字段最丰富的就是我们头部信息,请求头和响应头。像我们常用的有 content-type指明了该数据的类型mime类型,content-encoding指明了该数据是用什么格式压缩的,accept-language浏览器所接受的语言,user-agent浏览器的版本类型等信息,cookie&set-cookie,connection:keep-alive保持长连接,expires/cache-control强缓存,last-modified/etag协商缓存,有很多。
这边主要介绍下http 1.1 2.0版本的一些改进和优化。
1.1中最重要的改进就是connecttion:keep-alive保持长连接,实现tcp通道的复用。还有缓存策略上的优化,强缓存引入了cache-control,协商缓存引入了etag;错误状态码增加了很多;以及添加了range头支持断点续传;加入了host头
2.0中最主要的优化就是多路复用,使得请求在tcp通道上能并行从而避免阻塞,这个是更进一步的优化。还有头压缩和服务器主动推送。2.0采用的是二进制格式数据。
https://www.cnblogs.com/YouJeffrey/p/15334068.html
响应码去看下
长连接&管线化
长连接能复用tcp通道,但是会产生队头阻塞问题。
管线化优化:
每个域名最多建立6个tcp连接
请求并发,但是应答依然是按顺序的
http缓存
cache-control > expires
etag > last-modified
https
保证密文+防止篡改
在tcp的基础上增加了一层安全套接层
加密方法*了解这个就够了
- 对称加密
客户端和服务器端拥有一把共同的钥匙
- 非对称加密
2套公钥&私钥
- 混合加密
- 数字证书和CA
2个hash比对
浏览器拿到的是:CA公钥 + 私钥加密后的hash
然后把传过来的和自己解密后的进行比对
https的目的:
整个连接过程
首先是client hello:发送random和session id
服务器server hello
一来一回。
防攻击:如果有中间人不停发请求,服务器就会接收到一样的随机数。就说明有人在攻击。
发送证书,我把我自己的密钥交给你
DH参数互发。给dfharmon算法使用