1. TCP/UDP 区别
1.1 概述与总结 ⭐⭐⭐⭐⭐
4层协议 |
概述 |
TCP |
传输控制协议: 基于3次握手四次挥手,可靠连接. |
UDP |
用户数据报协议: 不可靠连接. |
TCP 与 UDP区别 ⭐ ⭐ ⭐ ⭐ ⭐
传输控制协议(TCP) |
数据报协议(UDP) |
面向连接(3次握手4次挥手,建立,断开连接 |
无连接 |
可靠传输 |
不可靠传输 |
流控(检查数据是否丢失,丢失重新发送) |
尽力而为,尽力传递 |
使用TCP应用:WEB浏览器;电子邮件;文件传输程序 |
使用UDP的应用:域名系统(DNS);视频流;IP语音(VoIP) |
1.2 TCP数据包结构
1.3 UDP数据包结构
1.4 UDP演示-了解
连接测试udp端口请使用nc命令. telnet仅仅连接tcp端口.
#2台 linux
都要安装nc命令 .
#1台: 创建 udp 12306端口
[root@Kylin-V10-sp3 ~]# nc -ul 12306
# 另外开个窗口查看12306端口
[root@Kylin-V10-sp3 ~]# ss -lntup | grep 12306
udp UNCONN 0 0 0.0.0.0:12306 0.0.0.0:* users:(("nc",pid=2123,fd=4))
udp UNCONN 0 0 [::]:12306 [::]:* users:(("nc",pid=2123,fd=3))
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]#
#另一台: 连接 udp 12306端口,发消息如hello
[root@ubuntu2204 ~]# nc -u 10.0.0.36 12306
hello
wireshark虚拟机选VMnet8
wireshark 过滤规则udp.port == 12306
2. 常见网络协议
- DNS 域名解析服务/协议: 域名--->ip地址 ⭐ ⭐ ⭐ ⭐ ⭐
- ARP
- ICMP(ping)
- HTTP/HTTPS(第2阶段)
2.1 DNS
- 域名: baidu.com jd.com taobao.com
- DNS 域名解析服务/协议: 域名--->ip地址 ⭐ ⭐ ⭐ ⭐ ⭐
- 公共DNS服务器地址:223.5.5.5 , 114.114.114.114 网卡配置文件里面写的.
- 目标:
- 域名结构
- 给已有的域名配置DNS解析. 如 qq.com--->ip
- DNS解析原理(域名-->ip)
2.1.1 域名结构
域名结构
域名: 网站名字,网址
www.aliyun.com
jd.com
taobao.com
2.1.2 如何配置域名解析
购买域名:
https://wanwang.aliyun.com/newdomain/1yuan?_v_=47edc66742fe36fc0a839ea5700b8cd5
流程 |
说明 |
购买域名 |
xxx.xxx.cn |
云服务器 |
xxx.xxx.xxx.xxx(ip) |
备案(域名-->云服务器) |
如果不备案,dns解析可以使用. http/https访问提示需要备案. 云服务器不在大陆. |
2.1.3 记录类型
2.1.4 网站备案流程
2.1.5 DNS解析详细流程⭐⭐⭐⭐⭐
域名解析流程: 域名--过程?-->ip地址
-
客户端发起查询:当用户在浏览器中输入一个域名(如
www.example.com
)并尝试访问时,浏览器首先会检查本地缓存中是否已存在该域名的IP地址。如果不存在,浏览器会向本地DNS服务器发起查询请求。 -
本地DNS服务器查询:本地DNS服务器收到查询请求后,会首先查看自身缓存中是否存在已有结果。如果缓存中有记录,直接返回给客户端浏览器;如果没有,则代替客户端向根服务器发起请求。
-
全球递归查询:本地DNS服务器向根域名服务器发起请求。如果根域名服务器不能给出最终结果,就会告知本地DNS服务器下一步向哪个顶级域名服务器发起查询。本地DNS服务器再向顶级域名服务器发起请求,顶级服务器不能直接解析出IP地址,就会告知本地DNS服务器下一级权威域名服务器的地址。
-
返回解析结果:当找到能够解析出IP地址的权威服务器后,权威服务器会将IP地址返回给本地DNS服务器,本地DNS服务器再将结果返回给客户端。客户端获得IP地址后,即可与对应的主机建立连接。
-
缓存更新:本地DNS服务器会将查询到的IP地址缓存一段时间,以便后续查询能够更快地得到响应。
此外,DNS解析的过程还涉及到浏览器的缓存检查、操作系统的缓存检查以及hosts文件的解析等步骤,这些步骤在客户端发起查询之前进行,以确保能够快速响应用户的访问请求
2.1.6 DNS解析的命令
通过命令查看DNS解析详细流程
查看代码
#缓存 windows
##系统级别
ipconfig /displaydns #显示DNS缓存 AAAA 类型的记录为ipv6的
C:\Users\xk>ipconfig /displaydns
Windows IP 配置
msedge.b.tlu.dl.delivery.mp.microsoft.com
----------------------------------------
记录名称. . . . . . . : msedge.b.tlu.dl.delivery.mp.microsoft.com
记录类型. . . . . . . : 5
生存时间. . . . . . . : 5
数据长度. . . . . . . : 8
部分. . . . . . . . . : 答案
CNAME 记录 . . . . . : star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com
content-autofill.googleapis.com
----------------------------------------
记录名称. . . . . . . : content-autofill.googleapis.com
记录类型. . . . . . . : 1
生存时间. . . . . . . : 80
数据长度. . . . . . . : 4
部分. . . . . . . . . : 答案
A (主机)记录 . . . . : 142.251.211.234
desktop-lji8p9s.mshome.net
----------------------------------------
没有 AAAA 类型的记录
C:\Users\xk>
ipconfig /flushdns #清空DNS缓存 需要管理员权限
##windows hosts文件
C:\Windows\System32\drivers\etc\hosts
##浏览器也有DNS缓存
#hosts文件
#详细解析过程 ※※※※※ linux命令
dig www.baidu.com #查询百度对应的ip dns解析的命令.
[root@Kylin-V10-sp3 ~]# dig www.baidu.com
; <<>> DiG 9.11.21-9.11.21-18.ky10 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8066
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 468 IN CNAME www.a.shifen.com.
www.a.shifen.com. 52 IN A 110.242.68.3
www.a.shifen.com. 52 IN A 110.242.68.4
;; Query time: 58 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 六 9月 14 11:44:43 CST 2024
;; MSG SIZE rcvd: 101
[root@Kylin-V10-sp3 ~]#
#详细 DNS解析流程
[root@Kylin-V10-sp3 ~]# dig +trace www.baidu.com
; <<>> DiG 9.11.21-9.11.21-18.ky10 <<>> +trace www.baidu.com
;; global options: +cmd
. 87203 IN NS i.root-servers.net.
. 87203 IN NS c.root-servers.net.
. 87203 IN NS g.root-servers.net.
. 87203 IN NS h.root-servers.net.
. 87203 IN NS a.root-servers.net.
. 87203 IN NS f.root-servers.net.
. 87203 IN NS e.root-servers.net.
. 87203 IN NS b.root-servers.net.
. 87203 IN NS l.root-servers.net.
. 87203 IN NS j.root-servers.net.
. 87203 IN NS m.root-servers.net.
. 87203 IN NS k.root-servers.net.
. 87203 IN NS d.root-servers.net.
. 87203 IN RRSIG NS 8 0 518400 20240926200000 20240913190000 20038 . nvKx78V6BA+NJHGDJGUq+kRiunu4tTBf/ImWDzNeEesAitbU3DZ08ZDf otRYpiHRmiPudPdSEEfA5AYyQZPYc47RiOD/bKUrBuGqY3KQBCXgIYXB 1hpAcqrlh06QrHzl8FtDALGfskWY90LZGWls6YCTqIfePpmf0+zab+U5 JhDBG0d+ARFMnwMz235yVsJLasawZxuDHXWSu2fV7KOnzO56zdxHl2my 4iFIY/SD3p31leXLDR0vr71iPp1jVTT5h6j/lHbfMMEqIbXfVUB1CmED fZlpmXZMvATCzvsHRHYpTvUHzUFB155N/mB0nL3HPzTerY2agSESDv+J FIW9GA==
;; Received 525 bytes from 8.8.8.8#53(8.8.8.8) in 59 ms
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 86400 IN DS 19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com. 86400 IN RRSIG DS 8 1 86400 20240926200000 20240913190000 20038 . P9jgAxwKEWLfuMvJxCHyJkeEpCsYjttgcpCf/XqAjksKPQj2qIah+a5r CeKJZ9DcK+gd9u29PXZIxSKEoE6ppKFvT1jQuAxFk1B227fpxd8RqkdG /Z8E6gt7epXUsyl77nx5VAbZQISyta8m4/7jPLubBp5TGNUrhJTaI9sS tdRpkC49Q9aqbp9L0ELZb5QVBC6Uwbyz5HyGn2v7IJSM2vJ0U8nVk05j pltj19hQ/6mcfmnfPOUzbz8FadvVAPE0K0APz9pJiOIAqReywb+lwLdJ 1fC3HzdwLSUTOmh/BA8v6pfpV6ODdAqrBtdaP7an/UGjS0zC1Avj7QNJ OhUVdA==
;; Received 1173 bytes from 198.41.0.4#53(a.root-servers.net) in 261 ms
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q3UDG8CEKKAE7RUKPGCT1DVSSH8LL NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 13 2 86400 20240921002601 20240913231601 59354 com. pSHnE+OIiU8H0lRp5YP2Yvl/ohLSLt6wQxqr6ON6NYv0lLb17kKVsIAS OwXmVwBs5XuFC1Z7X5vt64JsO4bk4A==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN NSEC3 1 1 0 - HPVVP23QUO0FP9R0A04URSICJPESKO9J NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN RRSIG NSEC3 13 2 86400 20240920004807 20240912233807 59354 com. pz6OLKh47ceRE8bl8aMdallpbava43DvTwc1JkTabPrbUnWhhCFGdQR+ YCu2+10cRJglRUeGgG0YmEAckYy2ng==
;; Received 657 bytes from 192.26.92.30#53(c.gtld-servers.net) in 245 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 16 ms
[root@Kylin-V10-sp3 ~]#
2.1.7 DNS故障
- Linux无法上网.
- 通过域名访问: ping域名 dig解析域名 报错. yum安装软件失败
- ping 公网ip可以访问的.
- 此时需要检测与配置下DNS(网卡配置文件中.)
#排查 是否DNS有问题
1. ping 域名
2. ping 公网ip
[root@Kylin-V10-sp3 ~]# ping baidu.com
ping: baidu.com: Name or service not known
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=18.4 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=128 time=20.4 ms
64 bytes from 223.5.5.5: icmp_seq=3 ttl=128 time=18.8 ms
64 bytes from 223.5.5.5: icmp_seq=4 ttl=128 time=19.2 ms
64 bytes from 223.5.5.5: icmp_seq=5 ttl=128 time=18.8 ms
^C
--- 223.5.5.5 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 18.442/19.121/20.364/0.665 ms
[root@Kylin-V10-sp3 ~]# ^C
[root@Kylin-V10-sp3 ~]#
2.1.8 DNS小结
- 理解什么是DNS.
- 理解域名:根域名,顶级域,二级域,三级域.
- 核心掌握DNS解析流程,配合dig +trace 查看.
- DNS解析故障.
2.2 ARP协议
- ARP: 地址解析协议
- DNS协议:域名---->ip
- ARP协议: IP ---> MAC地址
- ARP地址解析协议: ip地址转换为网卡物理地址(MAC地址)
⚠ ARP协议是3层协议,工作在2层.
解析流程简单: 一问(广播)一答(单播)
10.0.0.200---> 10.0.0.2
- 发出arp请求,发送广播找人 谁知道10.0.0.2的mac地址,请告诉10.0.0.200
- 单播:所有局域网的设备都收到广播,只有10.0.0.2这个机器进行响应(回复): 我是10.0.0.2 我的mac地址是xx:xx:xxxxxxxx
- 缓存mac地址.
抓包查看过程
#10.0.0.200(都在这台机器操作)
arp -n #查看当前系统arp缓存表
ping 10.0.0.201
arp -d 10.0.0.201 #删除arp缓存
#10.0.0.201
注意: arp缓存是双刃剑,也会造成病毒危害系统.
预防:记录每个主机的mac地址. ip与mac地址绑定.
解决:抓包查看找出异常mac地址.
2.3 ICMP协议 Internet控制报文协议
ping 使用的就是icmp协议
#内核参数:
临时禁止ping,重启后恢复
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#准许ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#永久生效
echo 'net.ipv4.icmp_echo_ignore_all =1 ' >>/etc/sysctl.conf
sysctl -p #生效
2.4 网络协议小结
协议 |
名字 |
特点 |
DNS |
域名解析系统/服务 |
域名--->ip地址 |
ARP |
地址解析协议 |
IP地址---->mac地址 |
ICMP |
因特网控制报文协议 |
ping背后使用的协议 |
DHCP原理 |
自动分配IP地址 |
可以扩展研究下. |
HTTP/HTTPS |
超文本传输协议/加密 |
第2个阶段 网站服务讲解 |
3. 用户访问www.baidu.com 整个过程 ⭐⭐⭐⭐⭐
适用于打开app,打开网站,打开小程序...
3.1 过程图解
3.2 过程详解
# 大致步骤:
1.DNS解析,xxx.cn解析得到ip
2.tcp3次握手:通过ip+端口,与服务器建立连接
3.用户-->服务器:发出请求(http),请求报文;
4.网站处理用户的请求;
5.服务器-->用户:发出响应(http),响应报文;
6. tcp4次挥手:断开连接
# 细致步骤:
1.DNS解析,xxx.cn解析得到ip
1.1 访问本地dns缓存,hosts文件
1.2 访问本地DNS服务器
1.3 访问根域名解析服务器,得到顶级域
1.4 访问顶级域DNS,得到二级域
1.5 访问二级域DNS,得到三级域名的ip
1.6 返回本地DNS,缓存,再给用户
2.tcp3次握手:通过ip+端口,与服务器建立连接
2.1 客户端-->服务端:发出SYN建立连接请求,seq随机数
2.2 服务端-->客户端:发出ACK确认,SYN建立连接,ack=seq+1 ,seq随机
2.3 客户端-->服务端:发出ACK确认,ack=seq+1,seq
2.4 连接建立
3.用户-->服务器:发出请求(http),请求报文;
4.网站处理用户的请求;
5.服务器-->用户:发出响应(http),响应报文;
6. tcp4次挥手:断开连接
6.1 服务端-->客户端:断开连接请求FIN,ack,seq
6.2 客户端-->服务端:发出ACK确认,ack,seq
6.3 客户端-->服务端:发出FIN断开连接请求,ack,seq
6.4 服务端-->客户端:发出ACK确认,ack,seq
6.5 连接断开
3.3 抓包详解
https://www.processon.com/view/link/62466f935653bb072bd2771d
3.3.1 dns解析
3.3.2 三次握手
3.3.3 http请求
3.3.4 http响应
3.3.5 四次挥手
4. 抓包
4.1 概述
目标:
- 抓出指定协议的数据包.
- 抓出指定端口.
- 抓出指定ip.
抓包工具 |
特点. |
wireshark |
可视化抓包工具. win/mac/linux ⭕ |
fiddler |
代理,所有流量走fiddler,然后出去. |
科来 |
|
tcpdump |
linux自带,yum安装. 抓4层 ⭕ |
burpsuite |
抓包,修改数据包.安全去使用 |
4.2 wireshark过滤器规则
4.2.1 抓出指定协议 ⭐⭐⭐⭐⭐
icmp #ping 数据包
tcp
udp
http
arp
过滤https数据包: tls
icmp协议
dns协议
4.2.2 抓住指定端口⭐⭐⭐⭐⭐
port 端口
tcp/udp
tcp.port
udp.port
tcp.port == 80 #过滤出源端口或目标端口是80的数据包.
如果是udp数据包
udp.port == 53
#src source 源
tcp.srcport == 80 #过滤出源端口80
#dst destitation 目标
tcp.dstport == 80 #过滤目标端口80
#src source 源
udp.srcport == 53
#dst destitation 目标
udp.dstport == 53
4.2.3 抓出指定ip的数据包 ⭐⭐⭐⭐⭐
#过滤源ip或目标ip为百度的数据包
ping baidu.com
ip.addr == 39.156.66.10 #过滤出源ip或目标ip是 10.0.0.200 数据包
#ip.src表示源ip
ip.src == 10.0.0.200 #过滤出源ip10.0.0.200 数据包
#ip.dst表示目标ip
ip.dst == 10.0.0.200 #过滤出目标ip10.0.0.200 数据包
4.2.4 不固定内容的过滤-比较大小
过滤出端口小于等于1024的数据包.
tcp.dstport <= 1024
等于 ==
小于等于 <=
小于 <
大于等于 >=1
大于 >
不等于 !=
4.2.5 与或非 ⭐⭐
#过滤端口号大于等于20 小于等于1024
tcp.port >=20 && tcp.port <=1024
tcp.port >=20 and tcp.port <=1024
#组合 过滤出 端口是80 并且 ip地址是虚拟机ip
or #或者 ||
! #取反
tcp.port == 80 && ip.addr == 10.0.0.200 #并且
tcp.port == 80 || ip.addr == 10.0.0.200 #或者
#过滤出udp协议 53端口数据表
udp && udp.port == 53
测试语句: dig www.baidu.com
#过滤源IP是虚拟机(10.0.0.200) 并且目标端口是80的数据包
测试语句:curl www.baidu.com
ip.addr == 10.0.0.200 && tcp.dstport == 80
4.3 tcpdump 过滤
yum install -y tcpdump
tcpdump linux抓包并保存.通过wireshark查看与分析
过滤条件 |
wireshark |
tcpdump |
抓出指定协议 |
icmp/tcp/http |
icmp/tcp/udp(不支持7层协议) 需要通过指定端口法 |
抓住指定端口 |
tcp.port == 80 |
port 80 |
过滤出源端口 |
tcp.srcport ==80 |
[tcp或udp] src port 80 #tcp或udp |
过滤目标端口 |
tcp.dstport ==80 |
[tcp或udp] dst port 80 |
抓出指定ip的数据包 |
ip.addr ==10.0.0.200 |
host 10.0.0.200 |
过滤出源ip |
ip.src ==10.0.0.200 |
src host 10.0.0.200 |
过滤出目标ip |
ip.dst ==10.0.0.200 |
dst host 10.0.0.200 |
抓包案例
#指定网卡 如果有多块网卡的时候需要指定。
tcpdump -i ens33
#过滤协议
tcpdump icmp
tcpdump -vvv -nnn icmp
#过滤指定端口号 80端口
tcpdump -nnn port 80
tcpdump -nnn src port 80
tcpdump -nnn dst port 80
#抓住指定主机
tcpdump -nnn host 10.0.0.200
#抓取指定ip和端口的数据包
tcpdump -nnn src host 10.0.0.200 and port 80
tcpdump -nnn dst host 10.0.0.200 and port 80
#组合 过滤出 端口是80 并且 ip地址是10.0.0.200
and #并且
or #或者
! #取反
⚠ ❌ tcpdump无法过滤出7层的数据包 http 需要指定端口号过滤并保存,然后通过wireshark查看.
4.4 tcpdump + wireshark抓包流程. ⭐⭐
tcpdump linux抓包 并保存
下载
wireshark分析.
# tcpdump 抓包的时候 通过-w保存
#下载windows,通过wireshark分析即可.
[root@Kylin-V10-sp3 ~]# tcpdump -vvv -nn -i ens33 port 80 or port 53 -w http-dns.pcap
dropped privs to tcpdump
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@Kylin-V10-sp3 ~]# ^C
[root@Kylin-V10-sp3 ~]# ^C
[root@Kylin-V10-sp3 ~]#
4.5 远程连接失败与抓包分析
远程连接云服务器失败了。
1. 关闭公有云安全组的 远程连接端口规则
2. wireshark抓取本地网卡数据包 并过滤 云服务器公网IP的数据表 ip.addr == ip
3. 发现失败
4. 去云服务器上tcpdump -vvv -nnn port 22抓包 发现没有任何数据包 5. 安全组放行22端口重新2-4过程
4.6 抓包小结:
过滤条件 |
wireshark |
tcpdump |
抓出指定协议 |
icmp/tcp/http |
icmp/tcp/udp |
抓住指定端口 |
tcp.port == 80 或 udp.port == 53 |
port 80 tcp或 udp port 53 |
过滤出源端口 |
tcp.srcport == 80 |
src port 80 |
过滤目标端口 |
tcp.dstport == 80 |
dst port 80 |
抓出指定ip的数据包 |
ip.addr == 10.0.0.200 |
host 10.0.0.200 |
过滤出源ip |
ip.src == 10.0.0.200 |
src host 10.0.0.200 |
正则 |
字段(指标)字符串 ~或matches匹配正则,"正则" |
无 |
与 |
&& 或 and |
and |
或 |
|| 或 or |
or |
非 |
! |
! |
选项 |
无 |
-w保存数据包 -i指定网卡 -vvv -nnn |
4.6.1 抓包应用场景(排错)
4.6.2 抓包与网卡
标签:ip,网络协议,DNS,root,net,NS,com From: https://www.cnblogs.com/daofaziran/p/18412311