网络连接过程

Posted on By xqw

首先所有路由器和主机都有连接相关的硬件(路由器、网卡)和软件(TCP/IP协议–网络通讯软件)

局域网H1给无线局域网H2发QQ消息过程:

p2p网络的建立

首先是p2p网络的建立,需要有一个第三方server,H1、H2都能访问的公网ip3

1、H2给server发送一个包,这时R2的NAT会建立一个session,开放自己的公网ip2和端口port2,server可以和这个ip2、port2进行通信, NAT收到server的包会转发给H2,一般来讲,NAT只会转发来自server的ip,因为之前主动发过包。这个过程叫打洞(UDP Hole Punching)

2、H1要访问H2,也先访问server说要和H2通信,server告诉他去访问公网ip2和端口port2,然后H1向公网ip2和端口port2打一个洞,自己公网为ip1和port1,但是此时H2是会拒绝H1的,需要H2主动向H1打洞

3、这时server会告诉H2“H1要连你,向公网ip2和端口port2打个洞”,之后H1、H2就能相互拿到ip、port,且互通了

P2P的原理和常见的实现方式

各层中包的转发过程

  1. QQ应用层
  2. (H1传输层)进程端口间通讯,通过端口发现这个数据是要给IP协议的,给他发数据
  3. (H1网络层)H1的IP协议收到要发送的数据,封装成IP分组,通过分组交换,将大包拆成小包,每个小包上加上一些信息,要往外发, 目的地址写上目标网关的IP(可以理解为路由器R1的ip2),协议写QQ这个进程的信息
    格式如下图

  4. (H1数据链路层)以太网卡收到IP分组数据后,又封装成以太网帧(格式如下图)发送下层

图中帧首部有:目的地址48位、原地址48位、类型16位(给IP协议的为:0x0800)

  1. (H1物理层)物理层通过双绞线(图中为双绞线)、光纤、无线电发送
  2. (R1物理层->数据链路层->网络层)
    物理层接收
    数据链路层解析帧数据,发现类型为0x0800,交给R1中的IP协议处理、
    网络层:解析IP数据包,查路由表(下图为可能的路由表),目的IP地址与子网掩码计算后发现目的网络地址是192.168.3.12,所以发往IP为192.168.2.2的路由器,从E1接口出去(广域网接口)

  3. (R1网络层->数据链路层->物理层)又经过R1网络层重新封装新的IP数据报
    链路层再封装成广域网帧(改了物理地址等),最后又物理层发送
  4. (R2物理层->数据链路层->网络层->数据链路层->物理层)物理层广域网接口接收一个数据
    数据链路层解析帧数据
    网络层查路由表后发现正好是给自己包的这个局域网的,把数据封装好(准备交付给H2的IP)后给R2的无线网卡,图中物理层是通过无线WIFI
  5. H2 无线网卡接收到帧后将IP分组交给IP协议,IP协议发现这是给自己的,查看IP数据报的协议字段后发现是给QQ的,在发送给H2上的QQ(应用层)