图解

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

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

网关是0.0.0.0或者*表示目标是本主机所属的网络,不需要路由
子网掩码和要访问的外网ip地址做二进制按位与得到网络号
当要访问一个外网地址如(62.135.99.23),用它与路由表中的每一条子网掩码做按为与运算,会发现只能匹配到第一列中的0.0.0.0,从而得到下一跳地址,这时候网络层的任务就完成了
链路层
arp -a // 查看mac地址
arp协议
目标MAC地址: FFFFFFFF
链路层通讯地址mac地址
经过链路层数据包会有三个地址
最外层是链路层的mac地址 是下一跳点给谁
在外里是这个包最终地址给谁
最后是最终到服务器的端口号
这个数据包每到一个机器上,mac地址就会改成当前节点的mac地址,直至找到最终目标
物理层
实验+总结
实验
先创建socket连接,之后才有应用层(http)的应用 类似Java中先调用new Socket() 一样
cd /proc/$$/fdexec 8<> /dev/tcp/www.baidu.com/80ll
可以观察到一个fd(描述符)为8的socket

使用http协议并输出到fd8
echo -e 'GET / HTTP/1.0\n' >& 8cat 0<& 8 // 查看获取的内容//如果中途超时了可以先把描述符删掉,重新试一下exec 8<& - // 关掉fd8
总结
一个http请求过程:先从传输控制层准备三次握手通过物理层建立连接,连接建立后,再把http请求传输过去,response数据再在应用层渲染成图形
ifconfig eth0:3 192.168.8.88/24 // 增加一块虚拟网卡 ifconfig可以看到route add -host 192.168.8.88 gw 192.168.150.13 // 添加一个路由数据,网关为192.168.150.13,目标为192.168.8.88
