一、在浏览器中输入url地址到显示主页的过程
大部分人的回答:
1、DNS域名解析;[域名->IP地址]
2、TCP连接;[TCP3次握手]
3、发送HTTP请求;[HTTP请求]
4、服务器处理请求并返回HTTP报文;[HTTP响应]
5、浏览器解析响应内容,进行渲染,呈现给用户;
6、连接结束;[四次挥手]
如果你是面试官,听到这样的回答你会怎么想?觉得面前这个面试者没啥亮点吧!!所以我们还是尽可能的详细拆分每一个步骤
DNS域名解析过程
1、浏览器搜索自己 的DNS缓存
2、若没有,则搜索操作系统中DNS缓存和HOSTS文件;
3、若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向根域名服务器、顶级域名服务器、权限域名服务器发起查询请求,最终返回IP地址给本地域名服务器;
4、本地域名服务器将得到IP地址返回给操作系统,同时自己也将IP地址缓存起来
5、操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
6、浏览器得到域名对应的IP;
DNS缓存
分为:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。
DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议;
二、TCP与UDP
常问问题
- 为什么TCP要三次握手【可靠性】
- TCP三次握手流程
- TCP建立时为啥要传回SYN【为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接受】
- TCP四次挥手
- TCP对应的协议和UDP对应的协议
- TCP和UDP区别
- 拥塞控制
- 滑动窗口
- 流量控制
TCP
定义:传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议;
设计目标:能够动态的适应互联网络的特性,还要具备面对各种故障时的健壮性;
主要功能:
TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送端到接收端实体的包的按序接受。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK),如果发送端实体在合理的往返时延内未收到确认,那么对应的数据丢失将会被重传;
-
在数据正确性和合法性上,TCP用一个校验和函数来检验数据是否有误,在发送和接受时都要计算校验,同时可以使用md5认证对数据进行加密;
-
在保证可靠性上,采用超时重传和捎带确认机制;
-
在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传;TCP采用可变滑动窗口来实现流量控制
流量控制:
定义:对发送方发送速率的控制,称为流量控制;发送方的发送端口不可以大于接受方发回的窗口大小;如何控制?
接受方在每次收到数据包时,可以在发送确认报文的时候,告诉接受方自己的缓存区还剩余多少是空闲的;缓存区的剩余大小称为接受窗口大小,用win来表示;
当发送方收到之后,便会调整自己的发送效率,也就是调整发送窗口的大小;当发送方收到接受窗口的大小为0时,发送方会停止发送数据,防止丢包情况出现;那什么时候在继续发送数据呢?
如果一直为0,发送非零窗口大小的报文,但报文丢失,那么发送方的发送窗口就会一直死锁;
解决办法:
当发送方收到接受窗口win=0时,发送方停止发送报文,并且同时开启一个定时器,每隔一段时间就去询问接受方,是否继续传送数据,如果可以,接受方会告诉发送方此时接受窗口的大小;如果接受窗口还是0,则发送方再次刷新启动定时器;【接受窗口的大小是根据算法动态调整的】滑动窗口:
定义:用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组 。由于发送方不必每发一个分组就停下来等待确认,所以该协议加速数据的传输,提高网络吞吐量。 -
在拥塞控制上,采用TCP拥塞控制算法(AIMD算法)【TCP拥塞控制是TCP避免网络拥塞的算法】,包括四个方面;
1:慢启动:每当建议一个TCP连接或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口(cwnd,单位字节)的大小初始化为一个报文段,即:cwnd=1,此后,每收到一个报文段的确认(ACK),cwnd值加1,即拥塞窗口按指数增加。不要一开始就发送大量的数据,先探测一下网络的拥塞程度;
发送方此时可以连续发送两个数据报文段,接受方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文段后,将cwnd的 值变为4……………………以此类推,当cwnd值超过慢启动阈值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段;
2:拥塞避免:在慢启动阶段,当cwnd值超过慢启动阈值后,慢启动过程结束,TCP链接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。
选择:
cwnd<ssthresh,使用慢开始算法;
cwnd>ssthresh,使用拥塞避免算法
cwnd=ssthresh,任选其一;3:快速重传:快速重传对超时重传的改进。
II 当接受方收到一个失序 的 报文段后立即发出重复确认,而不等到自己发送数据时捎带确认;
III 当发送方收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此like重传丢失的报文段,而不必等到重传定时器超时。以此减少不必要的等待时间。
快速重传做的事情:将ssthresh设置为cwnd的一半;把cwnd在设置为ssthresh的值;重新进入拥塞避免阶段;
4:快速恢复:对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。
TCP的拥塞控制主要原理依赖于一个拥塞窗口来控制;TCP还有一个对端通告的接收窗口用于流量控制;
TCP拥塞控制窗口变化的原则是AIMD,加法增大,乘法减小;一旦出现丢包,立即减半退避;
主要特点:
- 基于流的方式;
- 面向链接;
- 可靠的通信方式
- 在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;
- 通信连接维护是面向通信的两个端点的,不考虑中间网段和节点。
为了满足TCP协议的特点,TCP协议做了如下的规定:
1:数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;
2:到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
3:超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;
4:滑动窗口:TCP连接每一方的接受缓冲空间大小都固定,接收端只允许另一端发送接受段缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;
5:失序处理:作为IP数据报来传输TCP分片达到时间可能失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
6:重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接受端必须丢弃重复的数据;
7:数据校验:TCP将保持他的首部和数据的检验,这是一个端到端的检验,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发;
首部格式:
源端口(Source Port)、目标端口(Destination Port)、确认序列号(Acknowledgment Number)、数据偏移(Data Offset)、windows窗口大小;
SYN:SYN报文,在建立TCP连接的时候使用;
ACK:在确认TCP连接的时候使用;
FIN :表示没有数据需要发送了,在关闭TCP连接的时候使用;
TCP三次握手流程
1、客户端发送SYN报文给服务器端,客户端进入SYN_send状态;
2、服务端收到SYN报文,回应一个SYN+ACK的报文,进入SYN_RECV状态;
3、客户端收到服务器端的SYN报文,回应一个ACK报文,进入Established(确立)状态;
TCP四次挥手过程
1、客户端发送FIN包告诉服务器,表示自己没有要发送的数据了;
2、服务器收到FIN报文后发送一个应答包ACK,告诉客户端我知道了,但是我还有数据要发;
3、服务器发送FIN报文给客户端,告诉客户端我也没有数据要发送了;
4、客户端收到FIN报文后发送ACK应答包给服务器,服务器接受到应答包后进入close状态;
UDP
定义:用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务;
TCP和UDP协议对比
TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报 服务;
TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查和修改,无须等待对方回答,所以会出现分组丢失、重复、乱序;
UDP具有较好的实时性,工作效率比TCP协议高;UDP段结构比TCP段结构简单,因此网络开销也小;
TCP和UDP对应的协议
TCP:
1、FTP: 文件传输协议,端口号:21;
2、Telnet:远程登录端口,端口号:23;
3、SMTP:简单邮件传输协议,端口号:25;
4、POP3:接受邮件,端口号:110;
5、HTTP:超文本传输协议,端口号:80;
UDP:
1、DNS:域名解析,将域名转换为IP地址,端口号:53;
2、SNMP:网络管理协议,用来管理网络设备,端口号:161;
3、TFTP:文件传输协议,端口号:69;
三、OSI七层模型
应用层:网络服务与最终用户的一个接口;协议有 :HTTP、FTP、TFTP、FMTP、DNS
表示层:数据的小时、安全、压缩;
会话层:建立、管理、终止会话;
传输层:定义传输数据的协议端口号,以及流控和差错校验;协议:TCP、UDP
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择;协议:IP;
数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能
物理层:建立、维护、断开物理连接。
四、HTTP协议
HTTP协议
定义:超文本传输协议,一个简单的请求-响应 协议;
特点:
HTTP允许传输 任意类型的数据。传输的类型由Content-Type加以标记;
无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系;
支持客户端/服务器模式;
报文格式:
1、请求:由请求行、请求头、空行、请求体组成;
请求行:请求方法(GET/POST/DELETE/HEAD/PTIONS/PUT),URL,HTTP版本,
请求头:格式“属性名:属性值”,服务端根据请求头获取客户端信息,cookie,host,connection,accept-language
请求体:用户请求的数据;
状态行:协议版本、状态码、状态描述;
响应头:响应字段:connection、content-type、content-length、set-cookie、expires;
响应体:服务器返回给客户端的内容;
HTTP状态码:
HTTPS和HTTP的区别
1、HTTP是超文本传输协议,信息是明文传输;HTTPS是具有安全性的ssl加密传输协议;
2、HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443;
3、HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上,SSL运行在TCP协议之上;
五、Cookie与Session的区别
- 作用范围不同,Cookie保存在客户端,Session保存在服务器端;
- 有效期不同,Cookie可设置为长时间保持,比如我们经常使用的默认登录功能,Session一般失效时间较短,客户端关闭或者Session超时都会失效;
- 隐私策略不同,Cookie存储在客户端,容易被窃取;Session存储在服务端。安全性相对于Cookie要好一些;
- 存储大小不同,单个Cookie保存的数据不能超过4K;对于Session来说存储没有上限,但出于对服务器的性能考虑,Session内不要存放过多的数据,并且需要设置Session删除机制;
六、对称加密和非对称加密
对称加密:通信双方使用相同的秘钥进行加密。特点是加密速度快,缺点是秘钥泄露会导致密文数据被破解。常见的对称加密有AES和DES算法;
非对称加密:公钥和私钥。公钥是公开 的,任何人都可以获得,而私钥是私人保管的。公钥负责加密,私钥负责解密;
优点:安全性更高,但是计算量相比对称加密大很多,加密和解密都很慢。常见的非对称加密算法有RSA和DSA;