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

通信的数据包格式

如果了解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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,037评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 地址解析协议ARP 物理这一级,主机和路由器是用物理地址来区别的。物理地址是一个本地地址,管辖范围是本地网络,所以...
    顾慎为阅读 1,059评论 0 1
  • 前言 写这篇文章的缘由是客户提出的一个问题:客户使用公司的Wi-Fi产品的App,有两个设备出现了问题,点击App...
    Noskthing阅读 2,942评论 2 23
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,941评论 1 13