美文网首页ios程序员Java学习笔记
TCP/IP协议---局域网和外网通信

TCP/IP协议---局域网和外网通信

作者: kevin_007 | 来源:发表于2017-06-08 14:45 被阅读603次

通信的数据包格式

如果了解TCP/IP协议,可能会想到,如果要上网,肯定需要通过TCP/UDP收发数据,底层是IP和以太网层。正常的数据包发送后包含以下内容:

数据包
TCP头 + 数据包
IP头 + TCP头 + 数据包
以太网头 + IP头 + TCP头 + 数据包

数据被一层一层封装,其中比较重要的信息是:

  • 以太网头中的MAC地址
  • IP头中的ip地址
  • TCP头中的端口号

有了以上三个信息,数据包就知道从哪来,要到哪去。

局域网通信方式

当数据包到达ip层后,ip层首先判断数据包要给谁,如何判断呢,就通过子网掩码来判断,见代码

//通过子网掩码判断是否为同一个网络(局域网)
(ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask)))

/**
 * Determine if two address are on the same network.
 *
 * @arg addr1 IP address 1
 * @arg addr2 IP address 2
 * @arg mask network identifier mask
 * @return !0 if the network identifiers of both address match
 */
#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
                                              (mask)->addr) == \
                                             ((addr2)->addr & \
                                              (mask)->addr))

我们知道局域网的物理层的通信,是通过mac地址来唯一区分具体设备的。那么MAC地址如何知道的呢? 因为ip地址和mac地址是一一对应的,所以有了ip地址就可以知道mac地址了,如何转换呢,那就需要ARP来帮忙了。

ARP

ARP统称为地址转换协议,负责将IP地址转换为mac地址。转换方式其实也很简单,本机广播一个ARP请求,这其中包含谁有ip地址192.168.x.x,请回答,这个时候包含该ip地址的机器会做出应答,应答内容包含我是ip地址192.168.x.x,我的mac地址为xx:xx:xx:xx:xx:xx
一般设备都包含一个arp缓存,这样就不需要每次发送都请求一下了,看一下lwip中的缓存arp_table

for (i = 0; i < ARP_TABLE_SIZE; i++) {
      if ((arp_table[i].state >= ETHARP_STATE_STABLE) &&
          (ip_addr_cmp(dst_addr, &arp_table[i].ipaddr))) {
        /* found an existing, stable entry */
        ETHARP_SET_HINT(netif, i);
        return etharp_output_to_arp_index(netif, q, i);
      }
    }

外网通信发送

如果上面ip_addr_netcmp判断为不在同一个网内,那又如何通信呢,有点基础的可能会想到,这个数据包需要发给路由器了。那如何发给路由器的呢?有人可能会说通过ARP来获得mac地址然后发出去嘛。是的,的确是这样的,但在这之前还经历了一个步骤叫查找路由表

路由表

路由表会告诉我们路由器的ip地址,让路由器去负责数据包转发到外网。一般情况路由表就是指我们配置的网关,通过netstat -rn

$ netstat -rn
内核 IP 路由表
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.39.1    0.0.0.0         UG        0 0          0 eth1
192.168.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1

说明 每一行表示一个路由表项,第一行中的第一列为0.0.0.0,这是一个默认路由表表项。每个主机都有一个或多个默认路由。

内容原创,转载请署名作者: jianshu_kevin@126.com

相关文章

  • 你需要知道的TCP/IP

    前言 TCP/IP 协议 是网络通信的基石,TCP/IP 协议 不是只有 TCP 和 IP 协议,它是整个网络通信...

  • TCP/IP协议---局域网和外网通信

    通信的数据包格式 如果了解TCP/IP协议,可能会想到,如果要上网,肯定需要通过TCP/UDP收发数据,底层是IP...

  • 深入理解 Java 乱码问题

    前言 这段时间在看 TCP/IP 网络通信这块,好奇我的电脑和局域网中电脑怎样通信,又怎样外网通信,Mysql 相...

  • TCP的三次握手和四次挥手

    一、什么是 TCP/IP 协议 TCP/IP 是用于因特网 (Internet) 的通信协议。TCP/IP 通信协...

  • HCIA-SW数据通信部分(一)

    以太网帧结构 网络通信协议 OSI------参考模型 TCP\IP----协议----ISO 链路层协议 局域网...

  • 第一章 网络基础知识

    协议 常用代表协议 IP、tcp http 而LAN(局域网)中常用的协议IPX/SPX TCP/IP就是ip、t...

  • TCP/IP协议

    什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的通信协议。 TCP/IP 指传输控制协议/...

  • 网络编程:TCP、UDP及Socket

    TCP/IP协议 IP、TCP、UDP 都是TCP/IP协议的一部分。而Socket是应用层与TCP/IP协议通信...

  • TCP/IP学习笔记

    TCP/IP 介绍 TCP/IP 是用于因特网 (Internet) 的通信协议。计算机通信协议(Computer...

  • C1 了解Web及网络基础

    KeyWords: 诞生,网络基础TCP/IP,TCP/IP协议族,TCP/IP的分层管理,TCP/IP通信传输流...

网友评论

    本文标题:TCP/IP协议---局域网和外网通信

    本文链接:https://www.haomeiwen.com/subject/glftqxtx.html