你需要知道的TCP/IP( 二 )


路由器(有网络层和数据链路层),当路由器拿到数据包的时候,发现目的 mac 地址不是自己,就会将数据包通过 LAN 口发送出去 。
当路由器接受的数据包的目的 MAC 地址是当前路由器上 MAC地址,路由器就会对其解包,拿到数据包 目的 IP ,然后根据 目的 IP 匹配下一跳 mac 地址,封包为新的帧数据发送出去 。
TCP/IP 通信

你需要知道的TCP/IP

文章插图
 
从发送端发送数据的时候,数据经过每层的封包,经物理层传送到接收端 。接收端收到数据包,一层一层进行拆包,然后将数据数据发送给我接收端的应用层的应用程序 。
通常我们说的第一层就是 物理层,第二层是 链路层 …...
数据链路层
你需要知道的TCP/IP

文章插图
 
源 MAC 地址 就是发送端的 MAC 地址,目标 MAC 地址不是最终的 MAC 地址,是下一跳节点的 MAC 地址 。
类型 指的是这个以太网帧中的数据是何种类型的数据,比如 IPV4,IPV6 。然后调用对应的接口进行处理 。
数据链路层传输的帧是有大小限制的(64-1518 字节),能传输的数据的最大值就是最大传输单元,简称 MTU,Maximum Transmission Unit 。这个值在以太网中通常是 1500 。
# 查看网卡对应的 MTUifconfig -anetstat -i网络层网络层主要以 IP 协议为主,也有 ICMP,ARP(在 TCPIP 模型 中,arp 属于网络层 。在 osi 七层模型,arp 数据链路层 。) 。
DNSIP 是网络层通信的标识 。但是 IP 不容易记忆,所以出现了 域名 。
访问 DNS 可以将域名解析为 IP。
可以在本地配置 host ,定义域名和 IP 对应关系,这样就不用解析了 。
也可以在电脑配置 DNS 解析时访问的 ip,这样域名解析时就会访问这个服务 。
你需要知道的TCP/IP

文章插图
 
# 解析域名的 ipdig www.mflyyou.cnIP 基础IP 地址又可以分为 IPV4 和 IPV6,目前使用比较广的是 IPV4,所以只介绍 IPV4 。
IP 地址 由 32 (2 进制)位组成,32 位被 . 分为了四组 。每组 8 位,十进制表示就是 xxx.xxx.xxx.xxx(xxx 取值在 0-255) 。
IP 地址 由 网络地址 (网段) 和 主机号。
同一个网段的电脑用 2 层交互机相连,然后就可以局域网通信了 。
同一个网段内,主机号不能重复,重复主机号的电脑不能上网 。
 
为了便于区分出 IP 在那个网段,引入了子网掩码 (netmask) 。IP 地址与子网掩码按位与计算可以得出网段,32 位 中取出网段所在的位,剩余就是主机号能取得值 。
IP 中主机号全为 0 就是网段,全为 1 就是广播地址 。这两个是不能被分配给电脑的 。
IP:192.168.202.116
子网掩码:255.255.252.0
网段为:192.168.200.0
广播地址为:192.168.203.255
IP:192.168.201.56
子网掩码:255.255.252.0
网段为:192.168.200.0
广播地址为:192.168.203.255
ICMP网络层是不可靠传输,发送失败的数据包,网络层是不会再发一次数据包,但是会有 ICMP 包回复告诉你发包到底是什么问题 。传输层 可以根据 ICMP 来判断是否需要重发包 。
ARPARP 用于查找 IP 对应的MAC 地址 。
目的 IP 在路由表中查询下一跳的 IP,在查询这个 IP 对应的 mac 地址
查询的这个 IP 是当前网段内的 ip,它会通过广播地址发送给当前网段内所有主机,收到这个协议的主机会判断是否是当前主机,是的话就会恢复当前 ip 对应的 MAC 地址 。
你需要知道的TCP/IP

文章插图
 
通信过程分析
你需要知道的TCP/IP

文章插图
 
当我在浏览器输入 wwww.mflyyou.cn 的时候:
1、先解析域名(DNS) www.mflyyou.cn 为 IP (目的 IP: 47.104.168.20)
2、将目的 IP 与本地路由表中的子网掩码进行按位与,计算出网段与 Destination 匹配,看哪个匹配度更高,走哪个条目 。都没有匹配到走默认条目(0.0.0.0)
# 查看路由表route -nKernel IP routing tableDestinationGatewayGenmaskFlags Metric RefUse Iface0.0.0.0192.168.31.10.0.0.0UG10000 eth03、然后用 arp 查询(有缓存可不查,走缓存)192.168.31.1 对应的 mac 地址
4、数据链路层封装以太网帧数据包中的目的 Mac 地址址就是 192.168.31.1 对应的 Mac 地址,然后将数据帧发送到下一个节点(这也就常说的下一跳,数据包发送只是找到当前接节点的下一个节点)


推荐阅读