计算机网络知识
TCP的3次握手和四次挥手
三次握手: 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x
第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y
第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1
四次挥手:
第一次:客户端请求断开FIN,seq=u
第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么不能用两次握手进行连接?
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。 现在把三次握手改成仅需要两次握手,死锁是可能发生的。
TCP与UDP的区别
tcp是面向连接的,由于tcp连接需要三次握手,所以能够最低限度的降低风险,保证连接的可靠性。 udp 不是面向连接的,udp建立连接前不需要与对象建立连接,无论是发送还是接收,都没有发送确认信号。所以说udp是不可靠的。 由于udp不需要进行确认连接,使得UDP的开销更小,传输速率更高,所以实时行更好。
TCP与UDP的应用
从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快。因此在选用具体协议通信时,应该根据通信数据的要求而决定。 若通信数据完整性需让位与通信实时性,则应该选用 TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。
Http https区别,此处延伸:https的实现原理
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https实现原理:
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。 (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。 (3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。 (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。 (5)Web服务器利用自己的私钥解密出会话密钥。 (6)Web服务器利用会话密钥加密与客户端之间的通信。
IP地址与MAC地址区别
- IP 是地址,有定位功能;MAC 是身份证,无定位功能;
- MAC是每个电脑厂商出场时配置的,每个电脑的MAC地址不会变。IP地址是供应商分配的,跟网络有关。
Http协议的method
- GET 请求资源
- HEAD 只请求页面首部
- POST 提交资源
- PUT 客户端向服务端传送数据文档内容
- DELETE 删除指定页面
- OPTIONS 查看服务器性能及302验证是否需要缓存更新
- TRADE 请求服务器在响应中的实体主体部分返回所得的内容
状态码
- 200 OK:客户端请求成功。
- 301永久性重定向
- 302临时性重定向
- 304服务端已经执行了GET,但文件未变化
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 502 网关或代理错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
301、302、303、307、308区别
301、308都是永久重定向
- 301会将post请求转给get请求重新发送
- 308会将原来的请求头和请求实体发送到新的地址
302、303、307是临时性重定向
- 302 客户端实现不一致,导致有些情况下会转 get请求再次请求,有些情况下会继续原来请求的方法
- 303 为了解决302的问题,此状态码将会把所有请求方法转为get方法再次请求新请求
- 307 将会原来的请求头请求体发送到新地址
当我们输入url访问网站到网页展示会经历什么
- 域名先通过DNS服务器解析成IP地址
- 建立TCP连接(三次握手)
- 请求构建:请求行、请求首部、正文实体
- 通过二进制流发送
- TCP层将二进制流变成报文
- TCP发送报文段,用得到回应ACK来保证可靠地到达了对方。
- TCP发送每个报文的时候,加上自己的地址和目标地址放到IP头交给IP层传输
- IP层查看是否在同一个局域网,如果是,发送ARP协议来请求目标MAC地址;如果不是,发送ARP协议获取网关MAC地址,并把数据发送到网关
- 网关收到取出目标IP地址,根据路由器协议找到下一跳的路由器,获取下一跳的路由器的MAC地址并发送给下一跳路由器
- 到达目标地址的局域网,于是这个局域网发送ARP协议获取目标地址的MAC地址并发送到该地址
- 目标机器发现了MAC地址符合,接收包,发现是IP协议,于是根据IP头中的协议项知道上层是TCP协议,于是按照TCP协议解析TCP的头,放入缓存中处理并返回一个ACK
- 解析TCP的端口号,HTTP服务器监听此端口号,目标机器将包发送给目标端口,HTTP服务器进程响应到请求,返回找到对应资源
- 服务器构建返回报文:状态吗、返回首部
- 让TCP层将返回的HTML文件分为一个个小的段,加上TCP头交给IP层按来的过程再走一遍
- 客户端发现接收报文,交给TCP层根据序列号处理是否符合,然后发给相应端口
- 浏览器监听端口,取到状态码200,解析正文
- 浏览器根据首部返回格式解析html格式数据,渲染执行
HTTP 1.0与1.1区别
缓存处理
,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。带宽优化及网络连接的使用
,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。错误通知的管理
,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。Host头处理
,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。长连接
,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
HTTP 2.0
对比HTTP1.0优化:
- 对HTTP的头进行压缩,在两端建立索引表,对相同的头只发生索引表中的索引
- 多路复用
- HTTP2.0将TCP连接中,切分成多个流,每个流有自己的ID,它是一个虚拟通道,优先级更高
- 对传输信息分割为更小的消息和帧,并采用二进制格式编码。传输header内容的帧
Header帧
,传输正文实体的帧Data帧
- 比如有三个请求,HTTP2.0会将它们分成三个流,将数据分成帧,乱序发送给TCP处理
HTTPS协议加密方式
- 对称加密:加密和解密使用的密钥是相同的
- 非对称加密:公钥加密的信息只能私钥能解密,私钥加密的信息只有公钥能解密
- 数字证书
DNS服务器
DNS服务器的树状结构:
根 DNS 服务器
返回顶级域 DNS 服务器的 IP 地址顶级域 DNS 服务器
返回权威 DNS 服务器的 IP 地址权威 DNS 服务器
返回相应主机的 IP 地址
解析流程
- 客户端发起DNS解析流程,先访问本地DNS缓存(/etc/hosts),无缓存
- 客户端向本地DNS服务器(一般附近运营商的某个机房),无缓存
- 本地DNS服务器访问根域名服务器,根域名服务器会返回顶级DNS服务器的IP地址
- 本地DNS服务器拿到顶级DNS服务器IP地址,访问顶级DNS服务器地址,返回权威域名服务器IP地址
- 本地DNS服务器拿到权威域名服务器IP地址,访问并拿到对应IP地址
- 本地DNS服务器返回IP地址,客户端发起IP协议请求
负载均衡
内部负载均衡
:1.重新映射域名即可更换服务器2.配置策略,可让解析时自动更换IP地址全局负载均衡
: 根据配置让DNS服务器自动返回附近的服务器的IP地址
DNS服务器问题
- 解析慢
- 更新不及时
- 因为缓存、转发、NAT问题导致客户端误会自己梭子啊的位置和运营商,影响流量调度
websocket
- longpoll 客户端一直发送消息,服务端接受消息才返回
- 轮询 客户端一直发送消息,服务端一直返回
websocket是基于TCP的一个协议,可以让服务端对数据进行推送。