工商网站如何下载建设银行u盾证书,分销管理系统软件,门户网站的基本特征有,网络维护需要会什么文章目录 1、简述静态路由和动态路由#xff1f;2、说说有哪些路由协议#xff0c;都是如何更新的#xff1f;3、简述域名解析过程#xff0c;本机如何干预域名解析#xff1f;4、简述 DNS 查询服务器的基本流程是什么#xff1f;DNS 劫持是什么#xff1f;5、简述网关的… 文章目录 1、简述静态路由和动态路由2、说说有哪些路由协议都是如何更新的3、简述域名解析过程本机如何干预域名解析4、简述 DNS 查询服务器的基本流程是什么DNS 劫持是什么5、简述网关的作用是什么同一网段的主机如何通信6、简述CSRF攻击的思想以及解决方法7、说说 MAC地址和IP地址分别有什么作用8、简述 TCP 三次握手和四次挥手的过程9、说说 TCP 2次握手行不行为什么要3次10、简述 TCP 和 UDP 的区别它们的头部结构是什么样的?11、简述 TCP 连接 和 关闭的具体步骤?12、简述 TCP 连接 和 关闭的状态转移?13、简述 TCP 慢启动14、说说 TCP 如何保证有序15、说说 TCP 常见的拥塞控制算法有哪些16、简述 TCP 超时重传17、说说 TCP 可靠性保证18、简述 TCP 滑动窗口以及重传机制?19、说说滑动窗口过小怎么办?20、说说如果三次握手时候每次握手信息对方没收到会怎么样分情况介绍21、简述 TCP 的 TIME_WAIT为什么需要有这个状态22、简述什么是 MSL为什么客户端连接要等待2MSL的时间才能完全关闭?23、说说什么是 SYN flood如何防止这类攻击24、 说说什么是 TCP 粘包和拆包25、说说 TCP 与 UDP 在网络协议中的哪一层他们之间有什么区别26、说说从系统层面上UDP 如何保证尽量可靠27、说一说 TCP 的 keepalive以及和 HTTP 的 keepalive 的区别28、简述 TCP 协议的延迟 ACK 和累计应答29、说说 TCP 如何加速一个大文件的传输30、服务器怎么判断客户端断开了连接31、说说端到端点到点的区别32、说说浏览器从输入 URL 到展现页面的全过程33、简述 HTTP 和 HTTPS 的区别34、说说 HTTP 中的 referer 头的作用35、说说 HTTP 的方法有哪些36、 简述 HTTP 1.01.12.0 的主要区别37、 说说 HTTP 常见的响应状态码及其含义38、 说说 GET请求和 POST 请求的区别39、说说 Cookie 和 Session 的关系和区别是什么40、简述 HTTPS 的加密与认证过程? 1、简述静态路由和动态路由
静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化当网络状况变化后必须由网络管理员修改路由表。动态路由是由路由选择协议而动态构建的路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。
2、说说有哪些路由协议都是如何更新的 路由可分为静态动态路由。静态路由由管理员手动维护动态路由由路由协议自动维护。 路由选择算法的必要步骤 1向其它路由器传递路由信息 2接收其它路由器的路由信息 3根据收到的路由信息计算出到每个目的网络的最优路径并由此生成路由选择表 4根据网络拓扑的变化及时的做出反应调整路由生成新的路由选择表同时把拓扑变化以路由信息的形式向其它路由器宣告。两种主要算法距离向量法Distance Vector Routing和链路状态算法Link-State Routing。 由此可分为距离矢量如RIP、IGRP、EIGRP链路状态路由协议如OSPF、IS-IS。 路由协议是路由器之间实现路由信息共享的一种机制它允许路由器之间相互交换和维护各自的路由表。当一台路由器的路由表由于某种原因发生变化时它需要及时地将这一变化通 知与之相连接的其他路由器以保证数据的正确传递。路由协议不承担网络上终端用户之间 的数据传输任务。 1RIP 路由协议RIP 协议最初是为 Xerox 网络系统的 Xerox parc 通用协议而设计的是 Internet 中常用的 路由协议。RIP 采用距离向量算法即路由器根据距离选择路由所以也称为距离向量协议。 路由器收集所有可到达目的地的不同路径并且保存有关到达每个目的地的最少站点数的路 径信息除到达目的地的最佳路径外任何其它信息均予以丢弃。同时路由器也把所收集的路由信息用 RIP 协议通知相邻的其它路由器。这样正确的路由信息逐渐扩散到了全网。RIP 使用非常广泛它简单、可靠便于配置。但是 RIP 只适用于小型的同构网络因为它允许的最大站点数为 15任何超过 15 个站点的目的地均被标记为不可达。而且 RIP 每 隔 30s 一次的路由信息广播也是造成网络的广播风暴的重要原因之一。 2OSPF 路由协议0SPF 是一种基于链路状态的路由协议需要每个路由器向其同一管理域的所有其它路由器发送链路状态广播信息。在 OSPF 的链路状态广播中包括所有接口信息、所有的量度和 其它一些变量。利用 0SPF 的路由器首先必须收集有关的链路状态信息并根据一定的算法 计算出到每个节点的最短路径。而基于距离向量的路由协议仅向其邻接路由器发送有关路由 更新信息。与 RIP 不同OSPF 将一个自治域再划分为区相应地即有两种类型的路由选择方式 当源和目的地在同一区时采用区内路由选择当源和目的地在不同区时则采用区间路由 选择。这就大大减少了网络开销并增加了网络的稳定性。当一个区内的路由器出了故障时 并不影响自治域内其它区路由器的正常工作这也给网络的管理、维护带来方便。 3BGP 和 BGP4 路由协议BGP 是为 TCPIP 互联网设计的外部网关协议用于多个自治域之间。它既不是基于纯粹的链路状态算法也不是基于纯粹的距离向量算法。它的主要功能是与其它自治域的 BGP 交换网络可达信息。各个自治域可以运行不同的内部网关协议。BGP 更新信息包括网络号 自治域路径的成对信息。自治域路径包括到达某个特定网络须经过的自治域串这些更新信 息通过 TCP 传送出去以保证传输的可靠性。为了满足 Internet 日益扩大的需要BGP 还在不断地发展。在最新的 BGP4 中还可以 将相似路由合并为一条路由。 4IGRP 和 EIGRP 协议EIGRP 和早期的 IGRP 协议都是由 Cisco 发明是基于距离向量算法的动态路由协议。 EIGRP(Enhanced Interior Gateway Routing Protocol)是增强版的 IGRP 协议。它属于动态内部网 关路由协议仍然使用矢量距离算法。但它的实现比 IGRP 已经有很大改进其收敛特性 和操作效率比 IGRP 有显著的提高。它的收敛特性是基于 DUAL ( Distributed UpdateAlgorithm ) 算法的。DUAL 算法使得路径 在路由计算中根本不可能形成环路。它的收敛时间可以与已存在的其他任何路由协议相匹敌Enhanced IGRP 与其它路由选择协议之间主要区别包括收敛宽速Fast Convergence、 支持变长子网掩模Subnet Mask、局部更新和多网络层协议。执行 Enhanced IGRP 的路由 器存储了所有其相邻路由表以便于它能快速利用各种选择路径Alternate Routes。如果没有合适路径Enhanced IGRP 查询其邻居以获取所需路径。直到找到合适路径EnhancedIGRP 查询才终止否则一直持续下去。EIGRP 不作周期性更新。取而代之当路径度量标准改变时Enhanced IGRP 只发送局 部更新Partial Updates信息。局部更新信息的传输自动受到限制从而使得只有那些需 要信息的路由器才会更新。基于以上这两种性能因此 Enhanced IGRP 损耗的带宽比 IGRP 少得多。
3、简述域名解析过程本机如何干预域名解析
1在浏览器中输入 www.qq.com 域名操作系统会先检查自己本地的hosts文件是否有这个网址映射关系如果有就先调用这个IP地址映射完成域名解析。 2如果hosts里没有这个域名的映射则查找本地DNS解析器缓存是否有这个网址映射关系 如果有直接返回完成域名解析。 3如果hosts与本地DNS解析器缓存都没有相应的网址映射关系首先会找TCP/IP参数中设置的首选DNS服务器在此我们叫它本地DNS服务器此服务器收到查询时如果要查询的域名包含在本地配置区域资源中则返回解析结果给客户机完成域名解析此解析具有权威性。 4如果要查询的域名不由本地DNS服务器区域解析但该服务器已缓存了此网址映射关系 则调用这个IP地址映射完成域名解析此解析不具有权威性。 5如果本地DNS服务器本地区域文件与缓存解析都失效则根据本地DNS服务器的设置是否 设置转发器进行查询如果未用转发模式本地DNS就把请求发至13台根DNS根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后如果自己无法解析它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后就会找qq.com域服务器重复上面的动作 进行查询直至找到 www.qq.com 主机。 6如果用的是转发模式此DNS服务器就会把请求转发至上一级DNS服务器由上一级服务器进行解析上一级服务器如果不能解析或找根DNS或把转请求转至上上级以此循环。不管是本地DNS服务器用是是转发还是根提示最后都是把结果返回给本地DNS服务器由此DNS服务器再返回给客户机。
4、简述 DNS 查询服务器的基本流程是什么DNS 劫持是什么 步骤 1打开浏览器输入一个域名。比如输入www.163.com这时你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供比如中国电信中国移 动。 2DNS请求到达本地DNS服务器之后本地DNS服务器会首先查询它的缓存记录如果缓存中有此条记录就可以直接返回结果。如果没有本地DNS服务器还要向DNS根服务器进行查询。 3根DNS服务器没有记录具体的域名和IP地址的对应关系而是告诉本地DNS服务器你可以到域服务器上去继续查询并给出域服务器的地址。 4本地DNS服务器继续向域服务器发出请求在这个例子中请求的对象是.com域服务器。.com域服务器收到请求之后也不会直接返回域名和IP地址的对应关系而是告诉本地DNS服务器你的域名的解析服务器的地址。 5最后本地DNS服务器向域名的解析服务器发出请求这时就能收到一个域名和IP地址对应关系本地DNS服务器不仅要把IP地址返回给用户电脑还要把这个对应关系保存在缓存中以备下次别的用户查询时可以直接返回结果加快网络访问。 DNS劫持就是通过劫持了DNS服务器通过某些手段取得某域名的解析记录控制权进而修改此域名的解析结果导致对该域名的访问由原IP地址转入到修改后的指定IP其结果就是对特定的网址不能访问或访问的是假网址从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。 DNS劫持症状在某些地区的用户在成功连接宽带后首次打开任何页面都指向ISP提供的“电信互 联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百 度的网站。这些都属于DNS劫持。
5、简述网关的作用是什么同一网段的主机如何通信
网关即网络中的关卡我们的互联网是一个一个的局域网、城域网、等连接起来的在连接点上就是一个一个网络的关卡即我们的网关他是保证网络互连的翻译和转换使得不同的网络体系能够进行。网内通信即通信双方都位处同一网段中数据传输无需经过路由器(或三层交换机)即可由本网段自主完成。假设发送主机的ARP表中并无目的主机对应的表项则发送主机会以目的主机IP地址为内容广播。 ARP请求以期获知目的主机MAC地址并通过交换机(除到达端口之外的所有端口发送即洪泛(Flooding))向全网段主机转发而只有目的主机接收到此ARP请求后会将自己的MAC地址和IP地址装入ARP应答后将其回复给发送主机发送主机接收到此ARP应答后从中提取目的主机的MAC地址并在其ARP表中建立目的主机的对应表项(IP地址到MAC地址的映射)之后即可向目的主机发送数据将待发送数据封装成帧并通过二层设备(如交换机)转发至本网段内的目的主机自此完成通信。
6、简述CSRF攻击的思想以及解决方法 CSRF全称叫做跨站请求伪造。就是黑客可以伪造用户的身份去做一些操作进而满足自身目 的。 要完成一次CSRF攻击受害者必须依次完成两个步骤 1登录受信任网站A并在本地生成Cookie。、 2在不登出A的情况下访问危险网站B。 此时黑客就可以获取你的cookie达成不可告人的目的了。 CSRF 攻击是一种请求伪造的攻击方式它利用的是服务器不能识别用户的类型从而盗取用户的信息来攻击。因此要防御该种攻击因为从服务器端着手增强服务器的识别能力设计良好的防御机制。主要有以下几种方式 1请求头中的Referer验证不推荐 HTTP的头部有一个 Referer 信息的字段它记录着该次HTTP请求的来源地址即它从哪里来的,既然CSRF攻击是伪造请求是从服务器发送过来的那么我们就禁止跨域访问在服务器端增加验证过滤掉那些不是从本服务器发出的请求这样可以在一定程度上避免CSRF攻击。 但是这也有缺点比如如果是从搜索引擎所搜结果调整过来请求也会被认为是跨域请求。 2请求令牌验证token验证 token验证是一种比较广泛使用的防止 CSRF攻击 的手段当用户通过正常渠道访问服务器时服务器会生成一个随机的字符串保存在session中并作为令牌token返回给客户端以隐藏的形式保存在客户端中客户端每次请求都会带着这个token服务器根据该token判断该请求是否合法。
7、说说 MAC地址和IP地址分别有什么作用
IP地址是IP协议提供的一种统一的地址格式它为互联网上的每一个网络和每一台主机分配一个逻辑地址以此来屏蔽物理地址的差异。而MAC地址指的是物理地址用来定义网络设备的位置。IP地址的分配是根据网络的拓扑结构而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上这种方案是不可行的。当存在一个附加层的地址寻址时设备更易于移动和维修。例如如果一个以太网卡坏了可以被更换而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络可以给它一个新的IP地址而无须换一个新的网卡。无论是局域网还是广域网中的计算机之间的通信最终都表现为将数据包从某种形式的链路上的初始节点出发从一个节点传递到另一个节点最终传送到目的节点。数据包在这些节点之间的移动都是由ARPAddress Resolution Protocol地址解析协议负责将IP地址映射到MAC地址上来完成的。
8、简述 TCP 三次握手和四次挥手的过程
三次握手 1第一次握手建立连接时客户端向服务器发送SYN包seqx请求建立连接等待确认 2第二次握手服务端收到客户端的SYN包回一个ACK包ACKx1确认收到同时发送一个SYN 包seqy给客户端 3第三次握手客户端收到SYNACK包再回一个ACK包ACKy1告诉服务端已经收到 4三次握手完成成功建立连接开始传输数据 四次挥手 1客户端发送FIN包FIN1给服务端告诉它自己的数据已经发送完毕请求终止连接此时客户端不发送数据但还能接收数据 2服务端收到FIN包回一个ACK包给客户端告诉它已经收到包了此时还没有断开socket连接而是等待剩下的数据传输完毕 3服务端等待数据传输完毕后向客户端发送FIN包表明可以断开连接 4客户端收到后回一个ACK包表明确认收到等待一段时间确保服务端不再有数据发过来然后彻底断开连接
9、说说 TCP 2次握手行不行为什么要3次
为了实现可靠数据传输 TCP 协议的通信双方 都必须维护一个序列号 以标识发送出去的数据包中 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手 至多只有连接发起方的起始序列号能被确认 另一方选择的序列号则得不到确认
10、简述 TCP 和 UDP 的区别它们的头部结构是什么样的?
TCP协议是有连接的有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接会话结束之后也要结束连接。而UDP是无连接的TCP协议保证数据按序发送按序到达提供超时重传来保证可靠性但是UDP不保证按序到达甚至不保证到达只是努力交付即便是按序发送的序列也不保证按序送到。TCP协议所需资源多TCP首部需20个字节不算可选项UDP首部字段只需8个字节。TCP有流量控制和拥塞控制UDP没有网络拥堵不会影响发送端的发送速率TCP是一对一的连接而UDP则可以支持一对一多对多一对多的通信。TCP面向的是字节流的服务UDP面向的是报文的服务。
TCP头部结构如下
/*TCP头定义共20个字节*/
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位TCP头长度中6位保留后6位标志
位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 检验和16bit
short m_surgentPointer; // 紧急数据偏移量16bit
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
/*TCP头中的选项定义
kind(8bit)Length(8bit整个选项的长度包含前两部分)内容(如果有的话)
KIND 1表示 无操作NOP无后面的部分
2表示 maximum segment 后面的LENGTH就是maximum segment选项的长度以byte为单位
11内容部分长度
3表示 windows scale 后面的LENGTH就是 windows scale选项的长度以byte为单位
11内容部分长度
4表示 SACK permitted LENGTH为2没有内容部分
5表示这是一个SACK包 LENGTH为2没有内容部分
8表示时间戳LENGTH为10含8个字节的时间戳
*/typedef struct _TCP_OPTIONS
{
char m_ckind;
char m_cLength;
char m_cContext[32];
}__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;UDP头部结构如下
/*UDP头定义共8个字节*/
typedef struct _UDP_HEADER
{
unsigned short m_usSourPort; // 源端口号16bit
unsigned short m_usDestPort; // 目的端口号16bit
unsigned short m_usLength; // 数据包长度16bit
unsigned short m_usCheckSum; // 校验和16bit
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;11、简述 TCP 连接 和 关闭的具体步骤?
TCP通过三次握手建立链接 1第一次握手建立连接时客户端向服务器发送SYN包seqx请求建立连接等待确认 2第二次握手服务端收到客户端的SYN包回一个ACK包ACKx1确认收到同时发送一个SYN包seqy给客户端 3第三次握手客户端收到SYNACK包再回一个ACK包ACKy1告诉服务端已经收到 4三次握手完成成功建立连接开始传输数据通过4次挥手关闭链接 1客户端发送FIN包FIN1给服务端告诉它自己的数据已经发送完毕请求终止连接此时客户端不发送数据但还能接收数据 2服务端收到FIN包回一个ACK包给客户端告诉它已经收到包了此时还没有断开socket连接而是等待剩下的数据传输完毕 3服务端等待数据传输完毕后向客户端发送FIN包表明可以断开连接 4客户端收到后回一个ACK包表明确认收到等待一段时间确保服务端不再有数据发过来然后彻底断开连接
12、简述 TCP 连接 和 关闭的状态转移? 上半部分是TCP三路握手过程的状态变迁下半部分是TCP四次挥手过程的状态变迁。
CLOSED起始点在超时或者连接关闭时候进入此状态这并不是一个真正的状态而是这个状态图的假想起点和终点。LISTEN服务器端等待连接的状态。服务器经过 socketbindlisten 函数之后进入此状态开始监听客户端发过来的连接请求。此称为应用程序被动打开等到客户端连接请求。SYN_SENT第一次握手发生阶段客户端发起连接。客户端调用 connect发送 SYN 给服务器端然后进入 SYN_SENT 状态等待服务器端确认三次握手中的第二个报文。如果服务器端不能连接则直接进入CLOSED状态。SYN_RCVD第二次握手发生阶段跟 3 对应这里是服务器端接收到了客户端的 SYN此时服务器由 LISTEN 进入 SYN_RCVD状态同时服务器端回应一个 ACK然后再发送一个 SYN 即SYNACK 给客户端。状态图中还描绘了这样一种情况当客户端在发送 SYN 的同时也收到服务器端的 SYN请求即两个同时发起连接请求那么客户端就会从 SYN_SENT 转换到 SYN_REVD 状态。ESTABLISHED第三次握手发生阶段客户端接收到服务器端的 ACK 包ACKSYN之后也会发送一个 ACK 确认包客户端进入 ESTABLISHED 状态表明客户端这边已经准备好但TCP 需要两端都准备好才可以进行数据传输。服务器端收到客户端的 ACK 之后会从 SYN_RCVD 状态转移到 ESTABLISHED 状态表明服务器端也准备好进行数据传输了。这样客户端和服务器端都是。
13、简述 TCP 慢启动
慢启动Slow Start是传输控制协议TCP使用的一种阻塞控制机制。慢启动也叫做指数增长期。慢启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。这种情况一直保持到要么没有收到一些段要么窗口大小到达预先定义的阈值。如果发生丢失事件TCP就认为这是网络阻塞就会采取措施减轻网络拥挤。一旦发生丢失事件或者到达阈值TCP就会进入线性增长阶段。这时每经过一个RTT窗口增长一个段。
14、说说 TCP 如何保证有序
主机每次发送数据时TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机 对分配的这个序列号进行确认如果发送主机在一个特定时间内没有收到接收主机的确认则发送 主机会重传此数据包。接收主机利用序列号对接收的数据进行确认以便检测对方发送的数据是否 有丢失或者乱序等接收主机一旦收到已经顺序化的数据它就将这些数据按正确的顺序重组成数 据流并传递到高层进行处理。 具体步骤如下 1为了保证数据包的可靠传递发送方必须把已发送的数据包保留在缓冲区 2并为每个已发送的数据包启动一个超时定时器 3如在定时器超时之前收到了对方发来的应答信息可能是对本包的应答也可以是对本包后 续包的应答则释放该数据包占用的缓冲区; 4否则重传该数据包直到收到应答或重传次数超过规定的最大次数为止。 5接收方收到数据包后先进行CRC校验如果正确则把数据交给上层协议然后给发送方发 送一个累计应答包表明该数据已收到如果接收方正好也有数据要发给发送方应答包也可方在 数据包中捎带过去。
15、说说 TCP 常见的拥塞控制算法有哪些
TCP Tahoe/Reno 最初的实现包括慢启动、拥塞避免两个部分。基于重传超时retransmission timeout/RTO和重复确认为条件判断是否发生了丢包。两者的区别在于Tahoe算法下如果收到三次重复确认就进入快重传立即重发丢失的数据包同时将慢启动阈值设置为当前拥塞窗口的一半将拥塞窗口设置为1MSS进入慢启动状态而Reno算法如果收到三次重复确认就进入快重传但不进入慢启动状态而是直接将拥塞窗口减半进入拥塞控制阶段这称为“快恢复”。而Tahoe和Reno算法在出现RTO时的措施一致都是将拥塞窗口降为1个MSS然后进入慢启动阶段。TCP BBRBottleneck Bandwidth and Round-trip propagation timeBBR是由Google设计于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传 输速率的信号而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来建立网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。该算法认为随着网络接口控制器逐渐进入千兆速度时分组丢失不应该被认为是识别拥塞的主要决定因素所以基于模型的拥塞控制算法能有更高的吞吐量和更低的延迟可以用BBR来替代其他流行的拥塞算法例如CUBIC。
16、简述 TCP 超时重传
TCP可靠性中最重要的一个机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段就启动一个定时器并等待确认信息接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能被确认TCP就认为报文段中的数据已丢失或损坏需要对报文段中的数据重新组织和重传。
17、说说 TCP 可靠性保证
TCP主要提供了检验和、序列号/确认应答、超时重传、最大消息长度、滑动窗口控制等方法实现了可靠性传输。 1.检验和 通过检验和的方式接收端可以检测出来数据是否有差错和异常假如有差错就会直接丢弃TCP段重新发送。TCP在计算检验和时会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分TCP首部、TCP数据、TCP伪首部 2.序列号/确认应答 这个机制类似于问答的形式。比如在课堂上老师会问你“明白了吗”假如你没有隔一段时间没有回应或者你说不明白那么老师就会重新讲一遍。其实计算机的确认应答机制也是一样的发送端发送信息给接收端接收端会回应一个包这个包就是应答包。上述过程中只要发送端有一个包传输接收端没有回应确认包ACK包都会重发。或者接收端的应答包发送端没有收到也会重发数据。这就可以保证数据的完整性 3.超时重传 超时重传是指发送出去的数据包到接收到确认包之间的时间如果超过了这个时间会被认为是丢包了需要重传。那么我们该如何确认这个时间值呢 我们知道一来一回的时间总是差不多的都会有一个类似于平均值的概念。比如发送一个包到接收端收到这个包一共是0.5s然后接收端回发一个确认包给发送端也要0.5s这样的两个时间就是RTT往返时间。然后可能由于网络原因的问题时间会有偏差称为抖动方差。从上面的介绍来看超时重传的时间大概是比往返时间抖动值还要稍大的时间。 但是在重发的过程中假如一个包经过多次的重发也没有收到对端的确认包那么就会认为接收端异常强制关闭连接。并且通知应用通信异常强行终止 4.最大消息长度 在建立TCP连接的时候双方约定一个最大的长度MSS作为发送的单位重传的时候也是以这个单位来进行重传。理想的情况下是该长度的数据刚好不被网络层分块。 5.滑动窗口控制 我们上面提到的超时重传的机制存在效率低下的问题发送一个包到发送下一个包要经过一段时间才可以。所以我们就想着能不能不用等待确认包就发送下一个数据包呢这就提出了一个滑动窗口的概念。 窗口的大小就是在无需等待确认包的情况下发送端还能发送的最大数据量。这个机制的实现就是使用了大量的缓冲区通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据如果已经接收了就从缓冲区里面删除数据。 在窗口之外的数据就是还未发送的和对端已经收到的数据。那么发送端是怎么样判断接收端有没有接收到数据呢或者怎么知道需要重发的数据有哪些呢通过下面这个图就知道了。 如上图接收端在没有收到自己所期望的序列号数据之前会对之前的数据进行重复确认。发送端在收到某个应答包之后又连续3次收到同样的应答包则数据已经丢失了需要重发。 6.拥塞控制
窗口控制解决了 两台主机之间因传送速率而可能引起的丢包问题在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵此时再发送数据就会加重网络负担那么发送的数据段很可能超过了最大生存时间也没有到达接收方就会产生丢包问题。为此TCP引入慢启动机制先发出少量数据就像探路一样先摸清当前的网络拥堵状态后再决定按照多大的速度传送数据。发送开始时定义拥塞窗口大小为1每次收到一个ACK应答拥塞窗口加1而在每次发送数据时发送窗口取拥塞窗口与接送段接收窗口最小者。慢启动在启动初期以指数增长方式增长设置一个慢启动的阈值当以指数增长达到阈值时就停止指数增长按照线性增长方式增加至拥塞窗口线性增长达到网络拥塞时立即把拥塞窗口置回1进行新一轮的“慢启动”同时新一轮的阈值变为原来的一半。
18、简述 TCP 滑动窗口以及重传机制?
滑动窗口协议是传输层进行流控的一种措施接收方通过通告发送方自己的窗口大小从而控制发送方的发送速度从而达到防止发送方发送速度过快而导致自己被淹没的目的。TCP的滑动窗口解决了端到端的流量控制问题允许接受方对传输进行限制直到它拥有足够的缓冲空间来容纳更多的数据。TCP在发送数据时会设置一个计时器若到计时器超时仍未收到数据确认信息则会引发相应的超时或基于计时器的重传操作计时器超时称为重传超时RTO 。另一种方式的重传称为快速重传通常发生在没有延时的情况下。若TCP累积确认无法返回新的ACK或者当ACK包含的选择确认信息SACK表明出现失序报文时快速重传会推断出现丢包需要重传。
19、说说滑动窗口过小怎么办?
我们可以假设窗口的大小是1也是就每次只能发送一个数据并且发送方只有接受方对这个数据进行确认了以后才能发送下一个数据。如果说窗口过小那么当传输比较大的数据的时候需要不停的对数据进行确认这个时候就会造成很大的延迟。
20、说说如果三次握手时候每次握手信息对方没收到会怎么样分情况介绍
如果第一次握手消息丢失那么请求方不会得到ack消息超时后进行重传如果第二次握手消息丢失那么请求方不会得到ack消息超时后进行重传如果第三次握手消息丢失那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制会等待3秒、6秒、12秒后重新发送SYNACK包以便Client重新发送ACK包。而Server重发SYNACK包的次数可以设置/proc/sys/net/ipv4/tcp_synack_retries修改默认值为5.如果重发指定次数之后仍然未收到 client 的ACK应答那么一段时间后Server自动关闭这个连接。client 一般是通过 connect() 函数来连接服务器的而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是说 client 在接收到 SYNACK包它的TCP连接状态就为 established已连接表示该连接已经建立。那么如果 第三次握手中的ACK包丢失的情况下Client 向server端发送数据Server端将以 RST包响应方能感知到Server的错误。
21、简述 TCP 的 TIME_WAIT为什么需要有这个状态
TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSLMaximum Segment Lifetime它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的因为TCP报文段以IP数据报在网络内传输而IP数据报则有限制其生存时间的TTL字段。对一个具体实现所给定的MSL值处理的原则是当TCP执行一个主动关闭并发回最后一个ACK该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失另一端超时并重发最后的FIN。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间定义这个连接的插口客户的IP地址和端口号服务器的IP地址和端口号不能再被使用。这个连接只能在2MSL结束后才能再被使用。理论上四个报文都发送完毕就可以直接进入CLOSE状态了但是可能网络是不可靠的有可能 最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
22、简述什么是 MSL为什么客户端连接要等待2MSL的时间才能完全关闭?
MSL是Maximum Segment Lifetime的英文缩写可译为“最长报文段寿命”它是任何报文在网络 上存在的最长时间超过这个时间报文将被丢弃。为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK接着客户端再重传一次确认重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL而是在发送完ACK之后直接释放关闭一但这个ACK丢失的话服务器就无法正常的进入关闭连接状态。 两个理由
保证客户端发送的最后一个ACK报文段能够到达服务端。 这个ACK报文段有可能丢失使得处于LAST-ACK状态的B收不到对已发送的FINACK报文段的确认服务端超时重传FINACK报文段而客户端能在2MSL时间内收到这个重传的FINACK报文段接着客户端重传一次确认重新启动2MSL计时器最后客户端和服务端都进入到CLOSED状态若客户端在TIME-WAIT状态不等待一段时间而是发送完ACK报文段后立即释放连接则无法收到服务端重传的FINACK报文段所以不会再发送一次确认报文段则服务端无法正常进入到CLOSED状态。防止“已失效的连接请求报文段”出现在本连接中。 客户端在发送完最后一个ACK报文段后再经过2MSL就可以使本连接持续的时间内所产生的所有报文段都从网络中消失使下一个新的连接中不会出现这种旧的连接请求报文段。
23、说说什么是 SYN flood如何防止这类攻击
SYN Flood是当前最流行的DoS拒绝服务攻击与DDoS(分布式拒绝服务攻击)的方式之一这是 一种利用TCP协议缺陷发送大量伪造的TCP连接请求使被攻击方资源耗尽CPU满负荷或内存 不足)的攻击方式.有以下三种方法预防或响应网络上的DDoS攻击: (1)从互联网服务提供商(ISP)购买服务。 许多互联网服务提供商(ISP)提供DDoS缓解服务但是当企业网络受到攻击时企业需要向互联网 服务提供商(ISP)报告事件以开始缓解。这种策略称为“清洁管道”在互联网服务提供商(ISP)收取服 务费用时很受欢迎但在缓解措施开始之前通常会导致30到60分钟的网络延迟。 (2)保留在内部并自己解决。 企业可以使用入侵防御系统/防火墙技术和专用于防御DDoS攻击的专用硬件来实现内部预防和响应 DDoS攻击。不幸的是受影响的流量已经在网络上消耗了宝贵的带宽。这使得该方法最适合在托 管设施中配备设备的企业在这些企业中流量是通过交叉连接到达互联网服务提供商(ISP)从而 保护流向企业其他部门的下游带宽。 (3)使用内容分发网络(CDN)。 由于IT团队可以将基础设施置于内容分发网络(CDN)后面因此这种方法可以最大程度地减少对企 业网络基础设施的攻击。这些网络庞大而多样如果组织订阅DNS和DDoS缓解措施则它们可以 保护电子商务站点以及企业本身。
24、 说说什么是 TCP 粘包和拆包
TCP是个“流”协议所谓流就是没有界限的一串数据。大家可以想想河里的流水是连成一片 的其间并没有分界线。TCP底层并不了解上层业务数据的具体含义它会根据TCP缓冲区的实际 情况进行包的划分所以在业务上认为一个完整的包可能会被TCP拆分成多个包进行发送也有 可能把多个小的包封装成一个大的数据包发送这就是所谓的TCP粘包和拆包问题。
假设客户端分别发送了两个数据包D1和D2给服务端由于服务端一次读取到的字节数是不确定的故可 能存在以下4种情况。 1服务端分两次读取到了两个独立的数据包分别是D1和D2没有粘包和拆包 2服务端一次接收到了两个数据包D1和D2粘合在一起被称为TCP粘包 3服务端分两次读取到了两个数据包第一次读取到了完整的D1包和D2包的部分内容第二次读取 到了D2包的剩余内容这被称为TCP拆包 4服务端分两次读取到了两个数据包第一次读取到了D1包的部分内容D1_1第二次读取到了D1包 的剩余内容D1_2和D2包的整包。如果此时服务端TCP接收滑窗非常小而数据包D1和D2比较大很有可能会发生第五种可能即服务端分多次才能将D1和D2包接收完全期间发生多次拆包。
25、说说 TCP 与 UDP 在网络协议中的哪一层他们之间有什么区别
TCP和UDP协议都是传输层协议。二者的区别主要有
基于连接vs无连接 TCP是面向连接的协议。 UDP是无连接的协议。UDP更加适合消息的多播发布从单个点向多个点传输消息。
可靠性 TCP提供交付保证传输过程中丢失将会重发。 UDP是不可靠的不提供任何交付保证。网游和视频的丢包情况有序性 TCP保证了消息的有序性即使到达客户端顺序不同TCP也会排序。 UDP不提供有序性保证。数据边界 TCP不保存数据边界。 虽然TCP也将在收集所有字节之后生成一个完整的消息但是这些信息在传给传输给接受端之 前将储存在TCP缓冲区以确保更好的使用网络带宽。 UDP保证。 在UDP中数据包单独发送的只有当他们到达时才会再次集成。包有明确的界限来哪些 包已经收到这意味着在消息发送后在接收器接口将会有一个读操作来生成一个完整的消 息。
速度 TCP速度慢 UDP速度快。应用在在线视频媒体电视广播和多人在线游戏。发送消耗 TCP是重量级。 UDP是轻量级。 因为UDP传输的信息中不承担任何间接创造连接保证交货或秩序的的信息。 这也反映在用于报头大小。报头大小 TCP头大。 一个TCP数据包报头的大小是20字节。 TCP报头中包含序列号ACK号数据偏移量保留控制位窗口紧急指针可选项填充项校验位源端口和目的端口。 UDP头小。 UDP数据报报头是8个字节。 而UDP报头只包含长度源端口号目的端口和校验和。拥塞或流控制 TCP有流量控制。 在任何用户数据可以被发送之前TCP需要三数据包来设置一个套接字连接。TCP处理的可靠 性和拥塞控制。 UDP不能进行流量控制。应用 由于TCP提供可靠交付和有序性的保证它是最适合需要高可靠并且对传输时间要求不高的应用。 UDP是更适合的应用程序需要快速高效的传输的应用如游戏。 UDP是无状态的性质在服务器端需要对大量客户端产生的少量请求进行应答的应用中是非常有用 的。 在实践中TCP被用于金融领域如FIX协议是一种基于TCP的协议而UDP是大量使用在游戏和娱 乐场所。上层使用的协议 基于TCP协议的TelnetFTP以及SMTP协议。 基于UDP协议的DHCP、DNS、SNMP、TFTP、BOOTP。
26、说说从系统层面上UDP 如何保证尽量可靠
UDP仅提供了最基本的数据传输功能至于传输时连接的建立和断开、传输可靠性的保证这些UDP 统统不关心而是把这些问题抛给了UDP上层的应用层程序去处理自己仅提供传输层协议的最基 本功能。最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理可靠UDP的简单设 计。
添加seq/ack机制确保数据发送到对端添加发送和接收缓冲区主要是用户超时重传。添加超时重传机制。
27、说一说 TCP 的 keepalive以及和 HTTP 的 keepalive 的区别
HTTP Keep-Alive 在http早期每个http请求都要求打开一个tpc socket连接并且使用一次之后就断开这个tcp连接。使用keepalive可以改善这种状态即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制可以减少tcp连接建立次数也意味着可以减少TIME_WAIT状态连接以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。但是keep-alive并不是免费的午餐,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive有时比重复利用连接带来的损失还更大。所以正确地设置keep-alive timeout时间非常重要。TCP KEEPALIVE 链接建立之后如果应用程序或者上层协议一直不发送数据或者隔很长时间才发送一次数据当链接很久没有数据报文传输时如何去确定对方还在线到底是掉线了还是确实没有数据传输链接还需不需要保持这种情况在TCP协议设计中是需要考虑到的。TCP协议通过一种巧妙的方式去解决这个问题当超过一段时间之后TCP自动发送一个数据为空的报文给对方如果对方回应了这个报文说明对方还在线链接可以继续保持如果对方没有报文返回并且重试了多次之后则认为链接丢失没有必要保持链接TCP的keepalive机制和HTTP的keep-alive机制是说的完全不同的两个东西tcp的keepalive是在ESTABLISH状态的时候双方如何检测连接的可用行。而http的keep-alive说的是如何避免进行重 复的TCP三次握手和四次挥手的环节。
28、简述 TCP 协议的延迟 ACK 和累计应答
延迟应答指的是TCP在接收到对端的报文后并不会立即发送ack而是等待一段时间发送ack 以便将ack和要发送的数据一块发送。当然ack不能无限延长否则对端会认为包超时而造成报文重 传。linux采用动态调节算法来确定延时的时间。累计应答指的是为了保证顺序性每一个包都有一个ID序号在建立连接的时候会商定起 始的ID是多少然后按照ID一个个发送。而为了保证不丢包对应发送的包都要进行应答但不是 一个个应答而是会应答某个之前的ID该模式称为累计应答
29、说说 TCP 如何加速一个大文件的传输
建连优化TCP 在建立连接时如果丢包会进入重试重试时间是 1s、2s、4s、8s 的指数递增 间隔缩短定时器可以让 TCP 在丢包环境建连时间更快非常适用于高并发短连接的业务场景。平滑发包在 RTT 内均匀发包规避微分时间内的流量突发尽量避免瞬间拥塞丢包预判有些网络的丢包是有规律性的例如每隔一段时间出现一次丢包例如每次丢包都连续 丢几个等如果程序能自动发现这个规律有些不明显就可以针对性提前多发数据减少重传 时间、提高有效发包率。RTO 探测若始终收不到 ACK 报文则需要触发 RTO 定时器。RTO 定时器一般都时间非常长会 浪费很多等待时间而且一旦 RTOCWND 就会骤降标准 TCP因此利用 Probe 提前与 RTO 去试探可以规避由于 ACK 报文丢失而导致的速度下降问题。带宽评估通过单位时间内收到的 ACK 或 SACK 信息可以得知客户端有效接收速率通过这个速 率可以更合理的控制发包速度。带宽争抢有些场景例如合租是大家互相挤占带宽的假如你和室友各 1Mbps 的速度看电 影会把 2Mbps 出口占满而如果一共有 3 个人看则每人只能分到 1/3。若此时你的流量流量 达到 2Mbps而他俩还都是 1Mbps则你至少仍可以分到 2/(211) * 2Mbps 1Mbps 的 50% 的带宽甚至更多代价就是服务器侧的出口流量加大增加成本。TCP 优化的本质就是用带宽 换用户体验感
30、服务器怎么判断客户端断开了连接
检测连接是否丢失的方法大致有两种keepalive和heart-beattcp内部机制采用keepalive它会先要求此连接一定时间没有活动一般是几个小时然后 发出数据段经过多次尝试后每次尝试之间也有时间间隔如果仍没有响应则判断连接中 断。可想而知整个周期需要很长的时间。应用层实现一个简单的heart-beat实现一般测试连接是否中断采用的时间间隔都比较短可以 很快的决定连接是否中断。并且由于是在应用层实现因为可以自行决定当判断连接中断后应该 采取的行为而keepalive在判断连接失败后只会将连接丢弃。
31、说说端到端点到点的区别
端到端通信是针对传输层来说的传输层为网络中的主机提供端到端的通信。因为无论tcp还是udp协议都要负责把上层交付的数据从发送端传输到接收端不论其中间跨越多少节点。只不过tcp比较可靠而udp不可靠而已。所以称之为端到端也就是从发送端到接收端。它是一个网络连接指的是在数据传输之前在发送端与接收端之间忽略中间有多少设备为数据的传输建立一条链路链路建立以后发送端就可以发送数据知道数据发送完毕接收端确认接收成功。 也就是说在数据传输之前先为数据的传输开辟一条通道然后在进行传输。从发送端发出数据到接收端接收完毕结束。端到端通信建立在点到点通信的基础之上它是由一段段的点到点通信信道构成的是比点到点通信更高一级的通信方式完成应用程序(进程)之间的通信。 端到端的优点 链路建立之后发送端知道接收端一定能收到而且经过中间交换设备时不需要进行存储转发因此传输延迟小。 端到端传输的缺点 1直到接收端收到数据为止发送端的设备一直要参与传输。如果整个传输的延迟很长那么对发送端的设备造成很大的浪费。 2如果接收设备关机或故障那么端到端传输不可能实现点到点通信是针对数据链路层或网络层来说的因为数据链路层只负责直接相连的两个节点之间的通信一个节点的数据链路层接受ip层数据并封装之后就把数据帧从链路上发送到与其相邻的下一个节点。 点对点是基于MAC地址和或者IP地址是指一个设备发数据给与该这边直接连接的其他设备这台设备又在合适的时候将数据传递给与它相连的下一个设备通过一台一台直接相连的设备把数据传递到接收端。直接相连的节点对等实体的通信叫点到点通信。它只提供一台机器到另一台机器之间的通信不会涉及到程序或进程的概念。同时点到点通信并不能保证数据传输的可靠性也不能说明源主机与目的主机之间是哪两个进程在通信。由物理层、数据链路层和网络层组成的通信子网为网络环境中的主机提供点到点的服务 点到点的优点 1发送端设备送出数据后它的任务已经完成不需要参与整个传输过程这样不会浪费发送 端设备的资源。 2即使接收端设备关机或故障点到点传输也可以采用存储转发技术进行缓冲。 点到点的缺点 点到点传输的缺点是发送端发出数据后不知道接收端能否收到或何时能收到数据。在一个网络系统的不同分层中可能用到端到端传输也可能用到点到点传输。如Internet网IP及以下各层采用点到点传输4层以上采用端到端传输。
32、说说浏览器从输入 URL 到展现页面的全过程
1、url输入 当我们在浏览器中输入网址的时候浏览器已经开始在智能的匹配的可能的url了。他会在历史记录、收藏书签等网址中匹配可能是输入字符串所对应的的url然后给出智能提示用来补全url。对于谷歌浏览器他甚至可以在缓存中将页面直接显示出来。
2、浏览器查找域名的 IP 地址(DNS解析) DNS域名系统。实现了网址到ip地址的转换。 什么是DNSDNS是因特网上作为域名和ip地址相互映射的分布式数据库能够使用户更方便的访问互联网而不用去记住能够被机器读取的ip地址。 域名解析通过主机名最终得到该主机名对应的ip地址的过程叫做域名解析。或主机解析 3、TCP链接 tcp三次握手 4、发送HTTP请求 客户端向服务器发送http请求时会请求一些信息包含三个部分 请求方法/URL协议/版本 请求头 请求正文 5、服务器永久重定向 服务器给浏览器响应一个永久重定向的301响应。 这样浏览器就会访问http://www.google.com/ 而非http://google.com/。 重定向原因
网站调整网页被移到一个新地址网页扩展名改变
301和302的区别301和302都表示重定向 区别在于 302表示临时的转移当一个URL短期内变化使用。旧地址A的资源仍然在这个临时重定向只是临时从旧地址A跳转到新地址B搜索引擎会抓取新的内容而保存旧的网址 301是永久重定向。搜索引擎在抓取新内容时会将旧的网址替换成重定向之后的网址。301表示旧地址A的资源已经被永久移除了这个资源不可访问了搜索引擎在抓取新内容的同时也会将旧的网址替换为重定向之后的新网址
6、服务器处理请求 后端在固定的端口接收到tcp报文开始他会对tcp链接进行处理对http协议进行解析。 7、服务器返回一个http响应 经过前面的六个步骤服务器已经收到了我们的请求并且处理了我们的 请求到这一步会把他处理的结果返回也就是返回一个http响应。 http响应与http请求相似http响应也由三个部分构成分别是
响应行egHTTP/1.1 200 OK 协议版本 状态码 状态描述响应头响应正文包含我们需要的具体信息cookiehtmlcssjs后端发回的请求数据等 *状态码 8、浏览器显示html 构建dom树 - 构建render树 - 布局render树 - 绘制render树 9、连接结束 四次挥手
33、简述 HTTP 和 HTTPS 的区别
一定义
HTTP是互联网上应用最为广泛的一种网络协议是一个客户端和服务器端请求和应答的标准TCP用于从WWW服务器传输超文本到本地浏览器的传输协议它可以使浏览器更加高效使网络传输减少。HTTPS是以安全为目标的HTTP通道简单讲是HTTP的安全版即HTTP下加入SSL层HTTPS的安全基础是SSL因此加密的详细内容就需要SSL。 HTTPS协议的主要作用可以分为两种一种是建立一个信息安全通道来保证数据传输的安全另一种就是确认网站的真实性。 二HTTP与HTTPS的区别 https协议需要到ca申请证书一般免费证书较少因而需要一定费用。 http是超文本传输协议信息是明文传输https则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式用的端口也不一样前者是80后者是443。 http的连接很简单是无状态的HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议比http协议安全。
34、说说 HTTP 中的 referer 头的作用
HTTP Referer是header的一部分当浏览器向web服务器发送请求的时候一般会带上Referer告诉服务器该网页是从哪个页面链接过来的服务器因此可以获得一些信息用于处理。防盗链。假如在www.google.com里有一个www.baidu.com链接那么点击进入这个www.baidu.com它的header信息里就有Referer http://www.google.com只允许我本身的网站访问本身的图片服务器假如域是 www.google.com 那么图片服务器每次取到Referer来判断一下域名是不是 www.google.com 如果是就继续访问不是就拦截。将这个http请求发给服务器后如果服务器要求必须是某个地址或者某几个地址才能访问而你发送的referer不符合他的要求就会拦截或者跳转到他要求的地址然后再通过这个地址进行访问。防止恶意请求比如静态请求是 *.html 结尾的动态请求是 *.shtml 那么由此可以这么用所有的 *.shtml 请求必须Referer为我自己的网站。空Referer 定义Referer头部的内容为空或者一个HTTP请求中根本不包含Referer头部一个请求并不是由链接触发产生的直接在浏览器的地址栏中输入一个资源的URL地址那么这种请求是不会包含Referer字段的因为这是一个“凭空产生”的HTTP请求并不是从一个地方链接过去的。那么在防盗链设置中允许空Referer和不允许空Referer有什么区别允许Referer为空意味着你允许比如浏览器直接访问。防御CSRF 比对HTTP 请求的来源地址如果Referer中的地址是安全可信任的地址那么就放行
35、说说 HTTP 的方法有哪些
GET 用于请求访问已经被URI统一资源标识符识别的资源可以通过URL传参给服务器 POST用于传输信息给服务器主要功能与GET方法类似但一般推荐使用POST方式。 PUT 传输文件报文主体中包含文件内容保存到对应URI位置。 HEAD 获得报文首部与GET方法类似只是不返回报文主体一般用于验证URI是否有效。 DELETE删除文件与PUT方法相反删除对应URI位置的文件。 OPTIONS查询相应URI支持的HTTP方法。
36、 简述 HTTP 1.01.12.0 的主要区别
http/1.0 :
默认不支持长连接需要设置keep-alive参数指定强缓存expired、协商缓存last-modified\if-modified-since 有一定的缺陷
http 1.1 :
默认长连接(keep-alive)http请求可以复用Tcp连接但是同一时间只能对应一个http请求(http请求在一个Tcp中是串行的)增加了强缓存cache-control、协商缓存etag\if-none-match 是对http/1 缓存的优化
http/2.0 :
多路复用一个Tcp中多个http请求是并行的 (雪碧图、多域名散列等优化手段http/2中将变得多余)二进制格式编码传输使用HPACK算法做header压缩服务端推送
37、 说说 HTTP 常见的响应状态码及其含义
200 : 从状态码发出的请求被服务器正常处理。 204 : 服务器接收的请求已成功处理但在返回的响应报文中不含实体的主体部分【即没有内 容】。 206 : 部分的内容如客户端进行了范围请求但是服务器成功执行了这部分的干请求。 301 : 跳转代表永久性重定向请求的资源已被分配了新的URI以后已使用资源现在设置了 URI。 302 : 临时性重定向请求的资源已经分配了新的URI希望用户本次能够使用新的URI来进行访 问。 303 : 由于请求对应的资源存在的另一个URI因使用get方法定向获取请求的资源。 304 : 客户端发送附带条件的请求时服务器端允许请求访问资源但因发生请求未满足条件的情 况后直接返回了 304。 307 : 临时重定向【该状态码与302有着相同的含义】。 400 : 请求报文中存在语法错误当错误方式时需修改请求的内容后再次发送请求。 401 : 发送的请求需要有通过HTTP认证的认证信息。 403 : 对请求资源的访问被服务器拒绝了。 404 : 服务器上无法找到请求的资源。 500 : 服务器端在执行请求时发生了错误。 503 : 服务器暂时处于超负载或者是正在进行停机维护现在无法处理请求 信息类状态码表示接收请求状态处理 2XX : 成功状态码表示请求正常处理完毕 3XX : 重定向表示需要进行附加操作已完成请求 4XX : 客户端错误表示服务器无法处理请求 5XX : 服务器错误状态码表示服务器处理请求的时候出错
38、 说说 GET请求和 POST 请求的区别
GET请求在URL中传送的参数是有长度限制的而POST没有。GET比POST更不安全因为参数直接暴露在URL上所以不能用来传递敏感信息。GET参数通过URL传递POST放在Request body中。GET请求参数会被完整保留在浏览器历史记录里而POST中的参数不会被保留。GET请求只能进行url编码而POST支持多种编码方式。GET请求会被浏览器主动cache而POST不会除非手动设置。GET产生的URL地址可以被Bookmark而POST不可以。GET在浏览器回退时是无害的而POST会再次提交请求。
39、说说 Cookie 和 Session 的关系和区别是什么
Cookie与Session都是会话的一种方式。它们的典型使用场景比如“购物车”当你点击下单按钮时服务端并不清楚具体用户的具体操作为了标识并跟踪该用户了解购物车中有几样物品服务端通过为该用户创建Cookie/Session来获取这些信息。cookie数据存放在客户的浏览器上session数据放在服务器上。cookie不是很安全别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session。session会在一定时间内保存在服务器上。当访问增多会比较占用你服务器的性能 考虑到减轻服务器性能方面应当使用COOKIE。单个cookie保存的数据不能超过4K很多浏览器都限制一个站点最多保存20个cookie。
40、简述 HTTPS 的加密与认证过程?
非对称加密对称加密证书认证! 1https是基于tcp协议的客户端先会和服务端发起链接建立 2接着服务端会把它的证书返回给客户端证书里面包括公钥S.pub、颁发机构和有效期等信息 3拿到的证书可以通过浏览器内置的根证书内含C.pub验证其合法性 4客户端生成随机的对称加密秘钥Z通过服务端的公钥S.pub加密发给服务端 5客户端和服务端通过对称秘钥Z加密数据来进行http通信 那根证书怎么保证签发的证书是有安全有效的 1、服务器会预先生成非对称加密密钥私钥S.pri自己保留而公钥S.pub则发给CA机构进行签名认证 2、CA也会预先生成一非对称加密密钥其私钥C.pri用来对服务器的公钥S.pub进行签名生成CA证书 3、CA机构会把签名生成的CA证书返回给服务器也就是刚才服务端给客户端那个证书 4、因为CA(证书颁发机构)比较权威所以很多浏览器会内置包含它公钥(C.pub)的证书称之为根证书。然后可以使用根证书来验证其颁发证书的合法性了 服务端证书通过CA机构签名认证的过程如下