小林coding的笔记——图解网络(三)

远程定位IP

小林coding

TCP模块在执行连接、收发、断开各操作时,都需要委托IP模块将数据封装成网络包发送给通信对象

IP报头如下:
小林coding原图
在IP协议里面需要有源地址IP和目标地址IP:

源地址IP,就是客户端输出的IP地址

目标地址IP,即通过DNS域名解析得到的web服务器ip

因为HTTP是经过TCP传输的,所以IP包头的协议号,要填写06,表示协议为TCP

假设客户端有多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?

多个网卡需要填写源地址时,需要判断应该是用哪个一块网卡来发送包。

这个时候就需要路由表规则,来判断哪一个网卡作为源地址IP

在Linux中可以 使用route -n 命令查看当前系统的路由表

小林coding原图

根据上边的路由表 假设Web服务器的目标地址是192.168.10.200

小林coding原图

1.先和第一条目的子网的 子网掩码(Genmask)进行与运算
得到结果为192.168.10.0 但第一个条目的Destination 是192.168.3.0 不符合 匹配失败

2.再和第二条…进行与运算 结果为192.168.10.0 与第二条的Destionation匹配成功,所以使用eth1网卡的IP地址作为IP包头的地址

如果Web服务器的地址为10.100.20.10 依照上边的路由表规则判断 判断后的结果与第三条目匹配

第三条目比较特殊 它的目标地址和子网掩码都是 0.0.0.0 表示默认网关 如果其他所有条目都没办法匹配 就用自动匹配这一行 之后把包发给路由器 Gateway就是路由器的IP地址

有了IP报头的数据包,有了远程定位的能力。但是知道了路径 还需要一个指路牌

两点传输 —— MAC

生成了IP头部之后,接下来网络包需要在IP头部加上MAC头部

MAC包头里面有发送方MAC地址 接收方MAC地址 用于两点之间的传输

MAC包头的协议类型只有 IP协议(0800) ARP协议(0806)

发送方的MAC地址可以直接读出来
接收方的MAC地址 需要通过ARP协议帮助我们路由器的MAC地址

ARP协议会在以太网中以广播的形式 ,对以太网所有设备喊出,这个IP地址是谁的,请把你的MAC地址告诉我

对方回答之后,如果对方和自己处于同一个子网中,就可以将获得的MAC地址写入头部

之后会把查询结果放到一块ARP缓存的内存

所以说:

先查询ARP缓存,如果其中已经保存了对方的MAC地址,就不需要发送ARP查询,可以直接使用ARP缓存中的地址

而当ARP缓存中不存在对方的MAC地址时,则发送了ARP广播查询

linux中可以通过arp -a

之后获得了MAC头部的数据包就可以开始走啦

出口——网卡

网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转化成电信号,才能在网线上传输。

负责这一操作的是网卡,控制网卡还需要网卡驱动程序。

网卡获得网络包后,会将其复制在网卡内的缓存中,接着会在开头加上报头和起始帧分隔符 ,在末尾加上用于检测帧错误的帧校验序列。

小林coding原图

起始帧分界符是用来表示包起始位置的标记
末尾的FCS(帧校验序列)是用来检测包传输中是否有损坏

最后网卡会将包转化为电信号,通过网线发送出去

送别者——交换机

交换机的设计是将网络包原样转发到目的地,交换机工作在MAC层,也称为二层网络设备。

首先,电信号到达网线口,交换机里的模块进行接收,接下来交换机里的模块将电信号转化为数字信号

通过包末尾的FCS校验错误,如果没问题则放在缓存区。

计算机的网卡本身具有MAC地址,并且通过核对收到的包的接收方MAC地址判断是不是发给自己的。但交换机的端口没有MAC地址,需要查询这个包的接收方MAC地址是否已经在MAC地址表中有记录。

交换机的MAC地址表如下:

  • 一个是设备的MAC地址
  • 另一个是该设备连接在交换机的哪个端口上

小林coding

比如说接收方的MAC地址为 00-02-B3-1C-9C-F9,那么与第三行匹配,那就可以从3号端口通过交换电路将包发送到相应的端口了。

交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。

如果找不到指定的MAC地址,说明是第一次来或者好久没来了,只能向所有的端口都发,无论该设备连接在哪个端口上都能收到这个包

相应的接受者才接收包,而其他设备则会忽略这个包

如果接收方的MAC地址是一个广播地址 那么交换机后将包发送到除了源端口之外的所有端口

以下两个属于广播地址:

  • MAC 地址中的 FF:FF:FF:FF:FF:FF
  • IP 地址中的 255.255.255.255

出境大门——路由器

网络经过交换机后,现在到达了路由器,并由此被转发到下一个路由器和目标设备。

也是查表

因为路由器是基于IP设计的,俗称三层网络设备,路由器的各个端口都有MAC地址和IP地址

但交换机是基于以太网设计的,俗称二层网络设备,交换机的下面端口不具有MAC地址

首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过末尾的FCS进行错误检验。

如果没问题则检查MAC头部的接收方MAC地址,如果是发给自己的就放在接受缓存区里,否则丢弃这个包。

总的来说路由器会检查是不是MAC地址是不是与自身匹配,如果不匹配,直接丢弃。

完成传递给路由器的任务后,MAC的头部任务就结束了。路由器会根据IP地址进行包的转发操作

小林coding

如果你往192.168.1.100发送一个包,也是一个个做与运算,会发现会走第二个,如果都走不了的话,就会走一个默认路由。(0.0.0.0)

如果网关是一个IP地址,那么这个IP地址就是我们要转发的IP地址,还未抵达终点,还需要路由器转发。

如果网关为空,则IP头部的接收方IP地址就是要转发到的目标地址,说明已经抵达终点。

知道对方IP地址后,需要根据ARP协议来查询MAC地址,并将查询的结果作为接收方的MAC地址,并将查询的结果作为接收方的MAC地址。

路由器也有ARP缓存,因此首先会在ARP缓存中查询,如果找不到则发送APP查询请求。

发送方的MAC地址字段,这里填写输出端口的MAC地址。还有一个以太网类型字段,填写0800(十六进制)表示IP协议。

网络包完成后,会将其转化成电信号通过端口发出去。

发送的网络包会通过交换机到达下一个路由器,在这个传输过程中,源IP和目的IP始终不变,但MAC地址一直会变,需要一直在两个设备间传输。

互相扒皮——服务器和客户端

数据包到了之后,看MAC是否符合,符合就收起来,

扒开IP的头,发现IP地址符合,根据IP头中的协议项,知道上层是TCP

扒开TCP的头,里面有序列号,需要看一看这个是不是我想要的,如果是就放入缓存中返回一个ACK,如果不是就丢弃。TCP头部还有端口号,HTTP的服务器正在监听这个端口号。

于是服务器就知道HTTP进程要这个包,于是就把这个包发给HTTP进程。

服务器的HTTP进程看到,原来这个请求是要访问一个页面,于是就把网页封装在HTTP相应报文里。

之后相应报文也要穿上TCP IP MAC头部,不过这次是源地址时服务器的IP地址,目的地址是客户端的IP地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值