网络分层概念及基本知识

1、OSI 的七层模型,和 TCP/IP 的四层 / 五层模型

在这里插入图片描述

2、TSL层

在这里插入图片描述

3、什么是 TCP 流

在具体的网络报文层面,一个 TCP 流,对应的就是一个五元组:传输协议类型、源 IP、源端口、目的 IP、目的端口。比如,今天你访问了极客时间网站,那么你这次的 TCP 流就可能就是这样一个五元组:

(TCP, your_ip, your_port, geekbang_ip, 443)

一个 IP 报文,包含了所有这五个元素,所以 Wireshark 在解析抓包文件时,自然就能通过五元组知道每个报文所属的 TCP 流了。这也是为什么我们可以在 Wireshark 里,用 Follow TCP Stream 的方法,找到报文所在的 TCP 流。

4、报文、帧、分组、段、数据包

报文(packet),是一种相对宽泛和通用的说法,基本上每一层都可以用。比如,在应用层,你可以说“HTTP 报文”;在传输层,你可以说“TCP 报文”;同样的,在网络层,当然就是“IP 报文”了。事实上,网络层也是“报文”一词被使用最多的场景了。数据包也是类似的,可以在很多场景下通用。

帧(frame)是二层也就是数据链路层的概念,代表了二层报文,它包含帧头、载荷、帧尾。注意,帧是有尾部的,而其他像 IP、TCP、HTTP 等层级的报文,都没有尾部。我们不可以说“TCP 帧”或者“IP 帧”,虽然也许对方也明白你的意思,但我们都想做得专业一点,不是嘛。这里还有个小知识点:HTTP/2 实现了多路复用,其中也有帧的概念,不过那个帧,跟这里网络二层的帧,除了名称相同以外,就没有别的联系了。

分组是 IP 层报文,也就是狭义的 packet。

段特指 TCP segment,也就是 TCP 报文。既然 segment 是“部分”的意思,那这个“整体”又是什么呢?它就是在应用层交付给传输层的消息(message)。当 message 被交付给传输层时,如果这个 message 的原始尺寸,超出了传输层数据单元的限制(比如超出了 TCP 的 MSS),它就会被划分为多个 segment。这个过程就是分段(segmentation),也是 TCP 层的一个很重要的职责。

数据包,Datagram 的中文叫“数据报”,但不是“数据包”。读音类似,但意思并不完全相同。前面说过,“数据包”是一个通用词,所以用“UDP 数据包”指代“UDP 数据报”并没有问题。但反过来,非 UDP 协议的数据包,比如 TCP 段,就不能叫“TCP 数据报”了,因为 TCP 不是 Datagram。
在这里插入图片描述

5、网络层的对应排查工具

5.1、应用层

  • Chrome+F12——>network
  • Application 页——>找到 Storage ——>Cookie

5.2、会话层和表示层

  • 第一种,还是基于浏览器做初步的检查,主要是围绕证书本身做检查
  • 第二种,关于 TLS 握手、密钥交换、密文传输等方面的排查,还是需要用tcpdump 和 Wireshark 来做

5.3、传输层

路径可达性测试
$ telnet www.baidu.com 443
Trying 180.101.49.12...
Connected to www.a.shifen.com.
Escape character is '^]'.
nc
$ nc -w 2 -zv www.baidu.com 443
Connection to www.baidu.com 443 port [tcp/https] succeeded!
netstat查看当前连接状况
$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0    280 10.0.2.15:22            10.0.2.2:56669          ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN
查看当前连接的传输速率
[root@localhost ~]# iftop 
interface: ens33
IP address is: 192.168.192.110
MAC address is: 00:0c:29:9d:13:5f

在这里插入图片描述

查看丢包和乱序等的统计,netstat -s 命令
[root@localhost ~]# netstat -s
Ip:
    1081829 total packets received
    0 forwarded
    0 incoming packets discarded
    1081814 incoming packets delivered
    765524 requests sent out
    16 outgoing packets dropped
Icmp:
    70 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 44
        echo requests: 26
    84 ICMP messages sent
    0 ICMP messages failed
