前言:
网络七层协议(通常简化为5类)
层数 | 功能 | 应用 |
---|
第七层 | 内容层 | 如:网页,视频,博客… | 第五到七层 | 应用层 | 如:http,邮件,文件传输,直播… | 第四层 | 传输层 | TCP堵塞控制,UDP | 第三层 | 网络层 | IP地址,路由 | 第一二层 | 物理层,连接层 | 以太网,Wi-Fi,DSL… |
1. 输入网页地址前:
在浏览器输入网址前,电脑在连接进互联网时会通过DHCP协议,向服务器请求得到自己的IP地址。
在整个过程起始前,假设电脑首次连接到网络,还没有自己的IP和MAC地址等。此时:
- 需要获取电脑自己的IP地址,第一跳路由器地址,DNS服务器地址。通过DHCP协议实现。
- 从应用层的DHCP请求在UDP(第四层)被封装,在IP(第三层)被封装,再到802.3以太网(第一二层)被封装。
- 由于不知道任何地址,以太网以广播形式(broadcast,终点地址为:FFFFFFFFFFFF)在LAN中传播,最终被运行DHCP服务器的路由器接收。
- 请求会从底层(以太网,IP)解复用(demuxed)到DHCP层,从而DHCP拿到负载/实质信息(payload)。
- DHCP 服务器制定包含客户端 IP 地址、第一跳路由器 IP 地址、DNS 服务器名称和 IP 地址的 DHCP 确认字符ACK。
- 虽然DHCP服务器把刚制定的客户端IP地址设为终点地址,但是客户端还不知道自己的IP地址。使用同样的方法,broadcast,在客户端解复用。此时交换机(switch)也了解到了LAN中新电脑的信息。(switch learning)
- DHCP客户端接收到DHCP的确认字符ACK,包含自己的IP地址等。
具体DHCP工作步骤参考:https://blog.51cto.com/u_15073468/2795167
现在,客户端有了自己的IP地址,知道了DNS服务器的名字和地址,也知道了第一跳路由器的IP地址。
2. ARP(在DNS和HTTP前)
- 在发送http请求前,需要链接如www.google.com的IP地址:DNS
- DNS在应用层被创建,在UDP层被封装,在IP层被封装。在header添加出发点的IP地址和终点的IP地址。在以太层被封装。添加了出发点的MAC地址,但是由于现在只是知道第一跳路由器的IP地址,还不知道他的MAC地址。为了能够传到第一跳路由器,需要路由器端口的MAC地址:ARP协议。
- ARP请求是以广播形式发送的。已知IP地址的路由器接收到后,会回复一个包含有MAC地址的ARP协议(以太层)。
3. DNS
- 此时客户端就知道了第一跳路由器的MAC地址。所以可以发送带有DNS请求的帧了(frame->packets)
- 接下来,包含DNS请求的IP数据报(datagram)通过局域网交换机(LAN switch)从客户端传到了第一跳的路由器。
- 然后,IP数据报从本地网络传输到了DNS服务器的网络,然后路由到了DNS服务器。
- 解复用到DNS服务器
- DNS服务器向客户端回复www.google.com的IP地址。
4. 携带HTTP的TCP连接
- 在发送HTTP请求前,客户端需要向网页服务器打开TCP socket。
- TCP SYN 报文段(第一次握手)路由到网页服务器
- 网页服务器回复TCP SYNACK(第二次握手)
- TCP再次发送ACK(第三次握手),TCP 连接建立。
5. HTTP请求/回复
- HTTP请求发送到TCP socket
- 包含HTTP请求的IP数据报路由到www.google.com
- 网页服务器回复HTTP请求。(包含网页页面)
- 包含HTTP回复的IP数据报路由回客户端。
关于TCP三次握手四次挥手,参考: https://blog.csdn.net/qzcsu/article/details/72861891
此博客仅用于自我学习的记录,如有不当请指正。12/04/2021
|