文章目录
- 1、tcp的三报文握手
- 2、四报文握手
- 3、为什么是3次握手而不是2次握手?
- 4、四次挥手
- 5、为什么A在TIME-WAIT状态要等待2MSL?
- 6、OSI、TCP\IP、五层协议及其作用和协议
- 7、TCP与UDP
- 8、各协议介绍
- 9、ARP是地址解析协议,简单语言解释一下工作原理。
- 10、RARP协议
- 11、交换机和路由器,及区别
- 12、网桥的作用
- 13、子网掩码的作用
- 14、一个Http请求的过程
- 15、Http和Https的区别
- 16、HTTP的长连接和短连接?
- 17、Cookie和Session的区别?
- 18、ip地址的分类
- 19、各类别常见状态码:
- 20、对称加密与非对称加密
- 21、DDos攻击
- 22、XSS攻击
- 23、用户访问某网站的全过程
- 24、TCP如何保证数据的可靠性
- 25、TCP 黏包是怎么产生的?
- 26、HTTP1.0与HTTP 1.1的主要区别
- 27、 HTTP1.1与HTTP 2.0的主要区别
- 28、TCP/IP协议
- 29、TCP是如何保证可靠性的?
- 30、HTTP协议
1、tcp的三报文握手
注意:
seq=x:序号,表示本次报文段发送的数据的第一个字节序号为x
ACK=1:表示ack确认号有效,ACK报文不携带数据不消耗序号
ack=x+1:表示 <= x 个字节已经收到,下一次期望收到的第一个字节序号是第x+1个
SYN=1:表示这是一个连接请求或者连接接受报文
步骤:
- 首先一开始客户端和服务端都处于
close状态
; - 客户端A要请求建立连接,A主动打开连接,B是被动打开连接;
- B打开连接后,会创建TCB(传输控制块)用于保存连接信息,然后B处于
listen状态
; - A打开连接也会创建TCB,然后在打算建立连接时,会发送连接请求报文,(
SYN=1,seq=x
的报文),TCP规定,SYN报文段不携带数据,但要消耗一个序号,这时客户端进入SYN-SENT(同步已发送)状态
; - B收到连接请求报文后,如果同意建立连接,会向A发送确认,在确认报文段中将
SYN=1、ACK=1、seq=y、ack=x+1
,同样SYN报文不携带数据,但消耗一个序号,这时服务端B进入SYN-RCVD(同步收到)状态
; - 客户端A收到B发送的确认报文段后,还要再向B给出确认,确认报文段的
ACK=1、ack=y+1、seq=x+1
,这时tcp连接已经建立,客户端A进入ESTAB-LISHED(已建立连接)状态
; - 服务端B收到A的确认报文后也进入
ESTAB-LISHED状态
。
2、四报文握手
3、为什么是3次握手而不是2次握手?
为了防止已失效的连接请求报文突然又发送到服务端B,从而产生错误。
异常情况:
当客户端A第一次发送的请求连接因为网络原因,延迟到达服务端B,这是一个本该失效的请求连接,但是B却误以为这是A发送的请求连接,所以B会回A一个确认报文,如果没有第三次握手,这时B在回A一个确认报文之后,连接就建立了,但是A收到B发送的确认报文并不会理睬,因为A没有请求建立连接,A也不会发送数据,这时B就傻傻的在等A发送数据,可是并不会,建立连接会占用B一定的服务器资源,这就导致B的服务器资源被白白浪费了。
如果采用三报文握手,A在收到B的确认报文后,不会回B确认报文,B收不到确认,就知道A并没有想要建立连接,也就解决了上述异常情况。
4、四次挥手
注意:
FIN=1:表示这是一个连接释放报文,即使不携带数据也会消耗一个序号
MSL:报文在网络中存活的最长时间
步骤:
- 首先客户端A和服务端B都处于已建立连接状态,进行数据的传输
- 如果没有数据传输,这时A的应用进程发出连接释放报文段,并同时发送数据,主动关闭连接,发送的报文
FIN=1、seq=u
,u表示A已发送的数据的最后一个字节序号+1,这时A进入FIN-WAIT-1(终止等待1) 状态
; - B收到A的请求释放连接报文后,回了A一个确认报文,报文首部
(ACK=1、seq=v、ack=u+1)
,B进入CLOSE-WAIT(关闭等待)状态
,此时tcp服务器进程通知其高层应用进程,A->B这个方向的连接已经释放,这时的tcp处于(half-close)半关闭状态
。A收到B的确认报文后A进入FIN-WAIT-2(终止等待2)状态
,等待B发送的请求释放连接报文; - 当B没有事干了,就发送释放连接报文给A,B进入
LAST-ACK(最后确认)状态
,报文头部信息(FIN=1、ACK=1、seq=w、ack=u+1)
,seq=w表示在等待期间,B可能发送了数据给A,所以序号可能会改变。A收到B的请求释放连接报文后,A发送确认报文给B(ACK=1、seq=u+1、ack=w+1)
,A进入TIME-WAIT(时间等待)状态
。 - B收到A的确认报文后进入
CLOSE状态
,A等待2MSL时间后也进入CLOSE状态
,相应的TCB(传输控制块)会被撤销,就结束了本次连接。
5、为什么A在TIME-WAIT状态要等待2MSL?
-
为了确保A最后发送的ACK报文能被B接收到。
最坏的情况是A发送了ACK报文给B,然后过了1MSL报文才到B,然后在B没收到报文前还在超时重传FIN+ACK报文,最后一个FIN+ACK报文发送给A的最大存活时间是1MSL,然后A发送到B的报文的最大存活时间也是1MSl,这两个时间加起来恰好是2MSL。 -
等待2MSL时间,本次连接的所有报文都会从网络上消失,不会出现
已失效的连接请求报文段
。
6、OSI、TCP\IP、五层协议及其作用和协议
OSI:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP\IP:应用层、运输层、网际层、网络接口层
五层协议:应用层、传输层、网络层、数据链路层、物理层
osi模型的作用:定义了网络互联的模型,解决不同体系结构的网络互联问题,推荐所有公司使用这个规范来控制网络,这样大家使用相同的规范,就互联了。
每层的协议:
- 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
- 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
- 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
- 传输层:TCP、UDP、SPX
- 会话层:NFS、SQL、NETBIOS、RPC
- 表示层:JPEG、MPEG、ASII
- 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的作用如下:
- 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和通信手段的差异。
- 数据链路层:将网络层传下来的ip数据包封装成帧,并在相邻的两个节点间无差错的传输以帧为单位的数据;
- 网络层:负责ip数据包从源到宿的传递和网际互连,进行逻辑寻址,实现不同网络之间的路径选择;
- 传输层:向主机进程提供通用的数据传输服务,该层主要有以下两种协议:TCP和UDP
- 会话层:建立、管理和终止应用程序间的会话,建立数据传输的通路;如服务器验证用户登录便是由会话层完成。
- 表示层:主要负责数据格式的转换,如:加密解密、翻译、压缩解压缩等。
- 应用层:为应用程序提供交互服务。应用层的协议有很多,如域名系统DNS。支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。
7、TCP与UDP
TCP(传输控制协议)是一种可靠的、面向连接的、基于字节流的传输层通信协议。
UDP(用户数据报协议)提供了一种无须建立连接,就能发送封装IP数据包进行传输的方法,它是不可靠的,无需建立连接的、基于数据包的传输层通信协议。
区别:
区别 | TCP | UDP |
---|---|---|
连接 | 面向连接 | 无需建立连接 |
可靠性 | 可靠 | 不可靠 |
有序性 | 有序 | 无序 |
速度 | 慢 | 快 |
拥塞控制和流量控制 | 有 | 无 |
首部大小 | 20字节 | 8字节 |
传输单位 | 面向字节流 | 面向报文 |
应用场景 | 1.FTP文件传输 2.HTTP/HTTPS | 1.DNS、SNMP 2.视频,音频等多媒体通信 3.广播通信 |
8、各协议介绍
- ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
- TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
- HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
- DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
- NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,
- DHCP协议:一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
9、ARP是地址解析协议,简单语言解释一下工作原理。
作用:根据ip地址查找物理地址MAC,即完成ip地址到硬件地址的映射
- 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机的IP地址,源主机的MAC地址,目的主机的IP 地址。
- 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
- 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应。
局域网中获取到mac地址,如果ip不是局域网,则获取的是默认网关的mac地址,通常是路由器。
10、RARP协议
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。
11、交换机和路由器,及区别
交换机的作用:连接局域网中各台计算机或其它设备,使这些计算机或设备组成网络,从而实现资源共享的目的。
路由器的作用:连接两个或多个网络或网段的网络设备,对数据进行路由与转发。
区别:
- 交换机工作在OSI的数据链路层;路由器工作在OSI的网络层;
- 交换机根据MAC地址寻址;路由器根据IP地址寻址;
- 交换机的转发速度较快;路由器的转发速度较慢;
12、网桥的作用
网桥是一个局域网和另一个局域网之间建立连接的桥梁。
13、子网掩码的作用
将ip地址划分为网络地址
和主机地址
两部分
14、一个Http请求的过程
比如在浏览器的地址栏输入www.baidu.com,然后回车,这个过程会发生什么?
大致分为以下几个过程:
- URL解析,解析处域名和要访问的资源路径
- 生成Http报文
- DNS查询,1.本地DNS服务器 2.根域名服务器 3.顶级域名服务器 4.权威域名服务器 5.找到域名返回ip
- TCP三次握手
- 应用程序发送数据,交给操作系统协议栈处理(tcp头部、ip头部、mac头部)
- 网卡驱动程序将内核中的数据包信息(01)复制到网卡缓存区,加上起始分界符,然后网卡将数字信息转为电信号通过网线发送出去
- 达到交换机,然后转发给路由器
- 路由器进行寻址和路由,一跳一跳的传递下去,知道目标ip对应的服务器
- 找到对应的接收服务器,一步一步拆开数据包,去除头部信息,拿到请求报文,然后相应数据回去,同上边过程一样。
- 请求应用程序拿到相应数据之后,渲染页面
- 结束,tcp四次挥手
查看链接:https://blog.csdn.net/zz_jesse/article/details/102383628
DNS解析的过程
- 查询浏览器本地缓存是否存在记录,不存在则进入第2步
- 查询主机的hosts文件有没有记录,不存在则进入第3步
- 浏览器调用解析器,进行域名解析,解析器就是一段程序,它能帮助浏览器调用系统的网络功能,相当于DNS的客户端
- 解析器向DNS服务器发送解析请求,DNS服务的地址在计算机的网络设置中存在
- 解析器发送的DNS服务器是本地DNS服务器,它一般由服务提供商管理,比如中国网通,电信等
- 本地DNS服务器收到解析请求后,会查询自身的缓存中是否存在www.baidu.com的ip地址,不存在则进入第7步
- 本地DNS服务器询问根域名服务器关于顶级域名com的ip地址,返回顶级域名ip地址
- 本地DNS服务器询问顶级域名服务器关于权威域名baidu.com的服务器地址,返回权威域名ip地址
- 本地DNS服务器询问权威域名服务器关于域名www.baidu.com的ip地址,返回域名的ip地址
- 本地DNS服务器将ip地址返回给解析器,解析器缓存起来后,解析将ip地址返回给浏览器,浏览器拿着ip地址就可以进行连接建立。
15、Http和Https的区别
15.1、基本概念
HTTP协议以明文方式发送内容,不提供任何数据的加密,如果攻击者截取了浏览器和服务器之间的传输报文,就可以直接读懂其中的信息,因此,Http不适合传输一些敏感信息。
Https可以看做http的安全版,即在Http下加入了SSL层,Https的安全基础就是SSL。
Https协议的作用可以分为两个:一种是建立信息安全通道,来保证数据传输的安全。另一种就是确认网站的真实性。
15.2、Http和Https的主要区别(https=http+ssl安全传输协议+ca身份认证)
(1)Https需要申请证书
(2)Https比Http安全
(3)Http和Https采用完全不同的连接方式,端口也不一样,前者是80,后者是443
(4)Http的连接很简单,是无状态的;Https是有SSL+Http协议构建的可进行加密传输,身份认证的网络协议。
15.3、Https的工作原理
客户端在使用Https方式与web服务器进行通信时,会有以下几个步骤:
(1)客户端使用Https的URL访问web服务器,要求与web服务器建立SSL连接。
(2)web服务器收到请求后,会将网站的证书信息(包含公钥)发送给客户端。
(3)客户端的浏览器与web服务器开始协商SSL连接的安全等级,也就是信息加密的等级
(4)客户端的浏览器根据双方同意的加密等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)web服务器根据自己的私钥解密出会话密钥。
(6)web服务器根据会话密钥加密与客户端之间通信。
1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
16、HTTP的长连接和短连接?
Http的长连接和短连接本质上是tcp的长连接和短连接。本质就是建立的连接是否会被复用。
tcp的短连接,就是客户端和服务端建立连接后,一般只进行一次读写操作,连接就断开了,下次需要通信时再次建立连接;
tcp的长连接,就是客户端和服务端建立连接后,进行读写操作之后,连接不会断开,后续的读写操作会复用这个连接。
在HTTP/1.0中,默认使用的是短连接;从HTTP/1.1起,默认使用长连接,用以保持连接特性,使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive。
实现长连接要客户端和服务端都支持长连接。
17、Cookie和Session的区别?
- Cookie是客户端会话技术,Session是服务端会话技术;
- cookie将数据保存在客户端,保存的数据大小有限,一般一个cookie保存的数据大小不超过4k,一个域名下保存的cookie个数不超过20个;session将数据保存在服务器端,保存的数据大小,数量没有限制,受限于服务器的内存;
- cookie只能保存字符串的数据,而session没有限制;
- cookie不安全,别人可以分析本地存放的cookie,进行cookie欺骗,session存放在服务器,较安全
18、ip地址的分类
19、各类别常见状态码:
2xx (3种)
-
200 OK:表示从客户端发送给服务器的请求被正常处理并返回;
-
204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);
-
206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3xx (5种)
-
301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
-
302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
-
303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
302与303的区别:后者明确表示客户端应当采用GET方式获取资源
-
304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码,请求的资源没有改变,可以使用缓存。
-
307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);
4xx (4种)
-
400 Bad Request:表示客户端请求报文中存在语法错误;
-
401 Unauthorized:未经许可,需要通过HTTP认证,请求未经授权;
-
403 Forbidden:服务器收到请求,但是拒绝该次访问(访问权限出现问题);
-
404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;
-
405 客户端发送的请求的请求方式与服务端的请求方式不同。
5xx (2种)
-
500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
-
503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;
20、对称加密与非对称加密
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
21、DDos攻击
1)DDos 攻击
客户端向服务端发送请求链接数据包
服务端向客户端发送确认数据包
客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认,占用服务器的资源。
2)、DDos 预防 ( 没有彻底根治的办法,除非不使用TCP )
限制同时打开SYN半链接的数目
缩短SYN半链接的Time out 时间
关闭不必要的服务
22、XSS攻击
跨站脚本攻击(Cross Site Scripting)本来的缩写为CSS,为了与层叠样式表(Cascading Style Sheets,CSS)的缩写进行区分,将跨站脚本攻击缩写为XSS。因此XSS是跨站脚本的意思。
XSS跨站脚本攻击(Cross Site Scripting),的本质是攻击者在web页面插入恶意的script代码(这个代码可以是JS脚本、CSS样式或者其他意料之外的代码),当用户浏览该页面之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。
https://www.cnblogs.com/54chensongxia/p/11643787.html
预防措施:
- 前端:过滤
- 后端:转义
23、用户访问某网站的全过程
点击“百度”的页面,其中URL是http://www.baidu.com。
(1)浏览器分析链接指向页面的URL
(2)浏览器向DNS请求解析百度服务器的IP地址
(3)域名系统DNS解析出百度服务器的IP地址
(4)浏览器与服务器建立TCP连接
(5)浏览器发出取文件命令(一般是发送HTTP请求)
(6)百度服务器给出响应,把文件发送给浏览器(服务器通过HTTP响应把页面发送给浏览器)
(7)释放TCP连接
(8)浏览器显示
24、TCP如何保证数据的可靠性
数据包检验、丢弃重复数据、对失序的数据进行重排序、流量控制、超时重传、拥塞控制(慢开始、拥塞避免、快重传、快恢复)
25、TCP 黏包是怎么产生的?
- 发送方产生粘包
采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 Nagle 算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。
- 接收方产生粘包
接收方采用 TCP 协议接收数据时的过程是这样的:数据到接收方,从网络模型的下方传递至传输层,传输层的 TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取(C 语言用 recv、read 等函数);这时会出现一个问题,就是我们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)
- 如何解决粘包问题:
分包机制一般有两个通用的解决方法:
- 特殊字符控制;
- 在包头首都添加数据包的长度。
26、HTTP1.0与HTTP 1.1的主要区别
- 长连接
- 节约带宽
- HOST域
27、 HTTP1.1与HTTP 2.0的主要区别
- 多路复用
- 二进制分帧
- 首部压缩
- 服务器推送
https://my.oschina.net/u/3421984/blog/1799967
https://blog.csdn.net/sss_0916/article/details/100045939
28、TCP/IP协议
TCP/IP是一个协议族,它定义了电子设备如何接入互联网,以及数据如何在他们之间进行传输的标准。最具有代表性的就是TCP和IP协议,所以称为TCP/IP协议。它将网络分为五层:
应用层:为应用进程提供网络服务
传输层:确保数据传输的可靠,差错检测和恢复等
网络层:将数据封装成IP数据包,进行路由选择和转发
链路层:将数据封装成帧,物理寻址,流量控制
物理层:通过物理媒介传输二进制的数据
29、TCP是如何保证可靠性的?
TCP主要提供了校验和,序列号/确认应答,超时重传,滑动窗口,拥塞控制和流量控制等方法实现可靠性传输。
1、号校验和:通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP端,重新发送。
2、确认应答与序列号:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行应答,即发送ack报文,这个报文中有对应的确认序列号,告诉发送方,接收到了哪些数据,下次的数据从哪里发。序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。
3、超时重传:超时重传是指发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。最大超时时间是动态计算的。
4、连接管理(三次握手、四次挥手)
5、流量控制:如果主机A一直向主机B发送数据,不考虑主机B的接收能力,则可能导致主机B的接收缓冲区满了而无法接收数据,从而会导致大量的数据丢包,引发重传机制。而在重传的过程中,若主机B的接收缓冲区情况仍未好转,则会将大量的时间浪费在重传数据上,降低传送数据的效率。所以引入流量控制机制,主机B通过告诉主机A自己接收缓冲区的大小,来使主机A控制发送的数据量。流量控制与TCP协议报文头中的窗口大小有关。
6、拥塞控制:在数据传输过程中,可能由于网络状态的问题,造成网络拥堵,此时引入拥塞控制机制,在保证TCP可靠性的同时,提高性能。
7、滑动窗口:滑动窗口既提高了报文传输的效率,也避免了发送方发送过多的数据而导致接收方无法正常处理的异常。
30、HTTP协议
HTTP是一个超文本传输协议,它是基于TCP的应用层协议,是无状态的,它不会对发送的请求和相应的通信状态进行保存。