网络4层协议
- 应用层(http,ssh,整合了表示层和会话层);
- 传输控制层(tcp面向连接三次握手四次挥手,udp面向报文);
- 网络层(ip下一跳);
- 数据链路层(mac节点);
- 物理层(交换机、光纤).
linux中测试
cd /proc/$$/fd
ll
# 建立连接
# 必须要8<紧贴以识别文件描述符
exec 8<> /dev/tcp/www.baidu.com/80
ll
# 发送数据
# >& 表示重定向的是文件描述符(> 文件)
echo -e 'GET / HTTP/1.0/\n' >& 8
# 接收数据
# 同 >&
cat 0<& 8
# 关闭连接
# 关闭文件描述符
exec 8<& -
三次握手四次挥手(tcp最小粒度)及arp
- 通常最后一次握手时在client发送确认包给server时就带上了数据(此时已经确认对方io可用,默认己方io可用)
- 确认一个唯一的通信连接资源的四元组:对方ip:port-己方ip:port
#查看本机建立的连接
netstat -natp
#查看网卡
cat /etc/sysconfig/network-scripts/ifcfg-eth0
#查看路由表
route -n
#arp协议查看数据链路表
arp -a
#网络接口配置
ifconfig
arp协议在家用交换机中的应用
- 源ip和mac为自己,目标ip为某个ip(如网关172.27.0.1),目标mac为FFFFFF
- 当交换机收到数据包后,遇到全F的mac则在局域网中进行广播
- 当不是172.27.0.1的计算机收到包后会丢弃,如是172.27.0.1则会响应
- 交换机收到响应后记下mac以用于下一次收到同一个目标的arp时不广播
- 最后修改arp包的目标mac地址回给源ip所在mac的设备
- 发包者记下目标ip的mac地址(如网关)
下一跳(网络层)
所有目标网络和掩码做按位与得到某个目标网络即将数据包发送给该目标网络的网关
[root@VM-0-8-centos ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.27.0.1 0.0.0.0 UG 100 0 0 eth0
172.27.0.0 0.0.0.0 255.255.240.0 U 100 0 0 eth0
[root@VM-0-8-centos ~]# arp -a
_gateway (172.27.0.1) at fe:ee:32:07:ea:07 [ether] on eth0
如ping 127.27.0.2(同一局域网)
- 在表中和Genmask进行与运算后和Destination172.27.0.0匹配
- 替将数据包发送到Gateway0.0.0.0 (自己,不发,回环)
- 再和Genmask进行运算后和Genmask0.0.0.0匹配
- 将数据包发送到Gateway172.27.0.1所在的设备
- 172.27.0.1先将数据包套一层在其本地路由表记下(同一局域网)来时mac地址(数据链路层)以保证原路返回,同时改变源mac为自己但不改变源ip以继续下一跳的步骤并找到最终目标(如果涉及到NAT网络地址转换则会留下网络地址转换记录,通常路由器自带的交换机都使用动态NAT,详细记录在NAT和DR及LVS笔记中)
- 将数据包发送到匹配的网关ip对应mac地址的设备
- 进入下一个网络重复这个步骤查到目标地址
再如ping 14.215.177.38(非同一局域网)
- 14.215.177.38 | 255.255.240.0 != 172.27.0.0 匹配失败
- 14.215.177.38 | 0.0.0.0 == 0.0.0.0 =》172.27.0.1 =》下一网络
- 重复此步骤直到找到14.215.177.38
结论
- TCP/IP协议(传输控制层)
- 下一跳机制(网络层(IP互联网端点间通信))(数据链路层(MAC同一局域网节点间通信))
关系
- 源端<->目标端口 (应用)
- 源IP<->目标IP (网络)
- 源MAC<->目标MAC (链路)