osi七层模型
- 应用层
面向用户,是接口层面的,用户可以调用接口的能力和服务器进行通信 - 表示层
通信的数据是如何表示的,分段,分句,或者建立了一定的数据结构 - 会话层
session是如何保持的,何时会建立,何时关闭 - 传输控制层
如何建立连接,传输应该成功还是失败 - 网络层
数据在设备中如何路由,如何找到下个节点,如何到达指定ip - 链路层
点与点之间如何进行通讯,ip之下具体到物理机上控制数据帧的传输 - 物理层
具体到物理上如何传输,使用光线,电缆,无线电等发送 0101… 的二进制数据
命令
查看当前主机端口的连接情况
netstat -natp
查看电脑的0号网卡
cat /etc/sysconfig/network-scripts/ifcfg-eth0
查看路由表
route -n
查看arp表
arp -n
一个小思考:TCP诞生时,主机可以通过哪些方式进行通信?
每台主机把其他主机的拓扑图储存在自己的内存中,向某个主机建立连接时,在拓扑中计算最短的路径,通过此路径进行通讯。这样通讯的速度会很快,缺点很明显,拓扑图太大,查找时会很慢。
真实的网络请求如何发送?
模拟发送给 www.baidu.com
每个电脑都有一个路由表,根据路由表从上到下一条一条去比对,将源地址ip 与 genmask掩码按位与,如果等于destination,那么下一跳就发给这个destination。如果不匹配,那么最终会匹配上最后一条,发给默认网关gateway
另外可看出,gateway 0.0.0.0 的含义就是这个记录是局域网中的,不用进行下一跳,直接通过交换机发送即可
我们再思考一个问题:找到下一跳之后源地址应该改成 destination 吗?
不应该,如果这样的话到了destination的主机后,就无法知道源ip了。如果不更换的话,也有问题,因为路由器就不知道下一跳的destination了。
这里找到了下一跳的地址,网络层的任务就完成了,此时应该去数据链路层,根据arp协议找mac地址进行真正的数据发送
接下来开始说arp
arp表中的一条记录(目标ip,目标mac地址)
我们可以根据刚才查到的下一跳中的ip,再去arp表中找到物理机真正的地址(mac),然后进行发送,然后就到了物理层中0101的二进制发送。
一个新问题,一台新的机子刚开机时arp表中是空的,要怎样得到下一跳的mac地址
如下图,红色计算机想要获取中间路由器的mac,需送一条arp请求,arp内容为蓝色块(目标地址为FFFFFF,目标IP为路由器左侧的网关192.168.1.1,自己的mac地址)
请求先打到交换机上,交换机看到 FFFFFF,会把这个请求当作广播,发给其他所有设备。计算机2接收到后,将目标ip和自己的进行匹配,发现不匹配,直接丢弃该数据包。
路由器接到广播的后,发现目标地址就是自己,那么需要响应自己的mac地址,回发给红色计算机,回发的包大概长这样(自己的mac,红色计算机的mac)。
这样红色计算机就能拿到路由器的mac了。