目录
OSI七层协议
TCP的三次握手和四次挥手
TCP和UDP的区别
TCP 第三次握手失败的情况 TCP 是如何处理的?
为什么连接的时候是三次握手,关闭的时候却是四次握手?
TCP 是如何保证可靠传输数据的?
TCP滑动窗口
HTTP
get和post请求的区别?
从一个 URL 到获取页面的过程
HTTP1.0和HTTP1.1
HTTP状态码
HTTPS
HTTP和HTTPS的区别
Cookie和Session的区别
1.物理层:传输比特流,定义物理设备标准。
2.数据链路层:将比特数据组装为帧和点到点传递。( 交换机)
3.网络层:将网络地址翻译成对应的物理地址,决定如何将数据从发送方路由到接受方(路由器;单位是数据包。有IP协议)
4.传输层:解决主机间的数据传输。(传输协议, 流量控制,接收方接收数据快慢程度;还可以分割大的数据包; TCP和UDP协议)
5.会话层:建立、管理和终止会话。( 自动收发包和寻址)
6.表示层:解决不同系统之间的通信语法的问题。
7.应用层:让你更方便地应用从网络中接收到的数据。关注TCP/IP协议中的http协议
TCP3次握手:
第一次握手:客户端向服务器发送同步报文段(SYN),请求建立连接。并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到连接请求报文段后,如果同意建立连接,就向客户端发回确认,此时服务器进入SYN_RECV状态。
第三次握手:当客户端收到确认报文段后,还要向服务器发送确认包ACK,此包发送完毕,客户端和服务器就进入ESTABLISHED状态,完成三次握手。
TCP4次挥手:
第一次挥手:客户端打算关闭连接,就向其TCP发送一个连接释放报文,停止再发送数据,并主动关闭TCP连接。客户端进入FIN_WAIT_1状态。
第二次挥手:服务器收到连接释放报文段后即发出确认。确认序号为收到的序号加1,服务器进入CLOSE_WAIT状态。
第三次挥手:如果服务器已经没有要向客户端发送的数据,就向客户端发送一个FIN数据包,用来关闭服务器与客户端的连接,服务器就进入LAST_ACK状态。
第四次挥手:客户端收到服务器发来的连接释放报文段后,再发回一个报文确认。确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
为什么是三次握手?
三次握手是为了初始化Sequence Number的初始值,并作为以后数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输问题而乱序。
如果是两次的话,客户端和服务器的初始序列号将无法达成一致。
协议没有100%可靠的,所以三次就够了,如果是四次也不能保证是100%可靠的。
1、(面向连接vs无连接)TCP是面向连接的通讯协议(三次握手;四次挥手),UDP是面向无连接的通讯协议。
2、(可靠性)TCP有交付保证,如果消息在传输中丢失,那么它将重发;udp没有交付保证,一个数据包在运输过程中可能丢失。
3、(有序性)TCP利用序列号保证消息的顺序交互,UDP不保证有序性
4、(速度)tcp速度慢,适合传输大量数据;udp速度快,适合传输少量数据。
5、(重量级vs轻量级)TCP要求系统资源较多,UDP要求系统资源较少。
第三次失败,只有客户端处于成功状态(因为第 2 次服务器返回了 ACK),服务器端没有接收到客户端的 ACK。这要分几种情况讨论:
TCP 是全双工模式,关闭连接时,当服务器收到客户端的 FIN 报文时,仅仅表示客户端不再发送数据了但是还能接收数据。此时,服务器也未必全部数据都发送给客户端了,所以服务器可以立即 close;也可以发送一些数据给客户端后,再发送 FIN 报文给对方来表示同意现在关闭连接,所以它这里的ACK报文和FIN报文大多数情况下都是分开发送的。
保证可靠稳定的传输最主要是通过: 拥塞控制、流量控制、ARQ 协议
除此之外还有:超时传送、丢弃重复、校验和分割合适数据包
拥塞控制主要有四个方法:
流量控制
一般我们都希望发送数据的速度尽可能快,但如果发送数据的速度过快,接收端来不及接收,就可能导致数据丢失的问题。所谓流量控制,就是根据接收端的接收能力,动态地调整发送端的发送速度,确保接收端来的及接收。流量控制主要是通过滑动窗口机制实现的。
ARQ 协议
即ARQ automatic repeat request,自动重传请求,接收端不需要向发送端发送重传请求,当超过指定时间时发送端会自动进行超时重传。
RTT:发送一个数据包到收到对应的ACK所花费的时间
RTO:重传时间间隔
TCP使用滑动窗口做流量控制与乱序重排
TCP滑窗可靠性,建立在确认重传基础上。
发送窗口只有收到接收端对于本段发送窗口的ACK确认,才移动滑窗左边界。
接收窗口只有在前面所有的段都确认之后,才会移动滑窗左边界。
如果接收方前面还有数据未接收,后面收到数据,不会移动滑窗。确保发送方重传后面的数据。
首先send端 发送一个大小为5 的数据信息,假设我们的窗口就是5,接受端回复一个ack = 3.这时候说明我们只成功发送了三个,send端会发送接着将4、5数据发送过去。send端这个时候滑动窗口向右移动三位。接收端接受确认了三个,也会向右移动三位
结构:
HTTP报文分为HTTP请求报文和响应报文,请求报文由请求行(请求方法,请求资源的URL和HTTP的版本)、首部行和实体(通常不用)组成。响应报文由状态行(状态码,短语和HTTP版本)、首部行和实体(有些不用)组成。
主要特点:
GET 方法从服务器获取资源,POST 是向服务器发送数据
①安全性:POST的安全性要比GET的安全性高。Get请求提交的数据会在地址栏显示出来,而post请求不会再地址栏显示出来。
②传输数据的大小:http Get请求由于浏览器对地址长度的限制而导致传输的数据有限制。而POST请求不会因为地址长度限制而导致传输数据限制。
1、首先进行DNS解析,解析URL所对应的ip地址
2、发起TCP的3次握手
3、建立TCP连接后,浏览器发起http请求
4、服务器响应http请求,浏览器得到html代码
5、浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
6、浏览器对页面进行渲染呈现给用户
HTTP1.0使用的是非持续连接,每次请求文档就有2倍的RTT开销,另外客户和服务器每一次建立新的TCP连接都要分配缓存和变量,这种非持续连接会给服务器造成很大的压力。
HTTP1.1使用的是持续连接,服务器会在发送响应后在一段时间内继续保持这条连接,使同一个浏览器和服务器可以继续在这条连接上传输后续的HTTP请求和响应报文。HTTP1.1的持续连接有两种工作方式,非流水线和流水线方式。非流水线方式就是客户在收到前一个响应后才能发送下一个请求,流水线方式是客户收到响应前就能连着发送新的请求。
401 (未授权) 请求未经授权。对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
常见的HTTP状态码以及错误分析
特点
HTTP有很大的安全隐患:使用明文进行通信,内容可能会被窃听。不验证通信方的身份,通信方的身份有可能遭遇伪装。无法证明报文的完整性,报文有可能遭篡改。
HTTPS是以安全为目标的HTTP通道,S代表security,让HTTP先和SSL通信,再由SSL和TCP 通信,也就是说 HTTPS使用了隧道进行通信。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
HTTPS数据传输流程
HTTPS真的安全吗?
Session 的实现常常依赖于 Cookie 机制。一般默认情况下,在会话中,服务器存储 session 的 sessionid 是通过 cookie 存到浏览器里。如果浏览器禁用了 cookie,浏览器请求服务器无法携带 sessionid,服务器也就无法识别请求中的用户身份,session就会失效。
但是可以通过其他方法在禁用 cookie 的情况下,可以继续使用 session。