1.TCP传输的三次握手四次挥手策略
为了准确无误地把数据送达目标处, TCP协议 采用了三次握手策略。
用 TCP协议 把数据包送出去后, TCP协议 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
握手过程使用了 TCP协议 的标志: SYN 和 ACK 。
三次握手:
发送端首先发送一个带有 SYN 标志的数据包给对方。
接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。
最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
若是在握手过程中某个阶段莫名中断, TCP协议 会再次以相同的顺序发送相同的数据包。
四次挥手:
第一次:主动关闭方发送一个 FIN ,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被关闭方:我已经不会再给你发送数据了。
第二次:被动关闭方接收到 FIN 包之后,发送一个 ACK 给对方,确认序号为序号+1.
第三次:被动关闭方发送一个 FIN ,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发完了,不会再给你发送数据了。
第四次:主动关闭方收到 FIN 后,发送一个 ACK 给被动关闭方,确认序号为收到序号+1。
2.一次完整的http流程步骤
- 域名解析
- 发起TCP的三次握手
- 建立TCP连接后发起
http请求 - 服务器响应
http请求,浏览器得到HTML代码 - 浏览器解析HTML代码,并请求HTML代码中的资源
- 浏览器对页面进行渲染呈现给用户
- 连接结束
3.五层协议
- 应用层(FTP、Telnet、SMTP、RIP、NFS、DNS) 应用层的任务是通过应用进程间的交互来完成特定网络应用。
- 运输层(TCP、UDP) 运输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务
- 网络层(IP、ICMP、ARP、RARP) 网络层负责为分组交换网上的不同主机提供通信服务。
- 数据链路层 数据链路层通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。
- 物理层 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
4.http和 https
http 协议通常承载于 TCP协议 之上,在 http 和 TCP协议 之间添加一个安全协议层(SSL或TSL),这个时候就成了我们常说的 https 。
https协议需要CA申请证书,一般免费证书比较少,所以需要一定费用。http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议http和https使用的是完全不同的连接方式,使用的端口号也不一样,前者是80,后者是443http连接很简单,是无状态的;https协议是由http+SSL协议构建的可进行加密传输、身份认证的网络协议,比较安全。- 谷歌搜索引擎算法中,比起同等
http网站,采用httpS加密的网站在搜索结果中排名会更高
5.TCP与UDP
用户数据协议UDP: 提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
- UDP是无连接的;
- UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态;
- UDP是面向报文的;
- UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
- UDP支持一对一、一对多、多对一和多对多的交互通信;
- UDP的首部开销小,只有8个字节,比
TCP协议的20个字节的首部要短。
6.传输控制协议TCP: 提供面向连接的,可靠的数据传输服务。
- TCP是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
- 面向字节流。TCP中的“流”(stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
7.协议
- ICMP协议: 因特网控制报文协议。它是
TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 - TFTP协议: 是
TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。 - HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
- DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
8.http状态码
- 2开头 (请求成功)表示成功处理了请求的状态代码。
- 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
- 201 (已创建) 请求成功并且服务器创建了新的资源。
- 202 (已接受) 服务器已接受请求,但尚未处理。
- 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
- 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
- 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
- 206 (部分内容) 服务器成功处理了部分 GET 请求。
- 3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
- 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者选择一项操作,或提供操作列表供请求者选择。
- 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应时,会自动将请求者转到新位置。
- 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
- 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
- 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
- 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
- 400 (错误请求) 服务器不理解请求的语法。
- 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
- 403 (禁止) 服务器拒绝请求。
- 404 (未找到) 服务器找不到请求的网页。
- 405 (方法禁用) 禁用请求中指定的方法。
- 406 (不接受) 无法使用请求的内容特性响应请求的网页。
- 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
- 408 (请求超时) 服务器等候请求时发生超时。
- 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
- 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
- 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
- 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
- 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
- 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
- 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
- 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
- 417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
- 5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
- 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
- 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
- 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
- 505 (
http版本不受支持) 服务器不支持请求中所用的http协议版本。
9.get请求传参长度的误区
http协议 未规定 GET 和 POST 的长度限制;
GET 的最大长度显示是因为 浏览器和 web服务器限制了 URL的长度;
不同的浏览器和WEB服务器,限制的最大长度不一样;
要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte;
10.DNS服务器
将网址/域名解析成 IP 地址。 dns是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。 在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法,域名是互联网上的身份标识,是不可重复的唯一标识资源; 某个区域的资源记录通过手动或自动方式更新到单个主名称服务器(称为主 DNS服务器)上,主 DNS 服务器可以是一个或几个区域的权威名称服务器。
11.从url到页面展现,这之中发生了什么?
- 输入url:如
http://www.baidu.com。其中http为协议,www.baidu.com为网络地址,一般网络地址可以为域名或IP地址,此处为域名。使用域名是为了方便记忆,但是为了让计算机理解这个地址还需要把它解析为IP地址。 - 应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。
- 应用层发送
http请求:http请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http/https/ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。 - 传输层TCP传输报文:
TCP协议为传输报文提供可靠的字节流服务,它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。TCP协议通过“三次握手”等方法保证传输的安全可靠: - 网络层
IP协议查询MAC地址:IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。 - 数据到达数据链路层: 在找到对方的MAC地址后,就将数据发送到数据链路层传输。
- 服务器接收数据: 接收端的服务器在链路层接收到数据包,再层层向上直到应用层, 这过程中包括在运输层通过
TCP协议讲分段的数据包重新组成原来的http请求报文。 - 服务器响应请求: 服务接收到客户端发送的
http请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。 - 服务器返回相应文件:请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。
- 解析HTML以构建
DOM树–> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。 DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而形成。- 在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送
http请求重复上述的步骤。在收到CSS文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一+ 过程中可能会触发页面的重绘或重排。