java面试直通车之网络技术

网络基础知识讲解:
第1层 (物理层):机械、电子、定时接口通信信道上的原始比特流传输
第2层(数据链路层):物理寻址、同时将原始比特流转变为逻辑传输线路
第3层(网络层):通知子网的运行、如逻辑编址、分组传输、路由选择
第4层(传输层):接收上一层的数据,在必要的时候把数据进行分割,并将这些数据交给网络层,且保证这些数据段有效到达对端
第5层(会话层):不同机器上的用户之间建立及管理会话
第6层(表示层):信息的语法语义以及它们的关联,如加密解密、转换翻译
第7层(应用层):

TCP的三次握手:
URG:紧急指针标志
ACK:确认序号标志
PSH:push标志
PRT:重置连接标志
SYN:同步序号
FIN:finish标志

"握手"是为了建立连接

第一次握手:建立连接时,客户端发送SYN包(syn = j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j + 1)到服务器,同时自己也发送一个SYN包(syn = k),即SYN+ACk包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+SCK包,想服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

为什么需要三次握手才能建立起连接?
答:为了初始化Sequence Nuber 的初始值.
首次握手的隐患–SYN超时
问题起因分析:

  • Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
  • Server不断重试直至超时,Linux默认等待63秒才断开连接(重新发送五次,每次间隔翻倍,最后再等待32秒 1+2+4+8+1+32=63)

建立连接后,Client出现故障怎么办?
答:保活机制:
向对方发送报货探测报文,对方未收到超过次数后响应中断.

TCP的四次挥手:
"挥手"是为了终止连接

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
第二次挥手:SERVER收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态
第三次挥手:Server发送一个FIN,用来关闭Server到Client到数据传送,Server进入LAST_ACK状态;
第四次挥手:Client到手FIN后,Client进入TIME_WALT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Serve,进入CLOSED状态没完成四次挥手

为什么会有TIME_WAIT状态?
答:确保有足够的时间让对方收到ACK包;避免新旧连接混淆

为什么需要四次握手才能断开连接?
答:因为全双工,发送方和接收方都需要FIN报文和ACK报文

服务器出现大量CLOSE_WAIT状态的原因?
答:对方关闭socket连接,我方忙于读或写,没有及时关闭连接

TCP和UDP的区别:
UDP的特点:

  • 面向非连接
  • 不维护连接状态,支持同时向多个客户端传输相同的消息
  • 数据包报头只有8个字节,额外开销较小
  • 吞吐量只受限于数据生成速率、传输速率以及机器性能
  • 尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
  • 面向报文,不对应用程序提交的报文信息进行拆分或者合并

结论:
面向连接VS面向无连接、可靠性、有序性、速度、量级

TCP的滑动窗口:
RTT和RTO
RTT:发送一个数据包到收到对应的ACK,所花费的时间
RTO:重传时间间隔

滑动窗口的作用:

  • 保证TCP的可靠性
  • 保证TCP的流控特性

滑动窗口:原滑动窗口为已发送但是未从接收方回传确认的数据和未发送但是可发送的数据,当已发送的全部接收后,窗口滑动

HTTP相关:
超文本传输协议HTTP主要特点:

  • 支持客户/服务器模式
  • 简单快速(客户机只需要传送请求方法和路径)
  • 灵活(允许传输任意类型的数据对象)
  • 无连接(限制每个连接只有一个请求)

请求/响应的步骤:

  • 客户端连接到Web服务器
  • 发送HTTP请求
  • 服务器接收请求并返回HTTP响应
  • 释放连接TCP连接
  • 客户端浏览器解析HTML内容

在浏览器地址栏键入URL,按下回车之后经历的流程?
答:DNS解析(解析域名对应的IP地址)、TCP连接(三次连接)、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器解析渲染页面、连接结束

HTTP状态码(自己查)

GRT和POST的区别:
从三个层面出发:
HTTP报文层面:GET将请求信息放在URL,POST放在报文体中
数据库层面:GET不修改数据库,POST是直接发送到数据库的,不安全
其他层面:GET可以被网页缓存、被储存、而POST不行

Cookie和Session的区别:
Cookie简介:

  • 是由服务器发给客户端的特殊信息(登入信息等),以文本的形式存放在客户端
  • 客户端再次请求的时候,会把Cookie回发(放到HTTP报头)
  • 服务器接收到后,会解析Cookie生成与客户端相对应的内容

Session简介:
服务器端的机制,在服务器上保存的信息
解析客户端请求并操作session id, 按需保存状态信息
Session的实现方式:

  • 使用Cookie来实现
  • 使用URL回写来实现

区别:

  • Cookie数据存放在客户的浏览器上,Session数据在服务器上
  • Session相对于Cookie更安全
  • 若考虑减轻服务器负担,应当使用Cookie

HTTP和HTTPS的区别?
一个更安全,一个不够安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值