首先,对一些概念要有了解:
OSI七层模型:
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
TCP/IP五层/四层模型:
(物理层)
数据链路层
网络层
传输层
应用层
协议技术*
ARP/RARP/MAC(数据链路层),IP(网络层),TCP/UDP(传输层),Http/Https/DNS(应用层)
ARP :IP到MAC转换 RARP :MAC到IP的转换 MAC :网卡物理地址 IP :访问服务器所在的地址 域
名:http/https可以使用域名来访问,域名最后会转化为ip DNS :域名到IP转化,先查找本机DNS缓存
表(hosts文件),如果找不到,再向上查找上级dns服务器(DNS服务器是树形结构)
HTTP/HTTPS:(包含IP,可能包含域名)
发送端处理数据:封装(从上到下):
(1)应用层:浏览器将请求数据(ip)封装为http协议(如果没有带端口号,默认80端口)的数据(ip)
(2)传输层:tcp将前一个封装数据包再次封装为tcp数据包(ip+port) (3)网络层:ip协议再次封
装
(4)数据链路层:以太网技术,携带mac(系统将数据包发送到本机网卡),封装为数据帧
(5)请求端—>发送数据---->局域网主机
接收端处理数据:分用(从下到上)
(1)数据链路层:操作系统在网卡接收数据,系统解析接收到的数据报(处理数据帧)
(2)网络层:系统处理ip头
(3)传输层:系统处理tcp头(ip+port),知道端口号,知道对应的应用程序是哪个,系统将数据包
交给应用程序处理
(4)应用层:应用程序处理数据(根据协议)
**
局域网内发送数据*
1.没有路由器没有交换机
现在只知道目的ip,不知道目的mac,(本机ARP缓存表ip<---->mac映射关系),
(1)查找本机ARP缓存表,找到了就发送目的mac主机。
(2)如果找不到, 广播一条请求mac地址的数据(不是发送目的mac,是发送目的ip),局域网所有
主机都收到这条消息,检查自己ip和请求ip地址,不一致就丢弃,一致则说明是请求我, 响应我的mac
消息。
(3)请求方知道目的mac以后,再发送数据包(包含目的ip,目的port,目的mac)(局域网所有主机接收到该数据包,如果发现目的mac和自己不一致,就丢弃,如果一致,就处理数据)
2.有交换机没有路由器
发送端封装和接收端分用的过程一样
前置条件:
交换机(第二层交换机):只能转发数据,不能对数据进行解包分用,也不能封装,交换机本身也没有
ip,没有mac
交换机MAC地址转换表:转换IP和局域网MAC;交换机由多个端口号处理局域网主机数据报
(1)发送数据到交换机
(2)交换机处理数据:查看MAC地址转换表,如果有目的ip的mac,就直接发送;如果没有,就发送请
求mac的广播报,所有局域网主机都接收到,不是自己的ip,就丢弃,是我,就把我的mac发送给交换
机
(3)交换机更新MAC地址转换表
(4)知道了目的MAC, 发送数据
3.有交换机有路由器
发送端封装和接收端分用的过程一样
前置条件:交换机处理逻辑和之前一样
IP:分为网络号(前三位)+主机号(最后一位)
子网掩码:利用子网掩码可以判断一个ip是否是同一个局域网(按位与操作)
网关(路由器):路由的功能,路由表来实现。提供网关ip
局域网内所有主机配置子网掩码,网关ip
发送流程:
1.发送端封装数据报
2.将目的ip的网络号(IP前三位)和本机子网掩码(255.255.255.0)做位与操作,
结果与本机ip网络号进行比较(可以得出结论,目的ip和本机ip是否是同一个网段)
3.如果是同一个网段(走前一个有交换机,没有路由器的流程)
4.如果不是同一个网段,则本机不知道目的主机的mac,
需要发送数据到网关(路由器)来进一步处理
5.发送端---->网关(路由器):源主机中(源mac为本机mac,目的mac为路由器mac),数据发送到路由器,进行解包分用(源mac,目的mac取出来),并且封装(源mac修改为自己的mac,目的mac修改为接收端主机的mac)
6.网关(路由器)---->接收端:接收端接收到数据报,进行解包分用
广域网传输数据
前置条件:
1.发送端和接收端都在互联网上,接收端是主机(不能处于局域网),接收端目的ip为公网ip,发送端
可以处于局域网内部
2.接收端:接收端主机有局域网ip,接收端局域网所在的网关(路由器),存在私网ip和公网ip
3.NAT协议:将私网ip转换为公网ip
4.NAPT协议:将私网ip+源端口<------>公网ip+新的源端口(路由器创建的端口)
传输流程:浏览器访问百度http://www.baidu.com
1.本机封装的步骤和之前一致(DNS,HTTP,TCP,IP,数据帧),通过子网掩码发现目的ip不在同一
个网段,需要发送到网关(路由器)进一步处理
2.网关(路由器):解包分用,重新封装(源mac为本路由器mac,目的mac为下一个设备mac,源ip
由发送端私网ip修改为本路由器公网ip,源端口号由发送端应用程序端口号修改为路由器端口号,目的
ip+目的端口不变)。路由器建立端口映射(NAT+NAPT)
3.下一个设备处理数据:解包分用,重新封装(源mac修改为自己mac,目的mac修改为下一个设备
mac)
4.接收端接收:发现目的ip和本机ip一致,解包分用,和之前流程一致
5.接收端响应数据:源ip为接收端主机公网ip,源端口为接收端应用程序端口号,目的ip为路由器公网
ip,目的端口为路由器映射端口,源mac目的mac和之前发送流程变化方式是一样的
6.路途中的设备不停的解包分用,重新封装数据报(源mac修改为自己的,目的mac修改为下一个设备
mac)
7.路由器接收到数据报,发现目的ip和自己公网ip一致,就处理数据(目的端口绑定的程序处理),把
目的ip修改为发送端主机私网ip,端口号修改为发送端应用程序端口号(NAT+NAPT)
【扩展】目的主机不能处于局域网内:刚开始接收数据时,只能由接收端路由器公网ip+路由器端口号
作为目的ip+目的端口,但是刚开始没有建立局域网内主机的映射关系,所以找不到具体是局域网内哪
个主机(ip)哪个应用程序(端口)