关注Service Mesh,下一代微服务

图解

图片.png
如图所示,上层只是规范了协议,最终机器是物理层之间打交道。
前三层是用户态,后四层是内核态。

数据包

图片.png

一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。
具体说:
物理层:网卡,网线,集线器,中继器,调制解调器
数据链路层:网桥,交换机
网络层:路由器
网关工作在第四层传输层及其以上
集线器是物理层设备,采用广播的形式来传输信息。
交换机就是用来进行报文交换的机器。多为链路层设备(二层交换机),能够进行地址学习,采用存储转发的形式来交换报文.。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率。
交换机和路由器的区别

应用层(表示层、会话层)

http,https,ftp,smtp(邮件)

传输控制层

TCP、UDP
三次握手
1 (client)发起连接
2(service)确认收到
3 (client)确认收到
四次分手
1 (client)我要断开连接
2 (service)我收到了
3(service)我也想断开连接
4(client)收到了
三次握手,四次分手为一个最小粒度,不可分割
解释:比如三次握手中
1 client1 -> service1
2 service1 -> client1
3 client1 ->service2
这就是分割了
ubuntu中可用netstat -natp 查看socket
图片.png
socket : Local Address + Foreign Address

网络层(就是找到下一跳)

下一跳机制

图片.png
网关是0.0.0.0或者*表示目标是本主机所属的网络,不需要路由

子网掩码和要访问的外网ip地址做二进制按位与得到网络号
当要访问一个外网地址如(62.135.99.23),用它与路由表中的每一条子网掩码做按为与运算,会发现只能匹配到第一列中的0.0.0.0,从而得到下一跳地址,这时候网络层的任务就完成了

链路层

  1. arp -a // 查看mac地址

arp协议
目标MAC地址: FFFFFFFF
链路层通讯地址mac地址
经过链路层数据包会有三个地址
最外层是链路层的mac地址 是下一跳点给谁
在外里是这个包最终地址给谁
最后是最终到服务器的端口号
这个数据包每到一个机器上,mac地址就会改成当前节点的mac地址,直至找到最终目标

物理层

实验+总结

实验

  1. 先创建socket连接,之后才有应用层(http)的应用 类似Java中先调用new Socket() 一样

    1. cd /proc/$$/fd
    2. exec 8<> /dev/tcp/www.baidu.com/80
    3. ll

    可以观察到一个fd(描述符)为8的socket
    图片.png

  2. 使用http协议并输出到fd8

    1. echo -e 'GET / HTTP/1.0\n' >& 8
    2. cat 0<& 8 // 查看获取的内容
    3. //如果中途超时了可以先把描述符删掉,重新试一下
    4. exec 8<& - // 关掉fd8

    总结

    一个http请求过程:先从传输控制层准备三次握手通过物理层建立连接,连接建立后,再把http请求传输过去,response数据再在应用层渲染成图形

    1. ifconfig eth0:3 192.168.8.88/24 // 增加一块虚拟网卡 ifconfig可以看到
    2. route add -host 192.168.8.88 gw 192.168.150.13 // 添加一个路由数据,网关为192.168.150.13,目标为192.168.8.88