准备DHCP、UDP、IP和以太网
-
主机生成DHCP请求报文,放入UDP报文段中,源地址0.0.0.0,目的地址255.255.255.255
-
将包含DHCP请求报文的IP数据报放入以太网帧中,目的MAC地址FF:FF:FF:FF:FF:FF,源MAC地址是主机MAC地址。 交换机会广播该数据帧。
-
交换机广播DHCP帧到所有端口,包括连接路由器的端口。
-
路由器接收到以太网帧后抽取IP数据报,抽取DHCP请求报文。
-
路由器生成DHCP ACK报文,包括分配的IP地址,DNS服务器的地址,默认网关地址,子网掩码,包装成UDP数据报,放入以太网帧,包括源MAC地址(路由器地址)和目的IP地址(主机地址)。
-
交换机收到后转发到主机端口。
-
主机接收到DHCP ACK报文后设置自己的IP地址、DNS地址、默认网关和子网掩码,之后在子网掩码以外的所有数据报都被发送到默认网关。
准备DNS和ARP
当我们向浏览器键入www.google.com时,浏览器会生成一个TCP套接字,由套接字发送HTTP请求,为了生成套接字我们需要知道www.google.com的IP地址,这就涉及DNS协议。
-
主机生成DNS查询,将DNS报文放入UDP报文段中,目的地址在7中记录的DNS服务器地址。
-
封装成以太网帧发送到网关路由器,虽然我们知道网关路由器的IP地址,但仍然需要用ARP协议获取网关的MAC地址。
-
主机生成ARP查询报文,目的地址就是默认网关,MAC地址为广播地址,交换机广播该报文。
-
网关地址接收到ARP查询报文,解析出目的地址就是自己的地址,因此返回一个ARP回答包含自己的MAC地址,向交换机发送,交换机转发给主机。
-
主机得到默认网关的MAC地址
-
现在可以使DNS查询报文到达DNS服务器,此时DNS数据报的IP目的地址是DNS服务器的地址,MAC目的地址是网关路由器。
-
网关路由器接收DNS查询报文,根据目的IP地址和存储的转发表发送到合适的路由器。
-
路由器收到IP数据报后根据目的IP地址和转发表发送到DNS服务器。
-
DNS服务器抽取到DNS查询报文,查找到www.google.com的记录,然后将DNS回答报文放入UDP报文段,经过路由器交换机达到主机。
-
主机终于获取到www.google.com的IP地址。
TCP和HTTP
-
有了IP地址就可以生成TCP套接字,向www.google.com发送HTTP get报文,在生成TCP套接字时需要先和服务器三次握手连接,此时主机会发送目的端口80的TCP SYN报文,MAC地址为网关。
-
在网络中的路由器转发TCP SYN数据报
-
达到www.google.com的服务器,抽取出TCP SYN数据报发送到80端口的套接字上,回复TCP SYN ACK报文。
问题:客户端可以向服务器发送请求是因为服务器有公网IP,但是客户端没有,他是怎么接收服务器的回复的 -
主机最终会接收到TCP SYN ACK 报文,从而进入连接状态。
-
现在已经建立TCP连接,主机向服务器发送HTTP GET报文。
-
服务器返回HTTP响应报文
-
主机浏览器读取HTTP响应报文,抽取HTML显示网页。