DNS、HTTP、ICMP与shifen的探索

网络 网络管理
与OSI七层模型相比,TCP/IP 四层模型将 表示层和会话层 合并到了 应用层 中,将 数据链路层和 物理层合并到了链路层 中。

小伙伴们好呀,这节来分享下这个 ICMP协议 和 curl 访问 http 网站时涉及到的协议。

ARP 协议补充

先补充一下上文的 ARP 协议。

80 35.374000 VMware_c0:00:08 VMware_5b:db:1a ARP 42 Who has 192.168.200.128? Tell 192.168.200.1
81 35.374560 VMware_5b:db:1a VMware_c0:00:08 ARP 42 192.168.200.128 is at 00:0c:29:5b:db:1a

图片图片

MAC 地址是 6 字节,前三个是 厂商,后三个是序列号。

ICMP协议

Internet Control Message Protocol,互联网控制报文协议。ping 的时候触发。

这里直接在虚拟机上去 ping 192.168.2.187 (主机地址)

图片图片

14 8.900476 192.168.200.128 192.168.2.187 ICMP 98 Echo (ping) request  id=0x0904, seq=1/256, ttl=64 (reply in 15)
15 8.900943 192.168.2.187 192.168.200.128 ICMP 98 Echo (ping) reply    id=0x0904, seq=1/256, ttl=128 (request in 14)

可以看到,ping 请求时,这个报文的 type 是 8,表示 Echo (ping) request。

图片图片

应答时,这个 type 是 0 ,表示 (Echo (ping) reply)。

图片图片

DNS 协议

域名系统,Domain Name System。

curl www.baidu.com

访问百度时,第一步就是这个 域名解析 了。

图片图片

捕捉的包如下 👇

图片图片

图片图片

图片对应 21 的请求,可以发现 DNS 基于 UDP(User Datagram Protocol) 用户数据报协议。

同时有个 type 为 A 的类型,这个是请求 ipv4 地址的。

22 那里时 type : AAAA ,这个是 ipv6 地址的。

21 14.648767 192.168.200.128 192.168.200.2 DNS 73 Standard query 0x7abe A www.baidu.com
22 14.648817 192.168.200.128 192.168.200.2 DNS 73 Standard query 0xffc7 AAAA www.baidu.com

以前搭建博客时,有个域名解析的环节,那会也要配置解析这个 A (后知后觉~)

下面看看 response 的数据 👇

24 14.683310 192.168.200.2 192.168.200.128 DNS 132 Standard query response 0x7abe A www.baidu.com CNAME www.a.shifen.com A (ipv4地址) A (ipv4地址) 
25 14.688004 192.168.200.2 192.168.200.128 DNS 156 Standard query response 0xffc7 AAAA www.baidu.com CNAME www.a.shifen.com AAAA (ipv6地址) AAAA (ipv6地址)

CNAME 即 别名记录

长知识了:百度的别名是 www.a.shifen.com

这里也是顺利拿到了 ipv4 地址

图片图片

吃瓜

哦嚯,无意间发现了大公司名字的另一层含义 👇

大家都是 shifen 👍

图片图片

图片图片

HTTP 协议

图片图片

DNS 解析成功后,拿到了这个 ip 地址,这里用的 ipv4 地址去建立 TCP 连接。

三次握手后,就发送 HTTP 请求了 👇。

29 14.714278 192.168.200.128 xxx.42 HTTP 131 GET / HTTP/1.1

Get 请求如下,这个的 User-Agent 是 curl (平时见到的都是 浏览器 标志 )

图片图片

这个 TCP 的报文段大小是 77 ,同时 [Next Sequence Number: 78    (relative sequence number)]

图片图片

响应 👇

从 30 这一条开始,这里 ACK = 78 刚好。

30 14.714429 ipv4 192.168.200.128 TCP 54 80 → 44626 [ACK] Seq=1 Ack=78 Win=64240 Len=0
31 14.733343 ipv4 192.168.200.128 TCP 1494 80 → 44626 [PSH, ACK] Seq=1 Ack=78 Win=64240 Len=1440 [TCP segment of a reassembled PDU]
32 14.733714 192.168.200.128 ipv4 TCP 54 44626 → 80 [ACK] Seq=78 Ack=1441 Win=31680 Len=0
33 14.733782 ipv4 192.168.200.128 HTTP 1395 HTTP/1.1 200 OK  (text/html)

主要看 31 和 33 这两条,

PSH + ACK:用于传输数据并要求接收端立即交给应用层处理。

这里数据长度超过了 MTU(Maximum Transmission Unit 最大传输单元)1500 个字节,要进行分片。

所以,31 中出现 [TCP segment of a reassembled PDU],意味着它不是完整的,只是 PDU(Protocol Data Unit 协议数据单元)的一部分。

在 33 中可以看到这个 重组TCP 的记录 👇

[2 Reassembled TCP Segments (2781 bytes): #31(1440), #33(1341)]

图片图片

接着就是 HTTP 的内容了,和浏览器上看的差不多,就是 响应行,头,体 。就不多赘述了。

图片图片

下面又是 TCP 四次挥手 的内容了。

图片图片

curl 结束后,立刻去查这个 半连接队列 ,发现还在等待关闭。

图片图片

等待 2MSL (linux 上 2MSL = 60s )后,就关闭了。

sysctl net.ipv4.tcp_fin_timeout

图片图片

最后,补充下这个 模型,看看之前介绍到的协议都在哪一层 👇

OSI 七层模型

+-------------------------+
   7    |   Application Layer     |  DNS,HTTP,SSH,Telnet,FTP 等
        +-------------------------+
   6    |   Presentation Layer    |
        +-------------------------+
   5    |      Session Layer      |
        +-------------------------+
   4    |    Transport Layer      | (段 segement)TCP,UDP
        +-------------------------+
   3    |      Network Layer      | (包 packet)ICMP,IP
        +-------------------------+
   2    |    Data Link Layer      | (帧 frame)ARP
        +-------------------------+
   1    |    Physical Layer       |
        +-------------------------+

TCP/IP四层

与 OSI 七层模型相比,TCP/IP 四层模型将 表示层 和 会话层 合并到了 应用层 中,将 数据链路层 和 物理层 合并到了 链路层 中。

+-------------------------+
   4    |    Application Layer    |
        +-------------------------+
   3    |    Transport Layer      |
        +-------------------------+
   2    |      Internet Layer     |
        +-------------------------+
   1    |       Link Layer        | 链路层
        +-------------------------+
责任编辑:武晓燕 来源: Java4ye
相关推荐

2015-10-22 10:11:48

IPTCPDNS

2023-11-08 09:49:19

Java实践

2018-01-12 17:03:29

HTTPgzip压缩

2024-12-05 12:01:09

2010-08-02 16:59:54

2021-04-27 19:24:34

ICMP IP 协议

2010-07-13 10:10:07

2013-11-12 14:11:10

2014-10-22 09:36:41

TCPIP

2010-06-13 14:02:25

ICMP协议IGMP协议

2021-01-29 09:19:21

DNS劫持HTTP劫持加密

2016-05-31 10:11:51

2010-07-30 16:00:36

ICMP协议

2010-08-02 16:41:15

2010-07-30 16:17:53

2010-08-02 16:51:54

2010-06-13 15:53:35

ICMP协议

2010-08-02 16:14:54

2009-12-24 17:16:23

Ado Oledb

2022-08-21 21:28:32

数据库实践
点赞
收藏

51CTO技术栈公众号