交换机的作用是将将所有电脑连接在同一个网段内,那么该网段内的电脑就可以实现相互通讯
A电脑 IP:192.168.1.1 B电脑 IP:192.168.1.2
假如A电脑想要PING通B电脑时,先向交换机发送一个包,里面包含要通讯的IP地址,然后交换机会通过其网段的广播
端口向网段内的所有机器广播该数据包,只有对应IP地址的机器会反馈一个包(包中包含该IP对应的mac地址),(其余
的机器会将该包给丢弃),在交换机得到对应ip反馈的包后,再次传递给A电脑,然后A再次PING B电脑时,就不再发送
给所有机器,而是直接找到ip对应mac地址的机器
ping命令用的是ICMP协议
而A机器ping通B之前的寻址协议是ARP协议
计算机终端+交换机+路由器的连通模式:
此处计算机为A ip(192.168.1.1 ) 交换机为B 路由器为C和D和E 交换机F 计算机G ip(192.168.2.1)
结构如下
A —-> B —-> C —-> D —-> E )—-> F —-> G
计算机 交换机 路 由 器 交换机 计算机
第一步,当A要ping不同网段中的B时,首先通过ARP协议发送请求,获取默认网关的MAC地址
第二步,通过网关的mac地址,用icmp协议向路由器的左端发送一个向B计算机的请求,然后通过配置本路由器的左右两个以太网接口
将请求从左向右(即从192.168.1.x网段向192.168.2.x万端跨越)传递,
第三步,路由器部分先完成,信号传递至B计算机,然后返回一个信号,
第四步,通过B计算机的网关,与发送时一样的过程,获取B计算机网段内的交换机的mac地址后再次
从路由器右侧向左传递,最终A计算机接受到B的返回信号
需要注意的是,在从A到B网络ping通前,1,需要先配置计算机的网关为路由器与自己连接最近的ip,
2,路由器需要将左右两侧网卡分别配置好对应网段的转发协议 (对于两个路由器间的通讯)
3,比较需要注意的是路由器的发送和返回时都应该配置好协议,以供来回网络通路
4,A ping F 通过C路由器时,A通过ARP获得到的C的mac地址将数据传递给C,由C继续向下传递
过程与A 传递给 C相同 也就是说,A的 目的ip 是G,但是A的 目的mac 是最近的C路由器
每次传递过程中,目的ip不变,目的mac在进过不同的ip时会发生更新
总结: 每一块网卡只有一个惟一的mac地址,mac地址共6个字节,前三个表示供应商,后三个标识序列号
路由器的作用是连接两个不同的网段 如 192.168.1.x 和 192.168.2.x 使得他们之间可以通讯
这是因为路由器相当于有两块网卡,有两个mac地址,可以分别接入两个网段,然后通过自身内部数据传递,
从而完成两个网段之间的通信
在A ping G的单向过程中,mac地址随着在两个设备传递数据发生改变,即传递到第二个设备时
第二个设备的dest MAC 即目标MAC会变成第三个设备的mac地址,第二个设备的src MAC 就变成第一个设备的右ip的mac地址
在此过程中,各设备的desc ip即目标ip不变,即G电脑的ip
整个过程在数据到达G 开始返回时 改变,过程与发起请求时(A --> G 时)相同
ip:标记设备的逻辑地址,
mac:标记设备的实际地址,用于数据转发时相邻的通讯
netmask(子网掩码):与ip相逻辑与,共同确定所在网段
gateway(网关):当发送的ip不在同一个网段内时,将这个数据通过网关发送出去
整个过程可类比为:
我在第一排,要告诉最后一排同学一个消息,首先要告诉第二排(mac),第二排会告诉第三排(mac),
如此循环,最终消息会到达最后一排,在此过程中,大家的目的都是告诉最后一个同学(即ip不变)
传递过程中,消息在不同排数间传递,(即mac发生改变)
保存过程文件路径 :F:\APP Install\Cisco Packet Tracer 7.0\saves\the whole network process.pkt
访问百度的完整过程:(完全第一次访问时的情况)
在A电脑 地址栏输入www.baidu.com
假如A本地没有网关,访问失败
1,要解析出baidu.com的对应ip地址,过程如下
1,先知道默认网关的mac,
1,使用arp协议,获得默认网关的mac地址,
2,返回mac地址给访问发起者A
2,组织数据发送给默认网关(目标ip为A的dns服务器,但是mac地址是默认网关的mac地址,此后 各设备之间目的ip不变,目标 mac在每次数据传递时发生更新,更新为下一个要连接的设备mac)
3,默认网关拥有转发数据的能力,将数据转发给路由器
4,路由器根据自己的路由协议,选择一条最合适的较快路径,转发数据给目的网关(此时相当于到达了dns服务器的网关路由器)
5,目的网关(dns服务器所在网关)将数据转发给dns服务器,
6,请求到达了DNS服务器,Dns服务器解析出baidu.com对应的ip地址后,原路返回ip给A电脑(通过dns服务器网关,目的ip为A电脑
ip地址,目标mac为网关的mac,但目的mac在每次数据传递后发生更新,更新为下一个要连接的设备mac)
7,返回到A电脑,A获取得到baidu,com对应的ip地址
2,得到了baidu.com的ip地址后,会发送tcp的三次握手,建立起连接(细节和前面相同)
3,使用http协议发送请求数据给web服务器,
4,web服务收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器
5,浏览器接收到数据后,通过浏览器自己的渲染功能来显示这个网页
6,浏览器关闭Tcp连接。即4次挥手
整个访问过程完成
三次握手过程:
发起请求:
由客户端发起请求,请求会携带一个syn的值到服务器,
响应请求:
服务器在接受请求和携带的值后会返回该值并且新增一个名为ack(确认码)的值,
确认响应:
当服务器返回的值被客户端接受后,客户端将返回的ack确认码加一后再次请求服务器,若请求接通到达服务器则
表明tcp连接已经建立(在确认响应的信号发出后,往往会直接在后边跟随一个数据请求,当确认响应的信号被服务器接收后,
后边跟随的数据请求包也能紧接着迅速到达服务器,然后服务器会先返回这次请求的ack码。再把请求要的内容返回,
请求内容返回后,也先返回给服务器一个ack码,再发起下一次的数据请求,如此循环。。。
也就是说,ack确认码包总是先于响应数据包发出,不论客户端服务器)
此后便可开始客户端与服务器的数据交互,需要注意的是:在tcp中,如果有一方接受了另一方的数据,
一定会返回ack确认码给发送方 以表示收到信息
而在UDP中没有这个过程,这就导致了tcp稳定,而udp不稳定
断开连接四次挥手过程:
在断开连接前,假设服务端和客户端以套接字的方式连通,此时双方都有一个socket用以连接
发起方发起请求(我要断开了):客户端断开连接。即socket.close(),然后会发送fin和ack码给服务端,
回应方回应请求(我知道了):服务端接到fin码后回应给客户端一个ack确认码
回应方发起请求(我也要断开了):服务端此时也要断开对应套接字的连接。socket.close() ,同样的,服务端也会发送一个seq给客户端
发起方回应请求(好的,断开吧):在接收到服务器端断开连接的请求后,返回一个ack确认码,至此连接完全断开