1.TCP报头格式 UDP报头格式
TCP报头格式
UDP报头格式
具体的各部分解释看
TCP报头的数据偏移有四位2进制数(最大是1111),换成十进制就是最大为15,很特殊的是其中每一位代表四个字节,也就是最多有15*4=60个字节。数据偏移量--------就是真正的数据在这个报文段开始的位置,也就是报文头部的全部长度。
TCP检验和计算过程: TCP首部校验和计算三部分:TCP首部+TCP数据+TCP伪首部。
TCP检验和计算过程:伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和
UDP协议格式 - CSDN博客 TCP校验和和UDP几乎一样,就是UDP伪首部中8位传输层协议号是17而TCP是6
2.TCP/UDP区别(不仅是宏观上的,最好能根据各自的机制讲解清楚)
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付; Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
具体参考区别,优缺点参考TCP和UDP的区别和优缺点 - CSDN博客(里面还有TCP和UDP编程的不同)
3. HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)
HTTP状态码具体参考HTTP状态码 | 菜鸟教程
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
100 - 客户端应当继续发送请求(1** 1开头的信息,服务器收到请求,需要请求者继续执行操作)
200 - 请求成功 201 - 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立
202 - 服务器已接受请求,但尚未处理 (2**成功,操作被成功接收并处理)
301 - 资源(网页等)被永久转移到其它URL ; 304:客户端已经执行了GET,但文件未变化
(3**重定向,需要进一步的操作以完成请求)
404 - 请求的资源(网页等)不存在 (4**客户端错误,请求包含语法错误或无法完成请求)
500 - 内部服务器错误 503 - 服务器超时 (5**服务器错误,服务器在处理请求的过程中发生了错误)
4.HTTP协议(一些报头字段的作用,如cace-control、keep-alive)
很详细的教程HTTP 教程 | 菜鸟教程
HTTP 简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本
HTTP 工作原理
HTTP协议工作于客户端-服务端架构上,是一种无状态协议。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。web服务器之iis,apache,tomcat三者之间的比较 - CSDN博客
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP头信息解读: /(ㄒoㄒ)/~~HTTP头部
HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成(说白了就是键值对)。
通用头:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头:是请求报文特有的,它们向服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
响应头:便于向客户端提供信息,比如,客户端在与哪种类型的服务器进行交互,如Server头部。
实体头:指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。
(1)HTTP通用头:(选了几个记一下就好)
1)Cache-Control :指定请求和响应遵循的缓存机制(包括no-cache:指示请求或响应消息不能缓存,no-store:缓存应该尽快从存储器中删除文档的所有痕迹等)
2)Connection :Connection表示是否需要持久连接(Close:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了; Keepalive:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求; Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒),如Keep-Alive:300)
(2)HTTP请求头:
1)Host:请求资源所在的服务器域名(对于虚拟主机来说)以及(可选的)服务器监听的TCP端口号。如果所请求的端口是对应的服务的标准端口(80),则端口号可以省略。(例如 Host: www.itbilu.com:80; Host: www.itbilu.com;Host: developer.cdn.mozilla.net)。Host请求头实际上就是为了让客户端能辨别这个请求到底是来自同一个IP地址(对应一个虚拟机)对应的多个域名中的哪一个。
2)Accept :告诉WEB服务器自己接受什么介质类型,(例如:Accept:text/plain ,相当于告诉服务端,客户端能够接受的响应类型仅为纯文本数据)
3)Cookie: 客户端的Cookie就是通过这个报文头属性传给服务端的。( 服务端是怎么知道客户端的多个请求是隶属于一个Session呢?原来就是通过HTTP请求报文头的Cookie属性的jsessionid的值关联起来的 )
(3)HTTP响应头:
1)Age:响应对象在代理缓存中存在的时间,以秒为单位(Age: 12)
2)ETag: 资源的匹配信息,ETag是一个可以与Web资源关联的记号(token)。ETag一般不以明文形式相应给客户端。在资源的各个生命周期中,它都具有不同的值,用于标识出资源的状态。当资源发生变更时,如果其头信息中一个或者多个发生变化,或者消息实体发生变化,那么ETag也随之发生变化
(4)HTTP实体头:
1)Allow:服务器支持哪些请求方法(如GET、POST等)。
2)Content-Encoding: gzip ; 实体主体适用的编码方式
3)Content-Language: zh-cn; 实体的自然语言
4)Content-Length:80 ; 实体主体的大小(字节)
HTTP1.1 和 HTTP1.0区别:
1,HTTP/1.0协议使用非持久连接 而 HTTP/1.1协议使用持久连接
HTTP/1.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象,;HTTP/1.1默认使用持久连接(然而,HTTP/1.1协议的客户机和服务器可以配置成使用非持久连接)。在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象! HTTP 1.1的持续连接,需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。
2. HTTP 1.0不支持Host请求头字段,而HTTP/1.1协议增加Host请求头字段
HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。
3.HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
5. OSI协议、TCP/IP协议以及每层对应的协议
OSI,TCP/IP,五层协议的体系结构,以及各层协议
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP四层模型(4层):网络接口层、 网络层、运输层、 应用层。
TCP/IP五层体系结构 (5层):物理层、数据链路层、网络层、运输层、 应用层。
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:CSMA/CD、PPP(拨号上网基本都是用的PPP协议, PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议)、ATM、Frame Relay 、HDLC、VLAN、MAC (网桥,交换机) 网络知 识总结二:物理层和链路层协议详解 - CSDN博客 ATM协议及ATM技术介绍 - CSDN博客
PPP协议的三个组成部分(1)封装成帧;
(2)透明传输:是不管传的是什么,所采用的设备只是起一个通道作用,把要传输的内容完好的传到对方;
(3)差错检测 ;
网络层:IP、ICMP(因特网控制报文协议)、IGMP(因特网组管理协议),ARP(地址解析协议)、 RARP、OSPF、IPX、RIP、IGRP (内部网关路由协议) 网络层协议原理
ICMP:定义了网络层控制和传递消息的功能,可以报告IP数据包传送过程中发生的错误,失败等信息,提供网络诊断功能。
传输层:TCP、UDP、SPX
会话层:NFS ( 网络文件系统协议 )、SQL(结构化查询语言协议)、NETBIOS(网络的基本输入输出 系统协议)、RPC (远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务)
表示层:JPEG(图像压缩标准协议)、MPEG(运动图象专家组协议)、ASCII(ASCII码通讯协议)
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
文件传输协议有基于TCP的FTP和 基于UDP的简单文件传输协议TFTP,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件传回到原节点。
应用层常用协议 - CSDN博客 应用层协议 - 专注it - 博客园
(注释:IP协议的功能:
(1)寻址和路由;(根据对方的IP地址,寻找最佳路径传输信息);
(2)传递服务:① 不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议);② 无连接;(事先不建立会话);
(3)数据包的分片和重组。IP协议及IP数据包详解 - CSDN博客
每一层的作用如下:
物理层:该层包括物理连网媒介,如电缆连线连接器。物理层的协议产生并检测电压以便发送和接收携带数据的信号。
数据链路层:它控制网络层与物理层之间的通信。它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递
网络层:其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方
传输层:传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割
会话层:负责在网络中的两节点之间建立和维持通信。
表示层:在表示层,数据将按照网络能理解的方案进行格式化;如加密解密,转换翻译,压缩解压
应用层:负责对软件提供接口以使程序能使用网络服务。
6.SESSION(会话)机制、cookie机制 ,session跨域问题
会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
cookie机制 :是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
Session机制:是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
session跨域应该是问session如何共享:
1.session sticky,2. session replication,3. session数据集中存储,4. cookie based;
7. TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)
参考自己的文章三次握手和四次挥手 - 简书
8. 打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)一个网页打开的全过程 - CSDN博客
一个网页从请求到最终显示的完整过程一般可分为如下7个步骤:
1. 在浏览器中输入网址;
2. 发送至DNS服务器并获得域名对应的WEB服务器的IP地址;
3. 与WEB服务器建立TCP连接;
4. 浏览器向WEB服务器的IP地址发送相应的HTTP请求;
5. WEB服务器响应请求并返回指定URL的数据,或错误信息,如果设定重定向,则重定向到新的URL地址 。
6. 浏览器下载数据后对页面进行渲染,即解析HTML源文件,解析的过程中实现对页面的排版,解析完成后在浏览器中显示基础页面。
7. 分析页面中的超链接并显示在当前页面,重复以上过程直至无超链接需要发送,完成全部显示。
9. http和https区别,https在请求时额外的过程,https是如何保证数据安全的
参考我自己的文章http和https的区别与联系 - 简书
10. IP地址子网划分
利用子网掩码计算最大可用主机数
有一个A类IP地址,设其子网掩码为255.252.0.0,将它划分成若干子网络,每个子网络可用主机数有多少?
①将子网掩码转换成二进制表示11111111.11111100.00000000.00000000(0代表的是主机位)
②统计一下它的主机位共有18位
③最大可用主机数就是2的18次方减2(除去全是0的网络地址和全是1广播地址),即每个子网络最多有262142台主机可
利用子网掩码计算最大有效子网数
A类IP地址,子网掩码为255.224.0.0,它所能划分的最大有效子网数是多少?
①将子网掩码转换成二进制表示11111111.11100000.00000000.00000000 (1代表的是网络位)
②统计一下它的网络位共有11位
③A类地址网络位的基础数是8,二者之间的位数差是3
④最大有效子网数就是2的3次方,即最多可以划分8个子网络,但是一般要去除全0和全1的子网,故8-2=6。
1. A类地址
⑴ A类地址第1字节为网络地址,其它3个字节为主机地址。
⑵ A类地址范围:1.0.0.1—126.255.255.254 默认子网掩码为:255.0.0.0 (网络号全1,主机号全0)
⑶ A类地址中的私有地址和保留地址:
①10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
②127.X.X.X是保留地址,用做循环测试用的。
2. B类地址
⑴ B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
⑵ B类地址范围:128.0.0.1—191.255.255.254。 默认子网掩码为:255.255.0.0;
⑶ B类地址的私有地址和保留地址
①172.16.0.0—172.31.255.255是私有地址
②169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。
3. C类地址
⑴ C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
⑵ C类地址范围:192.0.0.1—223.255.255.254。 默认子网掩码为:255.255.255.0;
⑶ C类地址中的私有地址:
192.168.X.X是私有地址。
4. D类地址
⑴ D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
⑵ D类地址范围:224.0.0.1—239.255.255.254
5. E类地址
⑴ E类地址也不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
⑵ E类地址范围:240.0.0.1—255.255.255.254
IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同
减去2是因为: 主机号全为1的IP称为广播地址; 主机号全为0的IP称为网络号
11. POST和GET区别
(1)HTTP定义了与服务器交互的不同方法,其中最基本的HTTP请求有五种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。
根据HTTP规范,POST的请求可能会修改服务器上的资源。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。
(2)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB
(3)安全性不同:比方说通过GET请求了某个url,然后一些参数都明确的附在url后面了,查看浏览器历史访问的时候就可以看见了,一些文件也在访问的同时被缓存了,而一般POST的则不会。
综上所述:GET的HTTP请求不会修改服务器上的资源。而POST的请求可能会修改服务器上的资源
12. DNS解析过程
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
3、路由缓存:如果操作系统中找不到的话再去路由器中DNS缓存里面查找。
4、ISP的DNS服务器:路由器中还找不到的话,就去ISP中专门的DNS服务器查找。ISP是互联网服务提供商(Internet Service Provider)的简称
5、顶级域名服务器:ISP的DNS服务器还找不到的话,会随机向一个顶级域名服务器(比如.com, .net等这些顶级域名服务器)发出请求。比如我要找www.baidu.com这个网站,我刚好随机访问的是.com这个顶级域名服务器,那么就会直接返回baidu.com这个域的ip;如果不碰巧找的不是.com这个顶级域名服务器(比如找的是.net),那么这个顶级域名服务器就会再向根服务器查询。
5、根服务器:顶级域名服务器没有找到的话,就会向根服务器发出请求,根服务器会告诉请求的顶级域名服务器.com域名服务器的IP地址,这样发出请求的.net顶级域名服务器就会直接去访问.com顶级域名服务器;com域的服务器发现你这请求是baidu.com这个域的,我一查发现了这个域的NS(域名服务器记录),那我就返回给ISPDNS baidu.com这个域的ip地址,你再去查。(目前百度有4台baidu.com的顶级域名服务器)。ISPDNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有www的这台主机,就把这个IP返回给你了,然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中。
13. TCP如何保证数据的可靠传输的(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握) TCP 协议如何保证可靠传输 - 浅井光一 - 博客园
tcp 慢启动,拥塞避免,快速重传,快速恢复 - NeverMore! - 博客园
自己笔记上有的。
ssthresh为慢启动门限,Reno与Tahoe相比,增加了快速恢复阶段,也就是说,完成快速重传后,进入了拥塞避免阶段而不是慢 启动阶段。慢开始:TCP发送方在初始阶段是以指数的速度增加,即每过一个RTT将拥塞窗口(cwnd/congwin)的值翻倍,TCP发送方继续以指数的速度增加其发送速度指导到达初始设定的慢启动门限ssthresh,之后会变成线性增长(每次加1)。
对超时事件做出反应:当受到3个冗余ACK后,TCP的拥塞窗口减小为当前的一半,然后线性的增加
拥塞窗口:是对于数据发送端来说的,指发送端在一个RTT内最大可以发送的数据包数量。
滑动窗口:是接收端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到控制流量的目的。
快恢复和快重传一般都是一起使用的
快重传步骤:(在某个报文段的定时器过期之前重传丢失的报文段,或者一旦收到3个冗余ACK后就进行重传丢失的报文段)
要求接收方每收到一个失序的报文段后就立即发出重复确认而不是等待自己发送数据时才捎带确认
发送方只要一连收到三个重复确认就立即重传对方尚未收到的报文段,而不必等待设置的重传计时器到期
(1)当收到3个重复ACK时,把ssthresh设置为cwnd的一半,
(2)把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络(为什么有3个“老”的数据包离开了网络? 因为快重传中已经规定要求接收方每收到一个失序的报文段后就立即发出重复确认而不是等待自己发送数据时才捎带确认)
快速恢复步骤:(在收到3个冗余ACK之后取消慢加法增大的行为,Reno与Tahoe相比,增加了快速恢复阶段,也就是说,完成快速重传后,进入了拥塞避免阶段而不是慢启动阶段。 )
(1)当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。
14. 地址解析协议ARP TCP/IP协议——ARP详解 - songoo - 博客园
地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。(工作在局域网中的)
同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
15. 交换机和路由器的区别
1.从外形上我们区分两者,交换机通常端口比较多看起来比较笨重,而路由器的端口就少得多体积也小得多,
2.交换机工作在数据链路层,而路由器则工作在网络层
3. 交换机是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组。
4.交换机主要是用于组建局域网,而路由器则是负责让主机连接外网
5.路由器不会转发广播数据,交换机会转发广播数据给局域网中的所有主机
16. DOS与DDOS攻击的原理
DOS攻击:一台或多台计算机对受攻击服务器的某一个端口发送大量无关的UDP报文,导致整个通道内的正常服务无法进行。
DDOS攻击:大量的肉鸡对服务器的不同端口发送巨型流量的UDP报文,无法通过关闭端口的方式来进行隔离,破坏力极强,严重会造成服务器当机。(listen有一个队列,处理连接请求。在收到匿名IP发过来的SYN之后,会在listen队列中存放一个记录,但是队列容量是有限的,当这样的恶意请求过多的时候,listen队列里就塞满了这些无效的连接请求,然后装不下更多的连接记录了,所以就拒绝其他请求了)
根据攻击的时间和方式又可分将DDOS为以下几种
1.SYN Flood
.SYN Flood2.ACK Flood
ACK Flood3.Connection Flood
Connection Flood4.HTTP Get Flood
HTTP Get Flood17.各个层寻址
运输层寻址:端口(port) 网络层寻址:IP 数据链路层: MAC
18.物联网四大协议的基本介绍(记住MQTT,其他了解名字)
(1)MQTT(Message Queuing Telemetry Transport,消息队列遥测传输):是一个即时通讯协议,有可能成为物联网的重要组成部分。该协议构建于TCP/IP协议上,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议,MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
(2)XMPP : XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个已经配置好XMPP协议的系统添加功能。
(3)CoAP:受限制的应用协议(Constrained Application Protocol)。在最近几年的时间中,专家们预测会有更多的设备相互连接,而这些设备的数量将远超人类的数量。在这种大背景下,物联网和M2M技术应运而生。虽然对人而言,连接入互联网显得方便容易,但是对于那些微型设备而言接入互联网非常困难。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常的小巧,最小的数据包仅为4字节。
(4)REST 指的是一组 架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合 云计算之类的环境。客户端可以缓存数据以改进性能
19.TCP中的五个计时器
(1)重传计时器(Retransmission Timer):
目的:为了控制丢失的报文段或者丢弃的报文段。这段时间为对报文段的等待确认时间。
创建时间:在TCP发送报文段时,会创建对次特定报文段的重传计时器。
可能发生的两种情况:在截止时间(通常为60秒)到之前,已经收到了对此特定报文段的确认,则撤销计时器;在截止时间到了,但为收到对此特定报文段的确认,则重传报文段,并且将计时器复位。
重传时间:2*RTT(Round Trip Time,为往返时间)
(2)坚持计时器(Persistent Timer):
目的:主要解决零窗口大小通知可能导致的死锁问题
死锁问题的产生:当接收端的窗口大小为0时,接收端向发送端发送一个零窗口报文段,发送端即停止向对接收端发送数据。此后,如果接收端缓存区有空间则会重新给发送端发送一个窗口大小,即窗口更新。但接收端发送的这个确认报文段有可能会丢失,而此时接收端不知道已经丢失并认为自己已经发送成功,则一直处于等待数据的状态;而发送端由于没有收到该确认报文段,就会一直等待对方发来新的窗口大小,这样一来,双方都处在等待对方的状态,这样就形成了一种死锁问题。如果没有应对措施,这种局面是不会被打破的。为了解决这种问题,TCP为每一个连接设置了坚持计时器。
工作原理:当发送端TCP收到接收端发来的零窗口通知时,就会启动坚持计时器。当计时器的期限到达时,发送端就会主动发送一个特殊的报文段告诉对方确认已经丢失,必须重新发送。【这个特殊的报文段就称为探测报文段,探测报文段只有1个字节的大小,里边只有一个序号,该序号不需要被确认,甚至在计算其他部分数据的确认时该序号会被忽略。】
截止期的设置:设置为重传时间的值。但如果没有收到接收端的响应,则会发送另一个探测报文段,并将计时器的值加倍并复位,直到大于门限值(一般为60秒)。在此之后,发送端会每隔60秒发送一个探测报文段,直到窗口重新打开。
(3)保活计时器(Keeplive Timer):
目的:主要是为了防止两个TCP连接出现长时间的空闲。当客户端与服务器端建立TCP连接后,很长时间内客户端都没有向服务器端发送数据,此时很有可能是客户端出现故障,而服务器端会一直处于等待状态。保活计时器就是解决这种问题而生的。
工作原理:每当服务器端收到客户端的数据时,都将保活计时器重新设置(通常设置为2小时)。过了2小时后,服务器端如果没有收到客户端的数据,会发送探测报文段给客户端,并且每隔75秒发送一个,当连续发送10次以后,仍没有收到对端的来信,则服务器端认为客户端出现故障,并会终止连接。
(4)时间等待计时器(Time_Wait Timer):
时间等待计时器是在连接终止期间使用的。当TCP关闭连接时并不是立即关闭的,在等待期间,连接还处于过渡状态。这样就可以使重复的FIN报文段在到达终点之后被丢弃。
时间设置:一般为报文段寿命期望值的2倍。
(5)2MSL(2倍报文段最大生存时间)计时器
TCP的TIME_WAIT状态也称为2MSL等待状态
20. Nagle算法 &&nagle算法的CORK选项
(1)Nagle算法的基本定义:任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置 最大报文段长度MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块(算法目的,通过cork选项来实现)。Nagle算法只允许一个未被ACK的包存在于网络,它并不管包的大小,因此它事实上就是一个扩展的停-等协议,只不过它是基于包停-等的,而不是基于字节停-等的。Nagle算法完全由TCP协议的ACK机制决定,这会带来一些问题,比如如果对端ACK回复很快的话,Nagle事实上不会拼接太多的数据包,虽然避免了网络拥塞,网络总体的利用率依然很低。
Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
tcp_nodelay:禁止nagle算法,有需要发送的就立即发送
(2)TCP_CORK 选项(CORK算法)
所谓的CORK就是塞子的意思,形象地理解就是用CORK将连接塞住,使得数据先不发出去,等到拔去塞子后再发出去。设置该选项后,内核会尽力把小数据包拼接成一个大的数据包(一个MTU)再发送出去,当然若一定时间后(一般为200ms,该值尚待确认),内核仍然没有组合成一个MTU时也必须发送现有的数据(不可能让数据一直等待吧)。
然而,TCP_CORK的实现可能并不像你想象的那么完美,CORK并不会将连接完全塞住。内核其实并不知道应用层到底什么时候会发送第二批数据用于和第一批数据拼接以达到MTU的大小,因此内核会给出一个时间限制,在该时间内没有拼接成一个大包(努力接近MTU最大传输单元)的话,内核就会无条件发送。
也就是说若应用层程序发送小包数据的间隔不够短时,TCP_CORK就没有一点作用,反而失去了数据的实时性(每个小包数据都会延时一定时间再发送)。
21. 实现一个可靠的UDP协议
实现一个最基础的可靠udp通讯协议,我们只需要提供一个重传机制即可。在这我实现了一个简单的可靠udp协议,具体的实现方式如下(1)(2):
(1)为每一个发送出去的udp数据包分配一个包id,每次接收方收到一个数据包时,都要回应发送方一个ack对应这个包id。协议通过这种确认机制来保证接收方能收到发送方发出的udp数据包;
(2)在发出的时候,发送方应该设置一个计时器,超时的话会重传数据包。
具体来说它没做这些事情:
(1)它没有保证包的有序性。发送方连续发送几个udp数据包,接收方可以以任何顺序收到这几个数据包。如果想要做到有序性,必须由应用层来完成。
(2)它没做流量控制。发送方连续大量发送数据包会导致网络性能变差,丢包次数增大。
(3)它没对数据包大小做控制。为了避免IP层对数据包进行分片,应用层应该要保证每个数据包的大小不超过MTU最大传输单元。如果这个数据包会经过广域网(一般情况下)这个值应该不超过576。考虑到IP头的20字节,udp头的8个字节,以及这个协议头的字节。最好每次发送的数据大小在512以内。
22.WebSocket协议 WebSocket协议:5分钟从入门到精通 - 程序猿小卡 - 博客园
WebSocket协议: HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。
WebSocket协议就是html5中的一种协议,我的理解是,他是对html的长连接的一种升级。你也可以将它理解成一种长连接。
(1)websocket连接只需要建立一次,在第一次连接的时候,客户端和服务器会交换必要的信息;它只需要建立一次连接,传递一次必要的请求头和响应头信息,之后再传递数据的时候就不需要在交换这些信息了。节省了带宽。
(2)websocket的链接一旦建立,服务器和客户端都可以互推信息
特点:(1)WebSocket可以在浏览器里使用(2)支持双向通信(3)使用很简单
1. WebSocket协议如何建立连接
1)客户端:申请协议升级:首先,客户端发起协议升级请求。采用的是标准的HTTP报文格式,且只支持get方法。
2)服务端:响应协议升级
服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来
3)Sec-WebSocket-Accept的计算
优点
与HTTP协议相比,WebSocket的优点是:支持双向通信,更灵活,更高效,可扩展性更好。
(1)支持双向通信,实时性更强。
(2)更好的二进制支持。
(3)较少的控制开销。连接创建后,ws(WebService 浏览器)客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。而HTTP协议每次通信都需要携带完整的头部。
(4)支持扩展。ws协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议。(比如支持自定义压缩算法等)
23 .CSMA/CD协议(载波监听多点接入/碰撞检测协议)
即带冲突检测的载波监听多路访问技术
碰撞检测:计算机边发送数据边检测信道上的信号电压大小
载波监听:用电子技术检测总线上有没有其他计算机发送数据信号
网络适配器的作用
网络适配器里面装有处理器和存储器;适配器和局域网之间的通信是通过电缆
或双绞线以串行的传输方式进行的,但是适配器和计算机之间的通信则是通过计算
主板上的IO总线以并行传输的;适配器的一个重要功能就是进行数据串行传输和数
据并行传输的转换。操作系统中安装有网络适配器的设备驱动程序来管理网络适配器。适配器接收和
发送帧时不使用计算机的CPU,只有当正确收到帧时,才中断通知计算机并交付协
议栈中的网络层。
(1) 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入网卡的缓存中,但在发送之前,必须先检测信道。
(2) 检测信道:不停地检测信道,一直等待信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小时间间隔),就发送这个帧。
(3) 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
1) 发送成功:在争用期内一直未检测到碰撞,这个帧发送成功,回到(1)
2) 发送失败:在争用期内检测到碰撞,就会立即停止发送数据,并发送一个48比特的阻塞信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回到步骤(2),继续检测信道。若重传16次仍不能成功,则停止 重传向上报错。
试述二进制指数退避算法规则。
在CSMA/CD协议中,一旦检测到冲突,为降低再冲突的概率,需要等待一个随机时间,然后再使用CSMA方法试图传输。为了保证这种退避维持稳定,采用了二进制指数退避算法的技术,其算法过程如下:
1.将冲突发生后的时间划分为长度为2t的时隙
2. 发生第一次冲突后,各个站点等待0或1个时隙在开始重传
3. 发生第二次冲突后,各个站点随机地选择等待0,1,2或3个时隙在开始重传
4.第i次冲突后,在0至2的i次方减一间随机地选择一个等待的时隙数,在开始重传
5.10次冲突后,选择等待的时隙数固定在0至1023(2的10次方减一)间
6.16次冲突后,发送失败,报告上层。
即带冲突检测的载波监听多路访问技术
24. PPP点对点协议
是一个运行与点对点链路之上的链路层协议,即一条直接连接两个节点的链路,链路的每一端有一个节点
25. 移动端300毫秒延迟,怎么解决的?
原因:移动端浏览器会有一些默认的行为,比如双击缩放、双击滚动。这些行为,尤其是双击缩放,主要是为桌面网站在移动端的浏览体验设计的。而在用户对页面进行操作的时候,移动端浏览器会优先判断用户是否要触发默认的行为。所以会造成移动端300ms延迟。
解决方案:(1)禁用缩放
当HTML文档头部包含如下meta标签时,表明这个页面是不可缩放的,那双击缩放的功能就没有意义了,此时浏览器可以禁用默认的双击缩放行为并且去掉300ms的点击延迟。
(2)更改默认的视口宽度
通过以下标签来设置视口宽度为设备宽度
(3)CSS touch-action
跟300ms点击延迟相关的,是touch-action这个CSS属性。这个属性指定了相应元素上能够触发的用户代理(也就是浏览器)的默认行为。如果将该属性值设置为touch-action:none,那么表示在该元素上的操作不会触发用户代理的任何默认行为,就无需进行300ms的延迟判断。
26. 304状态码是怎么样,怎么产生的?------>Etag值怎么产生的?
304状态码产生:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:客户端已经执行了GET,但文件未变化。
Etag值:是实体标签(Entity Tag)的缩写。ETag是一个可以与Web资源关联的记号(token)。ETag一般不以明文形式相应给客户端。在资源的各个生命周期中,它都具有不同的值,用于标识出资源的状态。当资源发生变更时,如果其头信息中一个或者多个发生变化,或者消息实体发生变化,那么ETag也随之发生变化。 ETag详解 - CSDN博客
ETag值的变更说明资源状态已经被修改。往往可以通过时间戳就可以便宜的得到ETag头信息。在服务端中如果发回给消费者的相应从一开始起就由ETag控制,那么可以确保更细粒度的ETag升级完全由服务来进行控制。服务计算ETag值,并在相应客户端请求时将它返回给客户端。
27. 微信扫一扫二维码网页上登陆前后端过程?
微信扫码登录核心过程应该是这样的:浏览器获得一个唯一的、临时的UUID(通用唯一识别码,由一组32位数的16进制数字所构成),通过长连接等待客户端扫描带有此UUID的二维码后,从长连接中获得客户端上报给服务器的帐号信息进行展示。并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护,类似的应用还有扫码支付、扫码加公众号等功能 。
28. 一个页面, 一个提交按钮, 如何防止重复提交?(表单防止重复提交的四种方式 - Herrt灬凌夜 - 博客园)
(1)在数据库添加唯一字段
在数据库建表的时候在ID字段添加主键约束,账号,名称的信息添加唯一性约束。确保数据库只可以添加一条数据。此方法最有效的防止了数据重复提交
(2)用js为添加禁用
当用户提交表单之后,可以使用js将提交按钮隐藏(disable属性),防止用户多次点击按钮提交数据。
(3)使用Post/Redirect/Get
Post/Redirect/Get简称PRG,是一种可以防止表单数据重复提交的一种Web设计模式,像用户刷新提交响应页面等比较典型的重复提交表单数据的问题可以使用PRG模式来避免。例如:当用户提交成功之后,执行客户端重定向,跳转到提交成功页面。
(4)使用session设置令牌
产生页面时,服务器为每次产生的Form(表单)分配唯一的随机标识号,并且在form的一个隐藏字段中设置这个标识号,同时在当前用户的Session中保存这个标识号。当提交表单时,服务器比较hidden和session中的标识号是否相同,相同则继续,处理完后清空Session,否则服务器忽略请求。
29. TCP和http的区别
HTTP与TCP的联区别,主要是围绕着两句话铺开的。
第一句话:TCP/IP 协议是传输层协议,主要解决数据在网络中如何传输的问题。
第二句话:HTTP 协议是应用层协议,主要解决如何包装数据,是基于TCP连接的。
我们在传输数据的时候,可以只使用传输层(如TCP协议),但是那样就无法识别数据内容,如果想使得传输的数据有意义,则必须使用应用层协议(如HTTP协议)。就比如说,WEB使用HTTP作为应用层协议,以便封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发送到网络上去。
30. Socket连接是否与服务器断开
(1)通过心跳包:所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息,如果服务端几分钟内没有收到客户端信息则视客户端断开
(2) 发送之前用MSG_PEEK的方式recv。 看recv的返回值是否0字节,如果是0字节,说明对方发送了fin包,已关闭了连接。allan给出TTC中验证连接是否有效的函数:
非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式进行判断,其中MSG_PEEK保证了仅仅进行状态判断,而不影响数据接收
网友评论