计算机网络
2020-04-21 10:32:28 0 举报
AI智能生成
计算机网络常用知识及面试中常被问到的题目梳理
作者其他创作
大纲/内容
OSI七层模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP
三次握手
请求步骤
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
SYN Flood攻击
原因:服务端收到SYN,回复SYN-ACK后但未收到应答;server无法收到回执,重试63s之后断开连接
避免恶意将SYN队列占满,增加SYN-Cookie可直接进行连接
如果中途客户端断开:保活机制,可以在一定时间内发送探测报文
避免恶意将SYN队列占满,增加SYN-Cookie可直接进行连接
如果中途客户端断开:保活机制,可以在一定时间内发送探测报文
TCP报文
ACK:确认序列号
SYN:同步序列号,用于建立连接
FIN:用于释放连接
SYN:同步序列号,用于建立连接
FIN:用于释放连接
为什么要进行三次握手
获取seq的序列初始值
四次挥手
请求步骤
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
TIME_WAIT
2MSL :一个MSL,Linux通常为30s
确保有足够的时间让对方收到ACK报
避免新旧连接混淆
避免新旧连接混淆
CLOSE_WAIT
原因:对方关闭连接,服务器没有收到;或者我方忙于读写,没有及时关闭连接
代码问题、配置问题特别是线程池的数量配置,
代码问题、配置问题特别是线程池的数量配置,
统计tcp各状态数量
netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}'
netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}'
为什么要进行四次挥手
每个端均有ACK+FIN包,需要确保两者都进行确认完成后,才能最后终止请求
滑动窗口
用于流量控制和乱序重排
RTT:发送一个数据包到收到一个ACK的时间,
RTO:重传间隔时间
RTO:重传间隔时间
TCP和UDP的区别
连接状态
可靠行
有效性
速度
量级
http
请求结构
Accept:浏览器支持的数据类型
Accept-Charset:gzip, deflate, br 浏览器支持的字符集
Accept-Encodeing:application/json 浏览器支持的压缩格式
Accept-Language:zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7 支持的语言
Host:访问服务器的主机
If-Modifed-Since:缓存数据时间
Refer:防盗链,上一个跳转的页面
User-Agent:浏览器类型,版本信息
Data:访问时间
Accept-Charset:gzip, deflate, br 浏览器支持的字符集
Accept-Encodeing:application/json 浏览器支持的压缩格式
Accept-Language:zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7 支持的语言
Host:访问服务器的主机
If-Modifed-Since:缓存数据时间
Refer:防盗链,上一个跳转的页面
User-Agent:浏览器类型,版本信息
Data:访问时间
响应结构
Content—Type:服务器返回数据类型
Last-Modify:最后修改时间
Refersh:浏览器刷新时间
Transfer-Encoding:chunked 分块形式回送数据
content-disposition: 告知浏览器打开数据方式
Last-Modify:最后修改时间
Refersh:浏览器刷新时间
Transfer-Encoding:chunked 分块形式回送数据
content-disposition: 告知浏览器打开数据方式
请求/响应步骤
客户端连接web服务器
发送HTTP请求
服务端响应请求
释放TCP连接
客户端解析HTML内容
发送HTTP请求
服务端响应请求
释放TCP连接
客户端解析HTML内容
浏览器输入URL请求流程
DNS解析-TCP连接--服务器处理请求并返回HTTP报文--浏览器渲染页面--连接关闭
状态码
GET和POST区别
1、http报文层面:get将请求信息放在URL中,post放在报文体中
2、数据库层面:get符合幂等性和安全性,post不符合
3、get可以被缓存被存储,post则不行
2、数据库层面:get符合幂等性和安全性,post不符合
3、get可以被缓存被存储,post则不行
cookie和session区别
Cookie:
客户端会话技术,数据存储在客户端,键值对,支持过期时间
自动携带,跨域名、跨网站,默认不支持中文
客户端会话技术,数据存储在客户端,键值对,支持过期时间
自动携带,跨域名、跨网站,默认不支持中文
Session:
服务端会话技术,内存中,django会把数据持久化到数据库中,默认过期是14天,base64+混淆串进行加密,依赖cookie
需要cookie带一个字段来验证这个用户需要的是哪个session
服务端会话技术,内存中,django会把数据持久化到数据库中,默认过期是14天,base64+混淆串进行加密,依赖cookie
需要cookie带一个字段来验证这个用户需要的是哪个session
https请求流程
1、浏览器将自己支持的加密算法信息发送给服务器
2、服务器选择一套自己支持的算法,以证书的形式发送给浏览器
3、浏览器验证证书,并结合公钥加密信息发给服务器
4、服务器使用私钥解密信息,验证哈希,加密响应消息回发给浏览器
5、浏览器解密,验真,之后进行加密交互数据
2、服务器选择一套自己支持的算法,以证书的形式发送给浏览器
3、浏览器验证证书,并结合公钥加密信息发给服务器
4、服务器使用私钥解密信息,验证哈希,加密响应消息回发给浏览器
5、浏览器解密,验真,之后进行加密交互数据
http与https区别
https需要CA证书
https密文传输
连接方式不同https端口是443,http为80
https=http+加密+认证+完整性保护,交http安全
https密文传输
连接方式不同https端口是443,http为80
https=http+加密+认证+完整性保护,交http安全
https真的安全吗
浏览器默认为http请求,又被劫持的风险:
解决方案:hsts进行优化
解决方案:hsts进行优化
socket请求
请求结构
http2
多路复用
Stream
流量控制
服务端推送
头部压缩
QUIC
类比于http3协议
避免前序包阻塞问题
零RTT建连
FEC前向纠错
其他
IPV4与IPV6的区别
IPV4地址是32位(43亿),ipv6地址为128位;
表现形式不一样,ipv4为当前常用的IP地址,IPV6
IPV4地址是32位(43亿),ipv6地址为128位;
表现形式不一样,ipv4为当前常用的IP地址,IPV6
0 条评论
下一页