TCP/IP协议栈是一系列协议的总和,是构成网络通信的核心骨架,它定义了电子设设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP协议采用4层结构,分别是应用层、传输层、网络层和网络接口层,每一层都呼叫它的下一层所提供的协议来完成自己的需求,下层的事情不用我们操心;
当通过http发起一个请求时,应用层、传输层、网络层和网络接口层的相关协议依次对该请求进行包装并携带对应的首部,最终在接口层生成以太网数据,以以太网数据包通过物理介质(双绞线、光纤、无线电波)给对方,对方接收到数据包后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给程序处理。
问题1:在网络接口层以太网如何来识别收方身份呢???
以太网协议规定,接入网络的设备都必须安装网络适配器,即网卡,数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所含的MAC地址,MAC地址是每一块网卡的身份识别,如同身份证,具有全球唯一性。有了MAC地址后,以太网采用广播形式,把数据包发送给该子网内的所有主机,子网内的所有主机在接受到这个包后,都会和再读取首部里的目标MAC地址,然和和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃。
问题2:发送者如何知道接收者的MAC地址???
ARP协议,即地址解析协议,是根据IP地址获取MAC地址的一个网络协议,其工作原理:ARP首先会发送一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包还会在链路层进行在再次包装,生成以太网数据包,最终由以太网广播给子网内的主机,每一台主机都会接收这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃这个数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会返回MAC地址与对应的IP地址存入本机ARP缓存中并保留一定的时间,下次请求时直接查询ARP缓存以节约时间。
问题3:发送者如何知道接收者和自己同属一个子网???
MAC地址只与产商有关,与所处的网络无关,所以无法通过MAC地址来判断两台主机是否属于一个子网。
因此,网络层引入了IP协议,制定了一套新地址,这套地址就是IP地址。
IP地址现在有两个版本,分别是IPv4和IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面代表网络地址,后面地址代表该主机在局域网中的地址。如果两个IP地址在同一个子网内,则网络地址一定相同,为了判断IP地址中的网络协议,IP协议还引入了子网掩码,IP地址与子网掩码按位与运算就得到网络地址。由于发送者和接受者的IP地址是已知的(应用层的协议会传入),因此我们只要通过子网掩码对两个IP地址进行与运算就能判断双方是否同在一个子网中。
问题4:如果接收者和自己不在同一个子网中,数据包如何发送给对方???
如果不在同一个子网中,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是以广播形式将数据包发送给接收方。
网络接口层:主要工作是对电信号进行分组并形成具有特定意义的数据帧,然后以广播形式通过物理介质发送给对方;
**网络层:**主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由;
传输层:主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议保证数据传输的可靠性。
应用层:定义数据格式并按照对应的格式解读数据。
当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认双方的通信的应用程序;然后网络协议加上了双方的IP地址,确认了上方的物理地址;最后网络接口层加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播形式,通过传输介质发送给对方的主机。对于不同的网段,该数据包首先会转发给网关路由器,经过多次转发后,最终会被发送到目标主机。