网络通信流程原理


前言

先抛出几个问题,下面将围绕这几个问题进行网络通信原理的讲解:

  1. 当我们浏览器输入www.taobao.com时我们是怎样与淘宝服务器进行通信的呢?
  2. 当我们访问同一局域网内服务器时是怎么样进行通信的呢?
    首先科普一下局域网与互联网的关系,一句话概括**其实互联网本质就是一个无比巨大覆盖整个世界的局域网(当然局域网之上的称呼叫广域网、城域网之类的),由无数局域网组成。**如过想要更细致了解可以看下这篇文章:什么是互联网(转载)
    上图:
    在这里插入图片描述
    这里正方形代表主机(主机A为我本机),圆形代表交换机,三角形代表路由器。
    这里通过ping命令 ping www.taobao.com 可以看到被DNS域名服务解析后www.taobao.com域名对应的ip为27.221.197.171服务器在响应,这里将其定义为淘宝服务器A,本文不深究DNS域名解析细节,主要探讨已知目标ip的网络通信流程及其原理。
    在这里插入图片描述

第一步 封装TCP/IP数据包、数据包发送至路由网关A

如图我们可以看到,第一步完成的是封装TCP/IP数据包、数据包发送至路由网关的过程。

1.封装TCP/IP数据包

TCP/IP数据表封装流程

1.1、HTTP协议报文组装

因为使用浏览器进行访问所以应用层执行的为HTTP协议,首先按http协议组装报文请求头、请求体等。

1.2、TCP协议报文组装

TCP协议包首先需要设置端口,接受方的HTTP端口是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为38080,然后将HTTP的数据包嵌入到TCP报文数据位置。
在这里插入图片描述

1.3、IP协议报文组装

IP数据包首先需要设置双方ip和TTL存活时间(time to live),发送方IP为192.168.0.4,接收方的IP为27.221.197.171,然后将TCP的数据包嵌入到数据位置。TTL的值代表数据包在网关路由器中可以跳转的次数,当TTL=0是路由器会丢弃该数据包,防止出现数据包环路情况。
数据包环路是指路由器F挂掉了数据包来路由器A、B、C、D中来回跳转,如果不存在TTL随着访问taobao网站的连接越来越多会阻塞网络。

在这里插入图片描述

1.4封装以太网协议

以太网数据包需要设置双方mac地址,发送方为主机A的网卡mac地址mac1,接收方为网关路由器A的mac地址mac4。
然后将IP协议报文封装到数据位置。
在这里插入图片描述

这个可能会有两个疑问怎么知道这个数据包应该发往网关路由器A?怎么获取网关路由器A的mac地址?
先看下目前已知条件:主机AIP(192.168.0.4)、主机AI网关(192.168.0.1)、主机AI子网掩码(255.255.255.0)、淘宝服务器IP(27.221.197.171)。

  1. 在准备以太网协议时首先会先利用主机AIP和淘宝服务器IP分别于主机AI子网掩码做&运算,分别得到网络号192.168.0.0和27.221.197.0,由此可知主机A和淘宝服务器IP不在同一局域网。
  2. 此时用网络号192.168.0.0与主机A中的路由表作比较可以得出下一跳的ip为路由器A的IP,此时还需要知道路由器A的mac才能封装以太网帧协议报文。
  3. 同样根据做&运算可以得出路由器A与主机A在同一局域网内,此时有注解A发出ARP广播询问192.168.0.1对应的mac地址是多少。

在这里插入图片描述

  1. ARP广播会通知局域网内全部主机和路由器,收到ARP广播后首先判断目的IP地址是否与自己IP匹配不匹配丢弃,匹配则给与ARP回应告诉对方自己的mac的地址,故主机A可以获取到路由器A的mac地址为mac4

2.数据包发送至路由网关A

将封装好的以太网帧协议转换为二进制,通过光缆高低压转换(高压代表1,低压代表0)发送至路由器A

第二步 路由器A发送至路由器C

  1. 当路由器A收到数据包后发现mac地址与自己相符,接收此包,紧接着解析IP协议发现目标IP并不是自己需要继续转发
  2. 首先根据子解掩码判断目标IP是否与自己在同一个局域网内,如果在则发送ARP请求获取目标IPmac地址,很显然不在统一局域网
  3. 取目标IP与路由器A的路由表作比对可以判断出下一跳的IP为27.221.190.1即路由器C(比对判断下一跳原则暂且不做深究)
  4. 一直路由器C的IP可以通过ARP获取路由器C的mac地址
  5. 重写包装以太报文,修改源mac为mac4,目标mac为mac4,从路由器A发送数据包给路由器C(A、C之间其实也有交换机,完成ARP广播转发和数据包转发)

第三步 路由器C发送至路由器F

同理第二步,下面放一段视频为了更方便理解数据包在路由器间是怎么样转发的。
在整个过程中IP地址不变,MAC地址每一跳都会变化,IP地址决定终点,MAC地址决定下一跳的方向

网络通信之路由器之间传递

第四部 路由器F到淘宝服务器A

  1. 路由器F收到数据包后可以根据数据包中的IP、本IP、子网掩码判断出路由器F与淘宝服务器A属于同一个局域网
  2. 那么此次连接的终点就在路由器F所在局域网,此时发送ARP广播根据IP报文中的目的IP获取mac地址
  3. 淘宝服务器A收到ARP请求发现IP与自己相符,ARP答复给路由器F本机的mac地址为mac9
  4. 路由服务器F重新包装以太网协议将数据包发给淘宝服务器A
  5. 淘宝服务器A收到后逐层解析IP、TCP、HTTP协议获取到请求头,最后类似此过程将相应转到主机A。

总结

此时问题1. 当我们浏览器输入www.taobao.com时我们是怎样与淘宝服务器进行通信的呢?得到了解答,想想问题2. 当我们访问同一局域网内服务器时是怎么样进行通信的呢?大家也知道了怎么通信,没错如果在同一局域网,直接发生ARP广播获取mac地址,封装好以太网帧协议并转换为二进制,通过光缆高低压转换(高压代表1,低压代表0)发送至目标主机。

猜你喜欢

转载自blog.csdn.net/yangxiaofei_java/article/details/114082674