OSI模型
简述TCP/IP协议:即传输控制协议和网际协议,前者用于应用程序间的通信,保证数据的完整性和可靠性,后者则计算机与计算机之间的通信,用于将数据从一端传送至另一端
物理层(比特流)
利用传输介质为数据链路层提供物理连接,实现比特流的透明传输
0/1高低电平(电信号) ———-比特流
数据链路层(数据帧)
数据链路层协议
Ethernet(以太网)、IEEE802.3、PPP和HDLC、IEEE802.11
Ethernet协议常用于有线传输;实现链路层的数据传输和地址封装
IEEE802.11协议常用于无线传输
数据帧格式
以太网II数据帧大小:64~1518
DMAC:目的MAC地址。字段长度6个字节,标识帧的接收者;
SMAC:源MAC地址。字段长度6个字节,标识帧的发送者;
Type:类型字段,字段长度2个字节,用于标识上层协议(0x0800 (IPv4) 0x0806 (ARP) 0x86DD (IPv6))。
Data:数据字段是网络层数据,最小长度必须为46字节;
FCS:循环冗余校验字段,提供了一种错误检测机制,字段长度为4个字节;
**MAC地址长度为6个字节,用十六进制表示**;需将MAC地址转换为二进制;
-
单播地址
硬件MAC地址中的第一个高位字节的第八个比特为0 IP地址为A、B、C类地址
-
组播地址
组播MAC地址:硬件地址中的第一个高位字节的第八个比特为1 IP地址为D类地址
-
广播地址
广播MAC地址:全F或者全为1 IP地址为全255
网络层(数据包)
去本机的ARP缓存寻找
ARP协议
ARP协议在发送广播时,目的的mac地址为ff ff ff ff ff ff;在不知道目标的mac时,默认全为0.
数据包结构:
Hardware type:Ethernet 发送方硬件类型
Protocol type:IP 发送方协议类型
Hardware size:6字节 发送方硬件地址长度
Protocol type:4字节 发送方协议地址长度
Opcode:request(0x00001 请求/广播) replay(0x00002 响应/单播)
备注:当目的主机回复 ARP 应答后,发送方会将该记录缓存到本地 ARP 表中,该表项存在老化时间1200s.
免费ARP
1
2
3
| 注:用于检测IP地址是否冲突
例如:sou 1.1.1.1 smac 2-2-2-2 des 1.1.1.1 dmac 0-0-0-0(request请求无replay回应则证明IP唯一不冲突)
|
IP包
一部分
1
2
3
4
5
6
7
8
| Version (IP所用的版本)
HeaderLength(整个IP报头长度)
Type of Service (优先级标志和服务类型标志位,被路由器用来进行流量的优先排序)
DS Field (包的优先级0~7;用于Qos)
Total Length (整个包总长度,IP头与数据包中数据的长度0~65535字节)
|
分片重组(二部分)
1
2
3
4
5
6
| Identufucation(来识别一个数据包或者被分片数据包的次序)
Flags标记位(MF:0代表最后一个包、1代表后面还有更多分片;DF:1代表不允许分片、0代表允许分片)
备注:如果允许分片,则HeaderLength每个IP头的总长度会被设置为每个分片的片段长度
Fragment Offset(片偏移值,对不同先后到达的分片包进行排序重组;上一个携带的数据大小)
|
(分片缓存区域),分片缓存区满了会溢出,造成系统性能降低
三部分
1
2
3
4
5
| TTL (初始值由发送设置255、128、64;每经过一个路由器值减1,减到为0会丢弃数据包)
Protocol (上层协议 1代表ICMP 2代表IGMP 6代表TCP 7代表UDP)
Header Checksum (检查校验完整性,用来确认IP头的内容没有被损坏或篡改)
|
ICMP包
1
2
3
4
5
6
7
8
9
10
11
| 测试设备之间的通信
从TCP/IP协议栈中调用icmp出来,生产相应icmp报告报文,发给源端
数据包结构:
Type ICMP消息基于RFC规范的类型和分类
Code ICMP消息基于RFC规范的子类型
Checksum 用来保证ICMP头和数据在抵达目的地时的完整性
Variable 依赖域类型和代码域的部分
注:ICMP数据包的结构取决于它由Type和Code域中的值所定义的用途
|
返回状态及值:
Type |
Code |
内容 |
解释 |
3 |
0 |
网络不可达 |
没有路由到大目的地 |
3 |
1 |
主机不可达 |
已知但不可达的主机 |
3 |
2 |
协议不可达 |
未知的协议 |
3 |
3 |
端口不可达 |
未知的端口 |
3 |
4 |
要分片但设置了不分片 |
路由器MTU限制需分片但无法分片 |
3 |
5 |
源路由失败 |
中间跳不可达 |
3 |
13 |
管理禁止通信 |
被过滤器策略禁止的通信 |
3 |
14 |
违反主机优先级 |
src/dst/port不允许的优先级 |
3 |
15 |
优先级终止生效 |
在最小ToS之下 |
5 |
1 |
主机重定向数据报 |
指示一个可选的路由器/主机 |
11 |
0 |
在传输期间时间超时 |
跳数限制/TTL超时 |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
Tracert工具
1
2
| 路由追踪 修改TTL值,UDP端口
调用ICPM协议
|
1
2
3
4
| 备注:
以太网的网络上所能传输的最大数据包大小是1500字节(不包括14字节的以太网头本省)
可以手工设定,MTU是基于接口设定
如果数据包大于MTU,则将被分片
|
传输层(数据段)
TCP
为数据提供可靠的端到端传输(排序,流量控制,重传)
一部分(应用上层协议)
1
2
3
| source port 用来传输数据包的源端口(随机端口;发送方的哪个应用程序)
Destination 数据包将要被发送到的端口(接收方的哪个应用程序)
|
二部分(保证可靠性)
1
2
3
4
| Sequence Number 序列号(随机序列号)用来保证数据流中的部分没有缺失
Acknowledge Number 确认号(随机序列号+1)意味这收到了发送方之前的所有数据
详情请看小结
|
三部分
1
2
3
| Header length TCP头部长度
Resv. 保留字段(未使用)
|
1
2
3
4
5
6
7
8
9
| TCP flags标志位:
SYN:携带这个标志为1的包表示正在发起连接请求。因为连接是双向的,双方都要发送一个SYN
FIN:携带这个标志为1的包表示正在请求终止连接。因为连接的双向的,彻底关闭需要双方都发送一个FIN
RST:用于重置一个混乱的连接,或者拒绝一个无效的请求(连接被异常中止或拒绝连接请求)
RST(一次交互) 检测到故障异常(1)【紧急故障非法断开】(表明端口关闭)
例如:连接会经常突然断掉,可能由于一个潜在的攻击者正在进行端口扫描,或者仅仅是主机配置错误
SYN (三次交互;还没有上层应用数据需要发送) 同步位 这个包是不是用来建立连接(1);建立完成变为(0)
FIN(四次交互;如果数据没发完,需单独发送一次FIN) 请求断开连接(1);已经断开连接或者现在不需要断开连接(0)**【正常断开】**
|
1
2
3
4
5
6
7
| Window 流量控制(自己的接收窗口大小/处理数据的大小)
控制发送端的发送速度,使其按照接收端的数据处理速度来发送数据,避免接收端处理不过来,产生网络拥塞或丢包
用零窗口通知停止数据流传输
发送窗口决定了一口气能发多少字节,而MSS决定了这些字节分多少个包发完
举例:
发送窗口为16000字节情况下,MSS是1000字节,那就需要发送16000/1000=16个包
|
1
2
3
4
| Checksum 校验TCP头部和Date的完整性;用来保证TCP头和数据的内容抵达目的地的完整性
Urgent Pointer 如果设置了URG位,将告诉CPU从数据包的哪里开始读取数据
Options 各种可选的域,可以在TCP数据包中进行指定
|
更详细的三次握手
-
- 服务器 listen 时,计算了全/半连接队列的长度,还申请了相关内存并初始化。
-
- 客户端 connect 时,把本地 socket 状态设置成了 TCP_SYN_SENT,选则一个可用的端口,发出 SYN 握手请求并启动重传定时器。
-
- 服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请 request_sock 添加到半连接队列中,同时启动定时器。
-
- 客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。
-
- 服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED。
-
- accept 从已经建立好的全连接队列中取出一个返回给用户进程。
另外要注意的是,如果握手过程中发生丢包(网络问题,或者是连接队列溢出),内核会等待定时器到期后重试,重试时间间隔在 3.10 版本里分别是 1s 2s 4s …。在一些老版本里,比如 2.6 里,第一次重试时间是 3 秒。最大重试次数分别由 tcp_syn_retries 和 tcp_synack_retries 控制。
如果你的线上接口正常都是几十毫秒内返回,但偶尔出现了 1 s、或者 3 s 等这种偶发的响应耗时变长的问题,那么你就要去定位一下看看是不是出现了握手包的超时重传了。
小结:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| 传输层而只是对传输行为进行控制(包括网络数据帧的排序、重传、流量控制等)
真正负责设备间传输的是网络层和数据链路层
MSS+TCP头+IP头 = MTU值
发包的大小由MTU较小的一方决定
下一个数据帧序号(Seq)的大小 = 上一个数据段的Seq number + Len数据段长度(不包括TCP头)
Acknow ledgement number 确认号:
例如A发送数据帧(携带Seq:x+ Len:y)给B B回给A的数据帧中Ack值就为x+y
接收方的ACK==发送方下一个包的序列号值
注: 意味着B收到了x+y之前的所有字节
注:事实上,握手Seq号并不是从0开始,因为Wireshark启用了Relative Sequence
关闭功能Edit->Preferences->protocols->TCP
文字理解:
Three:
①
客户端:Syn=1(我能和你建立连接嘛吗),Seq(我的初始序列号是x),Ack=x(客户端序列号)+1(如果你答应)
服务端:Ack=x(客户端序列号)+1(收到啦),Syn=1(我也想和你建立连接),Seq(我的初始序列号是y),Ack=y(服务端序列号)+1(如果你答应连接)
客户端:Ack=y(服务端序列号)+1(收到啦)
②
当连接请求是旧的无效包时:
客户端:Syn Seq=x
服务段:Syn Seq=y,Ack=x+1
客户端:Reject
Four:
客户端:Fin=1(我希望断开连接) + Ack
服务端:Ack(OK,断开吧)
服务端:Fin=1(我这边的连接也想断开) + Ack
客户端:Ack(OK,断开吧)
TCP半开连接攻击(占用内存,无法释放)
1~1023用于标准端口
1024~65535用于临时端口
常用应用层端口号:
telnet 23
ftp 21、20
ssh 22
rip 520
smtp(邮件) 25
http 80
TCP重传
RTO(重传超时) RTT(往返时间)
RTO:每当使用TCP传输一个数据包时,就启动重传计时器,当收到这个数据包的ACK时,计时器停止
RTT:从发送数据包到接收ACK确认之间的时间被称为往返时间
总结:将若干个这样的往返时间平均下来,可算出最终的RTO值
举例:当数据包被发送出去,但接收方没有发送TCP ACK数据包时,传输主机就假设原来的数据包丢失了,并重传它。重传之后,RTO值翻倍;如果在到达极值之前一直,没有收到ACK数据包,那将发生另一次重传,;这个过程会持续收到一个ACK数据包,或者发送方达到配置的最大重传次数为止
注:Windows主机默认最多重传5次,Linux为15次,都是可配置的
举例2:假设有一个数据包在传输中丢失,为正确的重组数据,接收方必须要得到丢失的数据包,因此它重新发送一个包含丢失数据包序号的ACK数据包,以使发送方重传数据包
当传输主机收到3个来自接收方的重复ACK时,它假设这个数据包确实在传输中丢失了,并立刻发送一个快速重传。一旦触发快速重传,其他所有正在传输的数据包都要靠边,直到把快速重传数据包发送出去为止
|
C / S TCP几种连接状态
客户端状态(Client)
TCP请求连接状态(SYN) |
描述 |
SYN_SENT(Syn=1,Seq=x) |
向服务端发送一个SYN包(客户端已发送SYN报文) |
ESTABLISHED(Seq=x+1,ACK=1,ack=y+1) |
连接建立成功,双方可以发送数据 |
TCP断开连接状态(FIN) |
描述 |
FIN_WAIT_1(FIN=1,Seq=x) |
当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文 |
FIN_WAIT_2(ACK=1,Seq=x+1,ack=z+1) |
第一次收到服务端的确认(ACK)断开请求,则进入到FIN_WAIT_2状态 |
TIME-WAIT |
等待足够的时间以确保远程TCP接收到连接中断请求的确认 |
CLOSED |
没有任何连接状态 |
服务端状态(Server)
TCP请求连接状态(SYN) |
描述 |
LISTEN(bind端口号) |
服务端的某个SOCKET处于监听状态,可以接受连接了。 |
SYN_RECEIVED(Syn=1,Seq=y,ACK=1,ack=x+1) |
服务端第收到客户端的SYN后,服务器会把此种状态下请求连接放在“半连接队列” |
ESTABLISHED |
连接建立成功,双方可以发送数据 |
TCP断开连接状态(FIN) |
描述 |
CLOSE-WAIT(ACK=1,Seq=y,ack=x+1)(FIN=1,ACK=1,Seq=z,ack=x+1) |
收到从客户端发来的连接中断(FIN)请求 |
LAST-ACK |
等待客户端的确认(ACK)中断请求 |
CLOSED |
没有任何连接状态 |
**UDP **
1
2
3
4
5
6
7
| 用户数据报协议
提供高速的传输
面向无连接,不可靠
发送不需要建立连接,直接发送;只能映射上层应用协议
|
1
2
3
4
5
6
7
8
| 数据包结构:
source port 用来传输数据包的源端口(随机端口;发送方的哪个应用程序)
Destination 数据包将要被发送到的端口(接收方的哪个应用程序)
Lenth 数据包字节长度
Checksum 用来确保UDP头和数据到达时的完整性
|
MSS与MTU
MTU最大传输单元
1
| 应用与OSI模型数据链路层,MTU限制了数据链路层上可以传输的数据包大小,也因此限制了网络层的数据包大小
|
MSS最大报文长度
1
| MSS针对的是OSI模型传输层的TCP协议,因此MSS会受到MTU的限制,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据
|
图解
1
2
3
4
5
6
7
| |- TCPMSS -|
|---- IP MTU ----|
|---- 以太网MTU ----|
以太网头部 IP头部 TCP头部 Payl数据 FCS校验字段
14bytes 20bytes 20bytes 1460bytes 4bytes
|
MTU=IP头部+TCP头部+Payload
MSS=MTU-IP头部-TCP头部=Payload
应用层(原始数据)
DHCP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| DHCP客户端对请求响应速度要求很高
内置保证可靠性方法
BOOTP协议(以前) ---- > DHCP协议
数据包结构:
OpCode 用来指出这个数据包是DHCP请求(1)还是DHCP回复(2)
Hadware Type 硬件地址类型(10MB以太网、IEEE802、ATM等)
Hardware Length 硬件地址长度
Hops 中继代理用来帮助寻找DHCP服务器
ID 用来匹配请求和响应的一个随机数
Seconds Elasped 客户端第一次向DHCP服务器发出地址请求后的时间
Flags DHCP客户端能够接受的流量类型(单播、广播、以及其它)
Client IP Address 客户端的IP地址(由“你的”IP地址域派生成)
Your IP Address DHCP服务器提供的IP地址(最终成为客户端IP地址域的值)
Server IP Address DHCP服务器的IP(DHCP服务器与默认网关共享一个IP地址)
Gateway IP Address 网络默认网关IP地址
Server Host Name 服务器主机名(可选)
Boot File DHCP所使用的启动文件(可选)
Options 用来对DHCP数据包进行扩展,以提供更多功能
租期过程:
客户端:Discover发现(广播包)
服务端:Offer 提供(DHCP服务器首先尝试由ARP提供的客户端硬件地址与之通信,如失败,就会直接讲Offer广播出去,以进行通信)
客户端:Request 请求
服务端:Acknowledgement 确认
|
华为DHCP配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Dhcp enable 开启DHCP服务
Ip poo; 名称1 创建名为1的DHCP地址池
Network 192.168.1.0 mask 255.255.255.0 配置DHCP可分配网段
Gateway-list 192.168.1.1 配置DHCP默认网关
Dns-list 8.8.8.8 配置首选dns
Excluded-ip-add 192.168.1.250 192.168.1.254 不分配的ip地址
Lease day 3 配置ip地址租约时间
**RARP** Static-bind ip-add 192.168.1.10 mac-add 00-11-22 为固定mac分配固定ip
|
DHCP接口开启
1
2
3
4
5
| Int g0/0/0 进入接口
Dhcp select global 在路由器接口开启全局(回应DHCP请求offer)
【R1】display ip pool name pc used 查看已经使用的IP地址
|
DNS
本机优先查询顺序:
1
| 会优先访问**浏览器DNS缓存(大约在1~30分钟)**,再是**系统(OS)缓存**,然后是**Hosts文件**,最后是通过**运营商提供的DNS服务器**进行递归查询
|
注意:DNS通常是的UDP,但当响应超过一定大小时就使用TCP
注:例如将域名www.榆.top的名字和例如192.168.1.1的IP地址捆绑起来,当我们想要和一台设备通信却不知道它的IP地址时,我们就可以使用它的DNS名字来进行访问
数据包结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| DNS ID Number 用来对应DNS查询和DNS响应
Query/Response,QR 用来指明这个数据包是DNS查询还是响应
OpCode 用来定义消息中请求的类型
Authoritative Answer,AA 如果响应数据包设定了这个值,则说明这个响应是由域内权威域名服务器发出的
Truncation.TC 用来指明这个响应由于太长,无法装入数据包而被截断
Recursion Desired,RD 当请求中设定了这个值,则说明DNS客户端在目标域名服务器不含有所请求信息的情况下,要求进行递归查询
Recursion Available,RA 当响应中设定了这个值,说明域名服务器支持递归查询
Z(保留) 在RFC1035的规定中被全设为0,但有时会被用来作为RCode域的扩展
Response Code 在DNS响应中用来指明错误
Question Count 在问题区段中的条目数
Answer Count 在回答区段中的条目数
Name Server Count 在权威区段的域名资源记录数
Additional Records Count 在额外信息区段中其他资源记录数
Question section 大小可变,包含有被发送到DNS服务器的一条或多条的信息查询的部分
Answer section 大小可变,含有用来回答查询的一条或多条资源记录
Authority section 大小可变,包含指向权威域名服务器的资源记录,用以继续解析过程
Additional Information section 包含资源记录且大小可变的区段,这些资源记录用来存储完全没有必要回答的查询相关的额外信息
|
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| Domain Name System(Query查询/Response) 表明这个数据包是DNS查询还是响应
Transaction ID:
flags标志位:0x0100 standard query 表明这是一个典型请求/标准查询
Response:0(查询),1(响应)
Recursion Desired:1(要求进行递归查询)
Queries 查询
name:域名
Type:资源记录类型
Class:IN(0x0001)
Answers 应答
name:域名
Type:
Class:IN(0x0001)
Time to live:10 minutes
Data length:4
Addr:域名对应的资源记录(例如A记录,这里就是域名映射的IP地址)
|
记录类型值
值 |
类型 |
描述 |
1 |
A |
IPv4主机地址 |
2 |
NS |
权威域名服务器 |
5 |
CNAME |
域名的别名 |
6 |
SOA |
起始授权机构 |
12 |
PTR |
反向指针查找 |
15 |
MX |
邮件交换 |
16 |
TXT |
文本交换 |
28 |
AAAA |
IPv6主机地址 |
251 |
IXFR |
增量区域传递 |
252 |
AXFR |
完整区域传送 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 这里对SOA、NS作通俗理解
SOA记录表明了谁是这个区域的所有者(标准区域),就是说对这个区域可以读写修改。常见DNS服务器只能创建一个标准区域,然后可以创建很多个辅助区域;而辅助区域只能通过标准区域复制来完成,不能在辅助区域中进行修改。而创建标准区域的DNS就会有SOA技能,那么SOA记录中的主机地址一定是这个标准区域的服务器IP地址
SOA记录最主要的作用就是告诉辅助域名服务器什么时候该更新数据了
通过序列号字段实现
每次主域名服务器更新自己的记录时,序列号的值就会增大,然后辅助域名服务器就知道该使用区域传送从主域名服务器那里更新自己的记录了
注:如果是两台集成了DNS的DC,所以两台DC都要SOA记录指向自己
NS记录是用来告诉查找者,你想查找的这个域的服务器的位置
举例:你想查找www.csdn.com
此时ISP的DNS服务器上有一条NS记录
“csdn.com IN NS ns1.csdn.com”
翻译:csdn.com这个域的解析工作是由ns1.csdn.com负责的
这时你就知道去ns1.csdn.com服务器上继续去查询www.csdn.com
然后这个域名的服务器会向你返回www.csdn.com
|
HTTP
客户端请求字段:
1
2
3
4
5
6
7
8
9
10
11
| Request Method 请求类型
Request URI 请求下载的目录文件
Request Version 请求的版本(例如:HTTP/1.1)
HOST www.baidu.com 指定服务器的域名
Accept:*/* 客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式(这里客户端声明自己可以接受任何格式的数据)。
Accept-Encoding: gzip, deflate 客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。
使用的用户代理(浏览器)
浏览器接受的语言(Accept Languags)
Cookie信息(位于捕获的底部)
注: 为保证兼容性,服务器可以利用这些信息决定返回给客户端的数据
当客户端请求传输完毕之后,服务端会回一个ACK数据包作为响应
|
服务端响应字段:
1
2
3
4
5
6
7
8
| HTTP/1.0 200 OK 协议版本及状态码
status Code 响应代码(状态码) 发往客户端
Content-Type:text/plain;charset=utf-8 告诉客户端数据是什么格式及编码格式
{
Content-Encoding: gzip 说明数据的压缩方法
Content-Encoding: compress
Content-Encoding: deflate
} 由于发送的数据可以是任何格式,因此可以把数据压缩后再发送
|
请求类型及响应代码:
请求类型 |
描述 |
Get |
从Web服务器请求下载内容 |
Post |
向Web服务器上传数据以供处理 |
|
|
响应代码 |
描述 |
200 |
成功请求 |
302 |
代表找到(重定向) |
304 |
资源未被修改 |
404 |
访问页面不存在 |
500 |
服务端错误,检查servlet |
401 |
未授权 |
402 |
需要付费 |
403 |
禁止 |
405 |
方法被不允许 |
406 |
无法接受 |
408 |
请求超时 |
413 |
实体过大 |
507 |
存储不足 |
这里对部分状态吗做一个详解:
1
2
3
4
5
| 304 表示资源未被修改。当不是第一次访问一个静态页面或者图片的时候,就会得到这么一个提示。这是服务端提示浏览器,这个资源没有发生改变,你直接使用上一次下载的就行了,不需要重新下载。 这样就节约了带宽,并且浏览器的加载速度也更快。
404表示访问的页面不存在,表示一个浏览器的错误,就是服务端没提供这个服务,但是你却去访问。一般检查路径优先
302表示客户端跳转,临时性的跳转;比如访问页面,http://127.0.0.1/a.html,提交数据会访问a.html,添加到数据库中,则会跳转到b.html,一般会用到代码
|
1
2
3
4
5
6
7
8
9
| 服务端响应客户端GET或者其它请求的ACK。一旦发送这个数据包,服务端就应该立即发送数据
例如:
SYN
SYN/ACK
ACK
请求类型
ACK
发送数据
注:响应代码是服务端返回给客户端
|
常见的被动式指纹值
协议头部 |
域 |
默认值 |
操作系统 |
IP |
初始TTL |
64 |
Nmap、BSD、MacOS 10、Linux |
|
|
128 |
Windows、Novell |
|
|
255 |
Cisco IOs、Solaris |
IP |
不分片标志 |
Set |
Nmap、Cisco IOs |
|
|
Not Set |
Nmap |
TCP |
窗口大小 |
1024-4096 |
Nmap |
|
|
65535 |
Mac OS 10 |
|
|
2920-5840 |
Linux |
|
|
Variable |
Windows |
TCP |
MSS大小 |
0 |
Nmap |
|
|
1440 |
Windows、Novell |
|
|
1460 |
BSD、Mac OS 10、Linux、Solaris |
TCP |
SackOK |
set |
Linux、Windows |
|
|
Not set |
Nmap、Mac OS 10 |
一些工具
注:可以使用p0f工具(Kali Linux)
ARP缓存中毒(MITM中间人攻击):重定向两台主机的流量,试图在传输过程中对流量进行拦截或修改。多种形式:会话劫持、DNS欺骗,SSL劫持
- CyberEYE 用于产生RAT程序和管理”肉鸡”
- Cain & Abel 局域网缓存中毒(ARP攻击)
- Scapy 强大的Python库,允许使用基于命令脚本的方法创建、修改数据包
- 抓包工具:tcpdump Windump
- Netdude 不介绍,自己谷歌(提供了图形化界面GUI)
- Colasoft Packet Builder 想要与Netdude类似的GUI
- GUI:图形化界面 CLI:命令行
- CloudShark 在线分享数据包捕获记录
- pcapr 流量捕获例子
- NetworkMiner
- Tcpreplay
- ngrep
- libpcap
- hping
- Domain Dossier 查询域名或IP地址注册信息
- Perl/Python 自动化
设备和管理接口
设置 console 登录密码(华为):
1
2
3
| user-interface console 0 进入系统接口视图模式
authentication-mode password 设置认证模式
set authentication password simple huawei 设置认证密码
|