- 过程
- 详细过程
- 数据链路层、网络层、传输层与MAC、IP、端口的关系
-
baidu.com是一个域名,要完成域名解析,将百度的域名翻译成IP,由Windows上的DNS客户端访问DNS服务器实现的
-
DNS服务器设置在Windows的网络配置里,linux下/etc/resolv.conf。
DNS服务器IP地址配置成114.114.114.114;
-
客户端就要发送一个应用层数据报文:baidu.com的IP地址是多少?
-
到了传输层,传输层加上TCP的头20个字节,其中有两个关键元素:源端口(系统随机分配,假设为7777)和目的端口(53)
-
到了网络层,加上IP头20字节,两个关键元素:源IP和目的IP(114.114.114.114)
-
*** 作系统会看到源IP和目的IP不在一个网络内,这是数据包就要给默认网关,默认网关就是路由器的LAN口IP地址
-
接下来数据到网络接口层,把网络接口层分为两层来看,数据链路层和物理层;
- 数据链路层要加上帧头,枕头里有两个元素:源MAC地址和目的MAC地址(网关的MAC地址)
-
不知道路由器的MAC地址?PC会发一个ARP的广播报文,“192.168.2.1,你的MAC地址是多少?”
-
这时局域网内所有的主机都会收到报文,但只有192.168.2.1这台主机会回复:xxx,我的MAC地址是
XX:YY:ZZ:MM:NN:00 -
接下来用源MAC和目的MAC封装报文,通过物理层网卡以广播的形式发送出去
-
局域网内的所有主机都会收到这个报文,并检查目的的MAC地址是不是我自己,如果不是丢掉,否则继续解析
-
这时路由器收到数据包,发现是给自己的,就往上层网络层传输
-
网络层收到数据包后,检查源IP和目的IP,把私有IP转成公网IP,并把源端口也改掉,并记录相应的修改记录到NAT表中
-
这时从WAN口中发出的数据报文都是公网IP了,经过Internet的路由器又转发到
114.114.114.114主机 -
114.114.114.114DNS服务器主机查询自己的数据库,获取baidu.com的IP地址
然后封装数据报文“baidu.com的IP是xx.yy.zz.mm” -
到传输层,将源端口和目的端口互换,到网络层将源IP和目的IP互换,再经过Internet上的路由器转发到家里的路由器上
-
路由器查询NAT表,将公网IP和目的端口修改为记录里的私有IP和端口
-
路由器在LAN口上将数据报文广播发送出去
-
PC查询MAC地址是自己,然后剥去数据链路层的帧头,给网络层
-
网络层查看IP地址,如果是自己就剥去IP头给传输层
-
传输层解析出端口,再给DNS客户端,这时DNS客户端就知道baidu.com的IP是xx.yy.zz.mm
- 数据链路层:MAC;局域网在数据链路层进行通讯,使用MAC地址通讯
- 网络层:IP;路由器到Internet靠IP
- 传输层:端口;Internet到服务器APP靠端口
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)