下面是我在学习HTML和CSS的时候整理的一些笔记,有兴趣的可以看下:
进阶阶段
进阶阶段,开始攻 JS,对于刚接触 JS 的初学者,确实比学习 HTML 和 CSS 有难度,但是只要肯下功夫,这部分对于你来说,也不是什么大问题。
JS 内容涉及到的知识点较多,看到网上有很多人建议你从头到尾抱着那本《JavaScript高级程序设计》学,我是不建议的,毕竟刚接触 JS 谁能看得下去,当时我也不能,也没那样做。
我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。
然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。
1、JavaScript 和 ES6
在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。
2、前端框架
前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
以 Vue 为例,我整理了如下的面试题。
文章目录
-
- 一、前言
- 二、条件过滤
- 三、字段含义
- 四、TCP连接
- 五、色彩规则
- 六、分析方法
-
- 6.1 Packet size limited during capture
- 6.2 TCP Previous segment not captured
- 6.3 TCP ACKed unseen segment
- 6.4 TCP Out-of-Order
- 6.5 TCP Dup ACK
- 6.6 TCP Fast Retransmission
- 6.7 TCP Retransmission
- 6.8 TCP zerowindow
- 6.9 TCP window Full
- 6.10 TCP segment of a reassembled PDU
- 6.11 Continuation to
- 6.12 Time-to-live exceeded (Fragment reassembly time exceeded)
- 6.1 Packet size limited during capture
- 七、问题追踪
- 八、拓展阅读
- 一、前言
一、前言
网络是移动应用生命线,网络层面的各种问题会给移动应用带来许多迷惑的行为和症状。通过抓取网络包数据,可以针对性地分析由网络层面问题引起的各种症状,包括连接中断、TLS 握手失败、DNS 解析失败等错误。
Charles
和 Fiddler
可以帮助捕获和分析 HTTP
层面的问题,如果问题发生在 TCP/IP
层面,则需要 TCP
报文的捕获和分析工具。Wireshark
(支持 Mac/Windows 平台)、Network Monitor
(Windows 平台)和 TCPDUMP
是常用的三种网络层抓包工具。比较常见的网络层问题包括 SSL 握手失败和 TCP 链接中断、重发等。
本节介绍 Wireshark
基本使用方法。
wireshark
是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark
的人必须了解网络协议,否则就看不懂wireshark
抓包信息。
注意⚠️:出于安全考虑,wireshark
只能查看封包,而不能修改封包的内容或者发送封包。 wireshark
能获取HTTP
,也能获取HTTPS
,但是不能解密HTTPS
。所以wireshark
看不懂HTTPS
中的内容。如果是处理HTTP
,HTTPS
还是用 Fiddler,其他协议比如TCP
、UDP
就用wireshark
。
二、条件过滤
- 过滤源ip、目的ip
ip.dst==192.168.101.8 #查找目的地址为192.168.101.8的包
ip.src==1.1.1.1 #查找源地址为1.1.1.1 的包
- 端口过滤
tcp.port==80 #把源端口和目的端口为80的都过滤出来
tcp.dstport==80 #只过滤目的端口为80的
tcp.srcport==80 #只过滤源端口为80的包
- 协议过滤
arp #ARP协议
icmp || icmpv6 #ICMP协议
smb || nbss || nbns || nbipx || ipxsap || netbios #Server Message Block类协议
http || tcp.port == 80 || http2 #HTTP协议,这是很简陋的识别方法
tcp.flags & 0x02 || tcp.flags.fin == 1 #TCP连接的起始和关闭报文
hsrp || eigrp || ospf || bgp || cdp || vrrp || carp || gvrp || igmp || ismp #路由类协议
eth.fcs\_bad==1 || ip.checksum\_bad==1 || tcp.checksum\_bad==1 || udp.checksum\_bad==1 || sctp.checksum\_bad==1 || mstp.checksum\_bad==1 || cdp.checksum\_bad==1 || edp.checksum\_bad==1 || wlan.fcs\_bad==1 #条件中的各类协议的checksum异常
! ip.dst == 224.0.0.0/4 && ip.ttl < 5 && !pim) || (ip.dst == 224.0.0.0/24 && ip.dst != 224.0.0.251 && ip.ttl != 1 && !(vrrp || carp) #TTL异常报文
tcp.flags.reset eq 1 #TCP流被RESET报文
icmp.type eq 3 || icmp.type eq 4 || icmp.type eq 5 || icmp.type eq 11 || icmpv6.type eq 1 || icmpv6.type eq 2 || icmpv6.type eq 3 || icmpv6.type eq 4 #ICMP协议错误,协议的type字段值错误报文
- http模式过滤
http.request.method=="GET" #过滤get请求的包
http.request.method=="POST" #过滤post请求的包
- 两个过滤条件连接符and的使用
ip.src==192.168.101.8 and http #过滤ip为192.168.101.8并且为http协议
- 过滤
http
握手的空报文
使用wireshark打开pcap包,通过条件过滤数据长度为0的包,命令如下:
tcp.len > 0
- 过滤重复数据包
使用cmd命令窗口,进入wireshark安装目录,找到editcap.exe程序。执行editcap.exe -d命令,指定源文件(d:\input.pcap)和目标文件(d:\output.pcap),命令如下:
C:\Program Files\Wireshark>editcap.exe -d d:\input.pcap d:\output.pcap
- 过滤TCP重传数据包
使用wireshark打开pcap包,通过条件过滤tcp.analysis.retransmission的包,命令如下:
http && !(tcp.analysis.retransmission)
- 过滤TCP解析错误数据包
使用wireshark打开pcap包,通过条件过滤TCP重传,乱序,丢包,重复响应的包,命令如下:
tcp.analysis.flags && !tcp.analysis.window_update
三、字段含义
在TCP层,字段有以下⼏个标识:SYN
、FIN
、ACK
、PSH
、RST
、URG
。
它们的含义是:
SYN
表⽰建⽴连接;FIN
表⽰关闭连接;ACK
表⽰响应;PSH
表⽰有数据传输;RST
表⽰连接重置。URG:Urget
pointer is valid (紧急指针字段值有效)
其中,ACK
是可能与SYN
,FIN
等同时使⽤的,⽐如SYN
和ACK
可能同时为1,它表⽰的就是建⽴连接之后的响应,如果只是单个的⼀个SYN
,它表⽰的只是建⽴连接。TCP的⼏次握⼿就是通过这样的ACK
表现出来的。但SYN与FIN是不会同时为1的,因为前者表⽰的是建⽴连接,⽽后者表⽰的是断开连接。
RST
⼀般是在FIN
之后才会出现为1的情况,表⽰的是连接重置。⼀般地,当出现FIN
包或RST
包时,我们便认为客户端与服务器端断开了连接;⽽当出现SYN
和SYN+ACK
包时,我们认为客户端与服务器建⽴了⼀个连接。PSH
为1的情况,⼀般只出现在DATA内容不为0的包中,也就是说PSH
为1表⽰的是有真正的TCP数据包内容被传递。
wireshark抓包过滤条件:
(ip.src == 127.0.0.1) && (tcp.srcport == 27015 || tcp.dstport == 27015) && (tcp.flags.push == 1)
四、TCP连接
三次握手Three-way Handshake
一个虚拟连接的建立是通过三次握手来实现。
- (B) --> [
SYN
] --> (A)
假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN
(Synchronize) 标记的包,告诉A请求建立连接.。
注意⚠️: 一个 SYN
包就是仅SYN
标记设为1的TCP包(参见TCP包头Resources)。认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。
2. (B) <-- [SYN/ACK
] <–(A)
接着,A收到后会发一个对SYN包的确认包(SYN/ACK
)回去,表示对第一个SYN
包的确认,并继续握手操作。
注意⚠️: SYN/ACK
包是仅SYN 和 ACK 标记为1的包。
3. (B) --> [ACK] --> (A)
B收到SYN/ACK
包,B发一个确认包(ACK
),通知A连接已建立。至此,三次握手完成,一个TCP连接完成。
注意⚠️: ACK包就是仅ACK 标记设为1的TCP包。需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。
这就是为何连接跟踪很重要的原因了。没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接。一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意)。而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包。
4.1 三次握手示例
通过TCP三次握手:SYN-SYN ACK-ACK,建立连接
以抓取443为例(加密,端口不一定为443):
先:DNS请求
DNS请求:
DNS response:
客户端发起TCP三次握手:
第一次:SYN=1,ACK=0,端口61020–443
第二次:SYN=1,ACK=0+1,端口443-61020,确认序号=序列号+1
第三次:ACK=1,端口61020–443
Client发送hello包:
Random
:随机生成数,用于生成最终密钥Session ID
:会话标识符Cipher Suites
:加密套件,Compression Merhods
:压缩方法
Server hello:
服务器也生成了一个随机数发送给客户端,双方同时拥有两个随机数
服务器返回证书,客户端收到后根据证书链辨别真伪,服务器中有公钥,用于加密后面生成的Prenaster secret(会话密钥)
安全连接建立,发送数据:Application Data
TLS传输过程:
①-④:握手阶段
⑤:握手后双方使用协商好的密钥进行通讯
②中有多个类型,是因为它是一个多握手信息,一次性发送多个握手协议包
SNI:TLS的扩展,用来解决一个服务器拥有多个域名的情况
TLS握手信息中并不携带客户端要访问的目标地址,若一台服务器用多个虚拟主机,且域名不同,使用了不一样的证书,TLS使用添加host的方法识别访问那台虚拟主机,在握手第一阶段ClientHello的报文中添加SNI中包含 Server NAME,即Host内容。
五、色彩规则
黑色:报文错误(TCP解析错误、重传、乱序、丢包、重复响应)
TCP dup ack
:重复应答TCP Retransmission
:TCP重传,TCP有超时重传机制TCP Otu-of-Order
:乱序,网络拥塞导致包到达时间不同,时延长,导致包丢失TCP Previous segment not captured
:前一段未捕获,丢失TCP Dup ACK
:TCP重复应答,#前表示丢失序号,后表示丢失次数TCP Retransmission
:TCP重传TCP ACKed unseen segment
:报文没抓全,此报文是ACK报文- TCP ZeroWindow与TCP Window Full:
TCP ZeroWindow
:告诉对方,我的接收窗口的大小,即出现时告诉对方不要在发送数据TCP Window Full
:当待发送数据为0,出现Full,表示我不能再发送数据了HSRP State Change
:HSRP(热备份协议),表示状态非active和standbySpanning Tree Topology Change
:生成树协议状态为0x80,拓扑发生变化OSPF State Chang
:OSPF的msg类型不是helloICMP errors
:ICMP协议错误,协议type字段值错误
红色:各类异常
TCP RST
:TCP流被RESET,出现原因:1、端口未打开2、请求超时3、提前关闭连接4、在一个已关闭的socket上收数据。断开连接,远端服务器尝试打开链接但无结果时,也会初心RST信号,这是防火墙阻隔连接的情况,每个SYN都返回一个RST。SCTP ABORT
:串流控制协议的chunk_type为ABORTTTL low or unexpected
:TTL异常Checksum Errors
:条件中的各类checksum异常,在PC上抓包时网卡的一些设置经常会使Wireskark显示此错误
结束
一次完整的面试流程就是这样啦,小编综合了腾讯的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析,分享给小伙伴们,有没有需要的小伙伴们都去领取!
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】