查看动态变化值
[root@localhost ~]# watch -d netstat -s
ss -s命令查看整体情况
root@localhost ~]# ss -s
Total: 179 (kernel 760)
TCP:   14 (estab 3, closed 2, orphaned 0, synrecv 0, timewait 2/0), ports 0

Transport Total     IP        IPv6
*	  760       -         -        
RAW	  0         0         0        
UDP	  0         0         0        
TCP	  12        6         6        
INET	  12        6         6        
FRAG	  0         0         0        

5.4、网络层

查看网络路径状况
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
 1  gateway (192.168.192.2)  0.420 ms  0.201 ms  1.479 ms
 2  * * *
 3  * * *
 4  * * *
加上 -I 参数(I 代表 ICMP),就可以正常跑到底了:
$ traceroute  www.baidu.com -I
traceroute to www.a.shifen.com (180.101.49.12), 64 hops max
  1   10.0.2.2  0.099ms  2.363ms  0.078ms
  2   192.168.1.1  3.320ms  1.220ms  1.204ms
  3   100.65.0.1  8.737ms  4.872ms  6.403ms
  4   61.152.54.125  5.035ms  3.397ms  4.288ms
  5   *  61.152.25.110  4.176ms  *
  6   202.97.101.30  7.447ms  6.399ms  5.936ms
  7   58.213.95.110  10.488ms  *  9.014ms
  8   *  58.213.95.134  11.064ms  *
  9   58.213.96.74  10.997ms  10.042ms  10.592ms
 10   *  *  *
 11   *  *  *
 12   *  *  *
 13   180.101.49.12  11.269ms  9.518ms  8.779ms

背后的原理,就是 traceroute 默认是用 UDP 作为探测协议的,但是很多网络设备并不会对 UDP 作出回应。所以我们改成 ICMP 协议做探测后,网络设备就有回应了。其实,Windows 上的 tracert,就是默认用 ICMP,这一点跟 Linux 正好是反过来的。

用 mtr,来获取更加全面和动态的链路状态信息
$ mtr www.baidu.com -r -c 10
Start: 2022-01-07T04:05:02+0000
HOST: victorebpf                  Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- _gateway                   0.0%    10    0.3   0.4   0.2   1.2   0.3
  2.|-- 192.168.1.1                0.0%    10    1.6   1.8   1.4   3.2   0.5
  3.|-- 100.65.0.1                 0.0%    10    3.8   7.0   3.8  10.3   2.0
  4.|-- 61.152.54.125              0.0%    10    4.0   4.3   3.6   5.1   0.5
  5.|-- 61.152.25.110             30.0%    10    5.0   6.8   4.4  18.9   5.4
  6.|-- 202.97.101.30             20.0%    10    7.8   6.6   5.4   7.8   0.8
  7.|-- 58.213.95.110             80.0%    10   10.0   9.8   9.6  10.0   0.3
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  9.|-- 58.213.96.74               0.0%    10   10.5  12.7   9.9  24.7   4.9
 10.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 11.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 12.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 13.|-- 180.101.49.12              0.0%    10    9.4   9.1   8.3   9.7   0.5
route查看路由
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 enp0s3
10.0.2.2        0.0.0.0         255.255.255.255 UH    100    0        0 enp0s3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
netstat,其实也能帮我们查看路由,只要加上 -r 参数:
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.192.0   0.0.0.0         255.255.255.0   U         0 0          0 ens33
ip route也可以查看路由信息
[root@localhost ~]# ip route 
default via 192.168.192.2 dev ens33 proto static metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.192.0/24 dev ens33 proto kernel scope link src 192.168.192.110 metric 100 

5.5、 数据链路层和物理层

这一层离应用层已经很远了,一般来说是专职的网络团队在负责。如果这一层有问题,就会直接体现在网络层表现上面,比如 IP 会有丢包和延迟等现象,然后会引发传输层异常(如丢包、乱序、重传等)。所以,一个稳定的数据链路层乃至物理层,是网络可靠性的基石。

使用ethtool查看相关信息

# ethtool -S enp0s3
NIC statistics:
     rx_packets: 45897
     tx_packets: 9457
     rx_bytes: 59125524
     tx_bytes: 834625
     rx_broadcast: 0
     tx_broadcast: 17
     rx_multicast: 0
     tx_multicast: 59
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43883625/article/details/125181533
今日推荐