您的位置:首页 > 理论基础 > 计算机网络

学习理解TCP/IP四层模型

2017-11-30 21:27 197 查看

很早之前就接触过TCP/IP协议,但是不论对ISO七层模型还是四层模型的理解都浮于表面,经过近期的项目折磨对TCP/IP协议的理解清晰了一些,本文目的是记录这个学习的过程,顺便将杂散的知识点梳理成体系。

_ **TCP/IP四层模型简介

_ **用户数据是怎样从本地发送到目的主机的

_ **项目相关的几点奇怪的事实


## TCP/IP四层模型简介

> TCP/IP提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中[7][8],常被视为是简化的七层OSI模型。—— <a href="https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F" target="_blank"> [ 维基百科 ]

- 应用层

- 传输层

- 网络互联层

- 网络接口层


## 用户数据是怎样从本地发送到目的主机的

首先,IP+端口号可以唯一确定某一个进程。

我的理解是所谓的应用层、传输层、网络层和链路层只是对用户数据做不同阶段处理的抽象。

用户数据首先加上TCP首部,TCP首部包含的最重要的信息是源端口号和目的端口号(加上其他的一些控制信息),加上TCP首部的数据包叫做段,端口号说明了数据来自哪个进程,这个阶段就称为传输层。

之后在TCP的段之前再加上IP首部,IP首部包含的最重要的信息是源IP地址和目的IP地址(加上其他的一些控制信息),加上IP首部后的数据包称为数据报,IP地址说明了数据来自网络上的哪个节点,这个阶段称为网络互联层。

再之后在IP数据报之前再加上以太网首部,以太网首部包含的最重要的信息是源MAC地址和目的MAC地址(再加上其他的一些控制信息),加上以太网首部的数据包称为以太网帧,源MAC地址和目的MAC地址说明了数据包从这个网卡发送到那个网卡,这个阶段称为MAC层;以太网帧会再经过电平转换等操作,然后发送到物理传输媒介上(光纤、网线等)这个阶段称为物理层;MAC层和物理层也被合称为网络链路层

当以太网帧到达目的MAC地址的网卡后,又依次拆掉以太网首部、IP首部和TCP首部,将数据发送到目的端口(进程)中。

由于理解不够深入,这个描述的过程肯定会有很多不准确甚至错误的地方,希望及早被发现。


在这个过程中,本地即源IP地址、源端口和源MAC地址肯定是已知的,目的IP地址和目的端口也应该是已知的,但是目的MAC地址,如果是初次连接通信本机肯定是不知道的,因此在IP层会向网络发送一个ARP请求,ARP请求报文中包括源MAC地址和源IP地址,目的IP地址,经过一些列转发后目的主机会将自身的MAC地址和IP地址作为源MAC地址和源IP地址,将接收到的ARP请求报文中的源MAC地址和源IP地址作为目的MAC地址和目的IP地址,打包作为ARP回复报文发送给本地主机。这样我们就知道了目的主机的MAC地址,顺利形成以太网帧。


## 项目相关的几点奇怪的事实

项目情景需要完成pc和FPGA的通信。

整个信号通路的顺序是:PC网卡->网口->PHY->FPGA

PC的IP地址和MAC地址不存在问题,但是FPGA的IP地址和MAC地址倒有点意思,全靠Verilog语言自己写入。

第一次通信的时候PC的arp高速缓存中没有FPGA的IP地址和MAC地址的映射,因此需要先发送一个arp请求,FPGA接收到ARP请求后,将自己的MAC地址写入ARP回复报文中发送给PC,这样PC网卡的ARP高速缓存中便将FPGA的MAC地址(48位)和FPGA的IP地址映射关系记录下来,下次再通信的时候就不需要再发送ARP请求了。








阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: