一、ip地址

ip地址简单来说就是用来描述网络上一个设备的所在位置。

二、端口号

端口号用于区分一个主机上不同的应用程序。

一个网络程序在启动的时候都需要绑定一个或多个端口号,后续的通信过程都需依赖端口来进行展开的。

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则(协议就只是表示一种约定,然而这种约定可以是任意的),之所以有统一的协议标准以便大家可以相互通信。

三、协议分层

网络通信是一个非常庞大的工作,其中会涉及到一系列非常繁琐,非常细节的工作,靠一个协议解决所有问题说明这个协议非常庞大。因此我们就需要对协议进行分类(把功能差不多的协议放到一起)、分层(上层协议调用下层协议,下次协议为上层协议提供支持,以避免跨层级所引起的混乱);另外上层协议不需要了解下层协议的细节(封装),我们可以灵活的调整替换某层协议。

协议分层就是为这些协议明确层级关系,避免跨层之间的交互,降低耦合,提高整个系统的稳定性。

协议分层有两种主要的方式:一种方式是OSI七层网络模型(目前只是在教科书中提到,在真实世界并没有对其进行应用),另一种是TCP/IP五层网络模型。
【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

  • 物理层:描述网络通信中的一些基础设施需要遵守的规范。(比如网口、网线是什么样的)
  • 数据链库层:负责相邻两个节点的数据如何传输。
  • 网络层:负责地址管理和路由选择。
  • 传输层:管理两个节点之间的数据传输,只关注起点和终点。
  • 应用层:简单来说就是这个数据被用来干什么。
    【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP
  • 对于应用程序来说:不同的应用程序使用不同的协议(当然也能是使用相同的协议)。
  • 传输层协议和网络层协议都是操作系统已经内置好的。
  • 驱动程序都是硬件厂商提供的,驱动程序会和系统内核进行适配,系统就可以进一步的通过驱动来操作硬件了。数据链路层和物理层一般就是由硬件和驱动程序搭配来进行提供的。

四、封装和分用

网络数据传输的基本流程总结起来就是:封装和分用

  • 应用层方面:首先QQ这个应用程序先从输入框中获取到输入的信息,并将其构成应用层数据报(当然这里是根据应用层协议去进行数据报构造的,构建的应用层数据报的过程是按照一定的格式进行字符串拼接的)。这里我们要知道不同的应用程序使用的应用层协议是不同的,而其中很多一部分的应用程序会自定义应用层协议。当应用层数据报准备好之后,应用程序就会调用传输层提供的接口,然后把上述的数据报交给传输层去进行处理。

  • 传输层方面:传输层的协议有很多,最主要的协议就是TCP和UDP。此处我们这里假设使用的协议是UDP。当应用层把应用层的数据传到了传输层之后,并交给UDP,UDP会把应用层数据当作一个字符串,并构造出UDP数据报,然后把UDP数据报进一步的交给网络层。
    【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

  • 网络层方面:网络层最主要的协议就是IP协议。IP协议会根据自己的格式来构造出IP数据报。IP协议并不关心IP数据报的载荷是啥,只是单纯的把IP数据报载荷当作一个字符串,在这个基础上拼接一个IP报头以获取更大的字符串。

【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

注意,源ip和目的ip都是在ip报头中,而源端口和目的端口都是在UDP报头中
一次通信往往包括这5个信息:源IP、目的IP、源端口、目的端口、协议类型。此五点称为网络通信的五元组

之后对数据进一步传输,即把数据传输到数据链路层。

  • 数据链路层:数据链路层比较重要的协议就是以太网协议。以太网(平时上网插入的一个网线,这根网线就遵守以太网协议)又会针对IP数据报进行进一步的封装,即在IP数据报的基础上加上数据头数据尾。以太网依然不关心载荷是什么,以太网只是把载荷当作字符串,进一步的拼接上枕帧头帧尾以构造成以太网数据帧。至此,上述的数据还需要交给物理层。

【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

  • 物理层:物理层这里就涉及到硬件设备了(比如网卡)。之前的以太网数据帧本质上是二进制的数据,这个时候硬件设备就需要对上述的数据进行转换(由物理层的这些设备把上述的数据转换称光信号、电信号、电磁波等)

现在来看接收方(即主机B)的情况:

  • 物理层:硬件设备(如网卡)接收到光信号、电信号、电磁波。需要把接收到的信号解调(调制:就是把我们要传输的信息放到光电信号中解调:就是把光电信号中的信息提取出来;还有一个叫做调制解调器【俗称猫🐱】,调制解调器就是负责调制和解调的硬件设备:光猫🐱就是针对光信号进行调制解调的),解调之后我们就可以得到0101这样的二进制数据序列,这个序列就是以太网数据帧。此时我们经过解调得到的信息就会交给上一层,即交给数据链路层。好了,下面来看数据链路层的方面。
  • 数据链路层:数据链路层得到来自硬件设备解调出来的信息之后,数据链路层的以太网协议就会按照以太网数据帧的格式对信息进行解析。解析之后,就来到了网络层。下面来看网络层。

【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

  • 网络层:ip协议会对从数据链路层那里得到的数据报进行解析(去掉ip报头,取出载荷部分的信息并将其交给传输层),好了现在就来到了传输层。

【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

  • 传输层:传输层会根据ip报头中的字段就知道当前这个载荷是一个UDP数据报,并将该数据报交给UDP处理。然后UDP也会针对这个数据报进行解析(即去掉报头,取出载荷),然后进一步交给应用程序。好了,现在来到了应用程序层。
  • 应用程序层:UDP报头中有一个字段是目的端口,然后根据目的端口找到关联的应用程序,然后把数据交给应用程序即可。此时QQ程序就会按照QQ的应用层协议对数据进行解析,进一步把这里的数据显示到界面上。更进一步的此时我们的QQ头像就一直进行闪烁。

五、总结

  • TCP/IP五层协议:应用层(对应应用程序)、传输层(两点之间的传输)、网络层(规划路线)、数据链路层(负责两个相邻节点之间的传输),物理层(描述硬件设备),其中传输层会为应用层提供API,我们如果要编写一个具体的网络程序,此时就会经常使用到传输层的API。
  • 封装和分用:从上到下依次添加报头的过程称为封装。从下到上依次解析报头的过程称之为分用。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!
【网络编程】网络通信基础——简述TCP/IP协议-LMLPHP

12-24 12:07