Linux网络基础

这篇博客我们将初步讲解网络中的一些基本概念,为后续套接字编程和的学习和对网络进行一步的了解打下一定基础。

目录

1.网络发展背景

2.IP地址

2.1内容

2.2本质

3.端口

3.1内容

3.2本质

4.协议

4.1内容

4.2分层

5.网络字节序

5.1引入

5.2内容

1.网络发展背景

计算机在一开始被设计出来的作用是用于计算导弹弹道的,仅是一个简单的单机运算目的。但是随着计算机数量的增加,不可避免的便会产生一个新的需求,便是:计算机之间的数据交互。

于是网络的概念应运而生,同一网络下的计算机数据交互得以实现,进一步网络之间的串联形成了互联网,使得计算机之前的数据交互变得更加庞大和复杂。

2.IP地址

2.1内容

在计算机网络通信当中,我们必然是需要将每台计算机进行区分开来,否则数据交互漫无目的,无法实现通信。IP地址的提出便是用于标识每台计算机,将不同计算机区别。

在实际的网络通信当中,必然会存在两个要素:源端IP地址和目的端IP地址。这两份IP信息标识了数据交互的起点和终点,当数据从计算机发出到网络中的路由器,便会被辨识出该IP属于哪一个网络,并将具体数据发送到对应的目的端网络。

其中目标地址让网络通信明确目标网络,进行网络中路径规划;源端地址让目标网络清楚数据从何而来,便于数据回复时了解该发送到何处。

2.2本质

二者本质在ipv4中都是uint_32类型(无符号位的32位整型数字)的数据,在ipv6中是uint8_t ip[16]类型(128位整形)的数据。但是ipv6并不向前兼容ipv4,所以实际使用中直接使用ipv6标准通信,会导致之前基于ipv4的设备无法正常使用。

ipv4标准中IP地址数量实际使用不能满足所有需求,ipv6标准并不向前兼容,因此设计出两种技术来解决ipv4中IP地址数量不足使用的情况。

即DHCP技术:动态地址分配,当计算机上网时再为其分配地址;NAT技术:网络地址转化技术,主要用于私网的组建,私网中的大量主机可以在同一个公网中进行上网,节省公网的使用数量。

3.端口

3.1内容

上述中的IP地址是用来标识两台主机在网络通信中身份,而端口是用于一台主机上唯一标识网络通信进程的。在本台主机上的相关进程可以通过识别端口,来确定该数据交友那一个进程来处理。

因此,网络通信中需要传输的数据需要更进一步,不止需要传输源端IP和对端IP,来标识数据从源端主机发出到对端主机;还需要传输源端端口和对端端口,来标识该数据是由源端主机上的源端进程发出到对端主机上的对端进程。

于是我们对网络通信理解可以更深一步,它的本质实际上是两个不同主机上的不同进程在进行进程间通信。

3.2本质

端口的本质是一个uint16_t类型(无符号的16位整数)的数据。

4.协议

4.1内容

实际通信当中,不同主机的不同规格可能会导致数据发送接收到的内容不一致,所以设计协议来进行通信内容的规定。网络协议便是网络通信中的数据格式约定,不同的主机必须遵循相同的网络通信协议栈(一组通信),如此才可以实现实质上的通信。

4.2分层

按照网络通信的环境,设计者对于网络协议进行分层,不同的层次提供不同的服务,其中使用的协议和提供的接口实现了对整个通信环境的分层。

协议分层有一种OSI七层网络互联模型,分别是:应用层,表示层,会话层,传输层,网络层,链路层,物理层。但是OSI七层模型划分的情况过于细致,导致具体实现起来过于复杂。

于是在OSI七层网络模型的基础上,提出了TCP/IP五层协议,分别是:

  1. 应用层:负责应用程序之间数据沟通的格式约定,典型协议:HTTP,SSH,SMTP……
  2. 传输层:负责进程之间数据传输的格式约定,典型协议:TCP/UDP;
  3. 网络层:负责地址管理和路由选择,典型协议:IP协议;
  4. 链路层:负责相邻设备之间的数据交换,典型协议:ETH协议--以太网协议;
  5. 物理层:负责物理光电信号的传输,典型协议:以太网协议。

(图出处:《Linux网络编程》)

其中只有应用层中的协议只有我们自己可以定义并实现,对于应用层之后的传输层到物理层所有的协议都是已经被定义好了的,无法进行自定义,我们只能根据自己的需求来进行选择,最终交由操作系统完成。

5.网络字节序

5.1引入

在讲述网络字节序的内容之前,我们来简单回顾一下字节序的内容。字节序是CPU对内存中数据以字节为单位进行存取的顺序,它根据数据从低地址或是高地址开始存储的情况,分为小端字节序:低地址存低位;大端字节序:低地址存高位。

字节序所针对的数据类型都是存储单元大于1字节的数据类型,因为单字节序的数据存储是不用考虑字节序的。

5.2内容

字节序分类为大端和小端,这便意味着不同字节序的主机直接进行数据交互的话,必然伴随着数据二义性的问题。合理的通信必然需要保证发送数据和接受数据内容的一致性,所以在网络数据传输中,我们会使用一个统一的字节序来进行通信。

这个统一的字节序便是网络字节序,我们采用的是大端字节序。如此规定后,我们只需要考虑将自己的字节序转化为网络字节序的形式,并不需要关心对方的字节序内容,便可完成网络通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值