面试题经常问到:
1.首先根据URL访问DNS服务器找到需要方位的IP, 因为IP才是真正第对应一台真正的机器;
2.get 到IP的时候,这个时就会三次握手, 正常的走一次TCP/IP请求;
注意:
源IP:本地机器IP
源端口号:随机的一个端口号,一般是大于1000,
目标IP: 刚刚获得的IP
端口号: 80
3.组织HTTP请求参数{应用层} ,TCP组装参数[传输层]--->要做的事情就是封装HTTP参数,然后将端口号 封装进去;
4 网络层 IP层将 源IP 目标IP封装进去,并封装TCP参数;
5 链路层封装MAC信息, 物理层发送消息出去,电信号转光信号传输了;
6 服务端接收到数据之后,一层层解析,根据端口号找到相应的服务, 然后把请求路径,请求参数解析出来,
7 程序根据请求处理这些逻辑, 组织返回参数,和之前逻辑一样,封装参数 发送出去,
8 浏览器拿到结果,进行解析渲染到页面上,完成了一次请求,
9 这个时候,还需要四次挥手释放掉这个连接. 真正的一次请求完成了.
面试点2: HTTP请求与HTTPS之间的区别
答案: HTTP请求传输是明文传输, 请求数据和返回数据是可以被解析看到的.
HTTPS是HTTP+ SSL[SSL=socket secrurity layer 安全套接字层],是密文传输的,保证了消息的安全性
一次HTTPS请求的过程;
首先 HTTPS请求从服务端获得加密的公钥;
第二步: 客户端会随机生层一个对称的密钥, 通过公钥加密,然后发送服务端,
第三步: 服务端就会用私钥对穿过去的加密随机数,进行解密; 这样随机数就能解出来了,
第四步:客户端用对称秘钥进行加密,传输,这样服务端就可以用对称秘钥进行解密;
整体流程发送了三次请求:
-->获取公钥,
-->第二步发送随机数[作为对称加密秘钥]
-->发送对称加密数据;
面试题3: TCP粘包现象的处理方案
什么是粘包? --->TCP在发送数据的时候,小数据就会合并几个一起发送. 通过nagle 算法合并小包一起发送;
但是接收方的时候, 接收方接收到数据不会立马消费,而是将将数据放入缓存区,[这就是问题出现的七点]
应用程序在读取时间的时候,是不知道要读取多大的数据的,举个例子: 读 1024*1024数据的时候, 可能一个数据包被切成了两半;
造成数据不能正常消费.
针对这种现象的解决方案是:
1.发送定长的数据,这样每段数据都会被正常消费;
2.在数据包之间添加特殊的分割字符,这样能读取数据的时候,按照分隔符读取.
3. 禁用nagle算法.
面试题4: 四次挥手状态转移;
1.客户端: FIN_WAIT1 --->FIN_WAIT2 --->TIME_WAIT---CLOSE
2 服务端:close_wait--->last-ack;
为什么要四次挥手, 为什么是2MSL [max segment live] 最大块存活时间
答案: 四次挥手是两次半双工的关闭.
2MSL的时间? 第一:保证消息能正常关闭,即使消息没有正常到达服务端,也能保证下次接受到关闭消息,
2 保证消息能在网络中安全的消失.
面试题5:TCP是怎么保证安全传输的?
答案: 1 面向连接. 2.超时重传,3 传输包校验, 4 流量控制,5 拥塞控制.
以上就能保证数据能够正常送达.
面试题6: 流量控制过程是怎样的?
答:流量控制是通过滑动窗口机制实现的, 发送方的窗口大小是根据接收方的接收能力来控制的.
发送方维护了一个三个指针 P1 窗口后沿 P2:尚未发送的第一个字节. P3:是指窗口的前沿,表示可用窗口的大小.
<--发送并已经确认数据--->P1<---已发送但未确认的数据----->P2<[待发送的起始数据]--------可用窗口大小------>P3<---未发送的数据,--->
面试7: 拥塞控制的整个流程?
拥塞控制有两个算法 慢启动算法和拥塞避免算法,
其中一个阈值 大于阈值用拥塞避免算法,小于阈值用慢启动算法.
划重点了:
慢启动是指数形式增长的,
拥塞避免算法是 +1形式增长的.
注意:当出现网络拥塞的时候,此时阈值就是当前窗口的一半, 然后重新走:---->慢启动--->新阈值<--拥塞避免算法;
----->快速重传和快速恢复[思路是这样的}
当发送端收到三个重复确认的请求时候, 就立即重新发送待确认的数据.
原因是这样的::接收端收到一个失序的数据包,中间丢包了,之后的就不在确认了,然后发送待确认的丢包序号,发送端就会重新发送.
举例说明: 发送端: M1--M2--M3--M4--M5 接收端接收到: M1--M2-(--)-M4--M5 丢了M3 这个时候返回的确认信号就是M3M3M3
三次同样的信号之后,就会重新发送M3;