TCP、UDP协议的区别
类型 | 面向连接 | 传输可靠性 | 传输形式 | 传输效率 | 所需资源 | 应用场景 | 首部字节 |
---|---|---|---|---|---|---|---|
TCP | 面向连接 | 可靠 | 字节流 | 慢 | 多 | 要求通讯数据可靠(文件传输、邮件传输) | 20-60 |
UDP | 无连接 | 不可靠 | 数据报文段 | 快 | 少 | 要求通信速度快(域名转换) | 8个字节 |
TCP提供面向连接的服务。数据传送之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或者多播服务。
TCP的可靠性体现在传递数据之前,会有三次握手来建立连接,数据传递时,有确认、窗口、重传、拥塞控制机制,数据传送完毕后,还有断开链接。
TCP协议如何保证可靠传输 (重点)
- 应用数据被分割成TCP最适合发送的数据块。
- TCP给发送的每一个包进行编号,接收方对数据包进行排序,将有序数据传送给应用层。
- 校验和:TCP将保持它首部和数据的校验和。这是一个端到端的检验和,目的时检测数据在传输过程中的任何变化。如果校验和有差错,TCP将丢弃这个报文段并不确认收到此报文。
- TCP的接收端会丢弃重复的数据。
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
- 拥塞控制:当网络拥塞时,减少数据的发送。
- 停止等待协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就- 停止发送,等待对方确认。在收到确认后再发下一个分组。 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段(超时重传)。
ARQ协议
⾃动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之⼀。它通过使⽤确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送⽅在发送后⼀段时间之内没有收到确认帧,它通常会重新发送。
ARQ包括停止等待ARQ协议和连续ARQ协议。
停止等待ARQ协议:基本原理时每发完一个分组就停止发送,等待对方确认。收到确认后再发下一个分组。
连续ARQ协议:指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认。这样信道的利用率就提高了。而发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。
接收方一般都是采用积累确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了。
拥塞控制包括四部分:慢启动、拥塞避免,快速重传、快速恢复。
发送端向网络一次连续写入的数据量,记为SWND
(Send Window,发送窗口)。由于发送端最终以TCP报文段来发送数据。这些TCP报文段的最大长度(仅数据部分)称为SMSS(Sender Maximum Segment Size,发送端最大段大小),其值一般等于MSS。
发送端需要选择合适大小的SWND
,如果SWND太小,会引起明显的网络延迟;反之,如果SWND
太大,则容易导致网络拥塞。所以还需要引入一个拥塞窗口(Congestion Window,CWND)的状态变量。
慢启动:
发送方维持一个拥塞窗口CWND
的状态变量。它的大小取决于网络的拥塞程度,并且在动态变化,发送方会让自己的发送窗口等于这个拥塞窗口。
发送方控制拥塞窗口的原则是:
(1) 只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;
(2) 但只要网络出现拥塞,拥塞窗口就减小一些,以减小注入到网络中的分组数。
慢启动算法:由于不清楚网络状况,所以需要进行试探,将发送窗口逐渐增大,也即逐渐增大拥塞窗口的数值。在刚开始发送的时候,先把拥塞窗口CWND
设置为最大报文段MSS
,每收到一个对新报文段的确认后,就把拥塞窗口最多增加一个MSS
数值。这种逐步增大的方法可以使分组注入到网络的速率更加合理【指数增长】。
为了防止拥塞窗口过大引起网络拥塞,我们需要设置一个慢开始门限ssthreth
状态变量。当CWND
<ssthreth
时,使用慢开始算法;当CWND
>ssthreth
时,使用拥塞控制算法;如果两者相等,慢开始和拥塞控制都可以使用。
慢启动的“慢”并不是指CWND
增长速率慢而是说在TCP开始发送报文时,先设置CWND=1
,使发送端开始时只发送一个报文段进行探测。
拥塞避免:就是让拥塞窗口缓慢增大,即每经过一个往返时间RTT
就使CWND+1
,这种线性增长的速率慢很多。
只要发送方判断出网络拥塞,不论在慢开始还是拥塞控制阶段,都要把慢开始门限值设置为出现拥塞时发送窗口大小的一般,但不能小于2,然后CWND
重新设置为1,执行慢开始算法。
门限值减半,CWND
重置为1,目的是减少发送到网络中的分组数,使得发生拥塞的路由器能够有时间把队列中积压的分组处理掉。
发送端判断网络拥塞的依据:
(1) 传送超时,即TCP重传定时器溢出
(2) 收到重复的确认报文
快重传:快重传算法要求接收方每收到一个失序的报文段之后就立即发出重复确认,而不要等到自己发送数据才进行捎带确认。发送方只要收到3个同样的确认报文段就应当立即重传数据报,不必等到报文段的重传计时器到期。
快恢复:把慢开始门限减半,“乘法减小”,将CWND
设置为新的慢开始门限值,继续执行拥塞避免算法,加法增大。
在浏览器输入一个url地址到显示页面的过程
- 浏览器查找域名的IP地址(DNS查找过程、浏览器缓存、路由器缓存、DNS缓存)。【对应DNS协议:获取域名对应IP】
- 浏览器作为客户端向服务器发起TCP连接,连接建立后向web服务器发送一个HTTP请求(该过程中cookies会随着请求发送给服务器)。
- 服务器处理请求(请求、处理请求及其参数、cookies,生成一个HTML响应)。
- 服务器返回一个HTML响应。
- 浏览器开始显示HTML。
2-5 包含协议:
TCP:与服务器建立连接
IP:建立TCP协议时,需要发送数据,在网络层使用IP协议
OSPF:IP数据包在路由器之间,路由器选择使用OSPF协议(类似协议有RIP协议、IGRP(cisco私有)、EIGRP(cisco私有)
ARP:路由器在与服务器通信时,需要将IP地址转化为MAC地址,该过程使用ARP协议
HTTP:TCP连接建立完成后,使用HTTP协议访问网页
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染画面
- 连接结束
状态码
有些公司会问的很细,比如505是什么意思?
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | Information(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要附加操作以完成请求 |
4xx | Clien Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
HTTP是不保存状态的协议,如何保存用户状态?
使用Session和Cookies。
Session和Cookies的区别
Cookies和Session都是用来跟踪浏览器用户身份的会话方式,应用场景不太一样。
Cookies一般用来保存用户信息:
(1)保存上次登录信息,下次自动填充;
(2)下次访问不需要重新登陆;
(3)登录一次网站后访问同网站其他页面不需要重新登录。
Session主要作用通过服务端记录用户的状态(典型场景购物车)。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。
Cookie 存储在客户端中,⽽Session存储在服务器上,相对来说 Session 安全性更⾼。如果要在Cookie 中存储⼀些敏感信息,不要直接写⼊ Cookie 中,最好能将 Cookie 信息加密然后使⽤到的时候再去服务器端解密。
HTTP1.0和HTTP1.1的主要区别
-
长连接:HTTP/1.0使用短链接,每次请求都要建立一次连接;HTTP/1.1使用长连接,默认开启
Conection: keep-alive
。持续连接分为流水线方式和非流水线方式。流水线是指,客户端在收到HTTP响应报文前就能接着发送新的请求报文;非流水线则是指客户端收到响应之后才能发送下一个请求。 -
HTTP/1.1新增了24个错误状态响应码。如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
-
缓存处理:HTTP/1.1新增了更多的缓存头来控制缓存控制策略。
-
带宽优化及网络连接的使用:HTTP/1.1允许只请求资源的某个部分,以此节省带宽。
HTTP1.1 和HTTP2.0的主要区别
- (多路复用) HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP 1.0大了好几个数量级。HTTP 1.1也可以建立多个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
- (数据压缩) HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积变小了,在网络上传输就会更快。
- (服务器推送) 当我们对支持HTTP 2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,这样可以避免客户端再次创建连接发送请求到服务器端获取。这种方式非常适合加载静态资源。
服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以,不需要走网络,速度自然会快很多。
HTTPS
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP协议,即HTTP协议的安全版。
HTTPS的作用:
- 内容加密:建立一个信息安全通道,来保证数据传输的安全。
- 身份验证:确认网站的真实性。
- 数据完整性:防止内容被第三方冒充或者篡改。
HTTP和HTTPS的区别
- 端口:HTTP使用80,HTTPS使用443。
- HTTPS协议需要到CA申请证书。
- 安全性和资源消耗:HTTP直接运行在TCP之上,所有传输的都是明文,客户端和服务器无法验证对方身份。HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,传输内容经过对称加密,但对称加密的密匙用服务器方的证书进行了非对称加密。
- 对称加密:密匙只有一个,加密解密为同一个密码;
- 非对称加密:密匙成对出现(分为公匙和私匙,且根据公匙无法推知私匙,加密解密使用不同密匙)。
参考
JavaGuide面试突击版,百度可得最新版本,有删改修正和扩充。