Linux网络编程(一)基本原理

(一)网络模型与协议

大多数网络模型按(layer)的方式来组织以减少协议设计的复杂性。在分层网络模型中,每一层都为上一层提供一定的服务,而将如何实现本层服务的细节对上一层加以屏蔽(在初期的学习项目过程中,也不应该拘泥于细节)。上层只知道下层提供了什么功能以及对应功能的接口,而不关心下层是如何实现这些功能。分层的思想也是设计大型软件的一种重要思想,有些操作系统就是基于分层的思想设计和实现的

为确保使用不同硬件和底层协议构建的网络能够相互通信,ISO(国际标准化组织)制定了一套被称为OSI(开放系统互联)的规范。但由于种种原因,OSI模型始终没有得到广泛应用。当前普遍使用的是TCP/IP模型。几乎所有的互联网设备都支持TCP/IP协议。TCP/IP协议已经成为事实上的国际标准和工业标准。ISO模型和TCP/IP模型的层次划分与对比如图所示。

(二)地址

就像身份证一样,计算机必须要有一个唯一的标识来区分网络上的每台计算机以进行相互通信,也就是网络上的每台计算机都需要唯一的标识。常用的有两种:物理地址(例如网卡地址)和IP地址

(1)物理地址

对于以太网,物理地址就是一个48位的位串,且此地址在网卡的生产过程中就已经固定,不可更改,全球唯一。在Shell中输入ifconfigWindows Shell:ipconfig)可以查看本机的物理地址(不带参数的ifconfig命令可以显示当前启动的网络接口)。

[root@localhost Users]# ifconfig

这里使用的虚拟机网络适配器配置是NAT模式,并没有显示th0信息条目。

eth0 Link encap:Ethernet HWaddr 00:0D:87:9F:47:B8

这里的00:0D:87:9F:47:B8就是以16进制表示的48位(6字节)网卡地址,每个字节用冒号隔开。对于多块网卡,每块网卡代表计算机的一个网络接口,常称为多宿主计算机Multihomed Computer)。

(2)IP地址

TCP/IP协议能够使计算机之间进行与底层物理网络无关的通信,两台计算机位于不同的局域网内也能通过TCP/IP进行通信。由于物理地址依赖于底层网络,而不同的底层网络采用不同的物理地址,因此要使用与底层硬件技术无关的通用地址来标识网络上的每台计算机,这就是IP地址。

IP地址由32个bit位构成,分为两部分:网络ID(计算机所在的网络号)和主机ID(计算机所在的网络给该计算机分配的主机号)。

32位(4字节)的IP地址为了表示方便也是每个字节隔开,但是使用的是点号。例如,腾讯网(www.qq.com)的IP地址是202.205.3.195。一个字节能够表示的数的范围是0000000011111111*(即*0255)。所以,在理论上的IP地址范围是:0.0.0.0~255.255.255.255,但实际上有的地址是专有的,并不能用于标识计算机。

IP地址按一定的格式分成5类:A类、B类、C类、D类和E类。

  • A类地址使用8位作为网络地址,网络地址的第一位固定为0,其余24位作为主机地址。
  • B类地址使用16位作为网络地址,网络地址的第一、二位固定为10,其余16位作为主机地址。
  • C类地址使用24位作为网络地址,网络地址的第一、二、三位固定为110,其余8位作为主机地址。
  • D类和E类地址较少使用,并且D类与E类IPv4地址不区分网络地址与主机地址。
** A类IPv4地址** B类IPv4地址 C类IPv4地址 D类IPv4地址 E类IPv4地址
网络标志位 0 10 110 1110 11110
IP地址范围 1.0.0.0~127.255.255.255 128.0.0.0~191.255.255.255 192.0.0.0~223.255.255.255 224.0.0.0~239.255.255.255 240.0.0.0~247.255.255.255
可用IP地址范围 1.0.0.1~127.255.255.254 128.0.0.1~191.255.255.254 192.0.0.1~223.255.255.254
是否可以分配给主机使用
网络数量(个) 126 (27-2) 16384 (214) 2097152 (221)
每个网络中可容纳主机数(个) 16777214 (224-2) 65534 (216-2) 254 (28-2)
适用范围 大量主机的大型网络 中等规模主机数的网络 小型局域网 留给Internet体系结构委员会(IAB)使用【组播地址】 保留,仅作为搜索、Internet的实验和开发用

127.0.0.1是一个特殊的地址,它代指本机,可用于测试本机上的TCP/IP协议是否工作正常。

[root@localhost Users]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.092 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.093 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.088 ms
^C
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.048/0.080/0.093/0.019 ms

TCP/IP上的每台主机还有一个32位子网掩码,用于区分IP地址的网络号主机号。将IP地址与子网掩码进行按位“与”运算即得到IP地址的网络号(一台主机所处的网络的编号)。例如,一台主机的IP地址为222.197.168.0,对应的子网掩码为255.255.255.0,按位“与”运算后的结果为222.197.168.0,则这台主机所处于的网络的编号为222.197.168.0

222.197.168.0 # IP地址
255.255.255.0 # 子网掩码
222.197.168.0 # 该主机所处网络的网络编号

本版本的IP地址也称为IPv4。在2019年12月26日,是人类互联网值得纪念的一天,全球43亿个IPv4地址正式耗尽,而新版本的称为IPv6,使用一个128位 2 128 2^{128} 2128)的IP地址来标识一台计算机,很难被耗尽,在2020年应该会有大规模的实际应用。

(三)端口

网络地址可以唯一地标识每台网络中的计算机。一台计算机能够同时运行多个程序并访问网络是基本的需求。对于多个不同的应用程序,TCPUDP协议采用16位端口号来识别。一台主机上的不同进程可以绑定到不同的端口上,使这些进程都可以访问网络而互不干扰。

TCP/IP将端口号(一个16位的无符号整数,02^16,即065535)分为两部分

  • 一部分是保留端口(知名端口),范围是0~2^10-1,由权威机构规定其用途。
    • 编号为21的TCP端口由FTP协议专用;
    • 编号为80的TCP端口由HTTP协议专用;
  • 其余的为自由端口,用户进程可以自由申请和使用。

(四)IP协议

无论传输层使用何种协议,都要依靠IP协议来确定到达目的计算机的路由,是网络层最重要的协议。IP协议主要负责确定路由,当到达同一目的地有多条路由时,IP协议会选择一条最短路由来将数据分组传送到目的计算机。同时,IP协议还定义了一组规则,例如,有时目的地不可达或不存在,IP协议规定了在这种情况下何时丢弃传送中的数据分组。IP协议定义了数据单元格式(IP数据报),它由IP首部和数据两部分组成,IP数据报如图所示。

主要字段的含义如下:

  • 版本。表示该数据报采用的是哪个版本的IP协议。字段长度4位(IPv6为6位)。
  • 总长度。IP首部和数据的总长度。
  • 生存期。表示数据报在网络上的最大生存时间(Time to Live,TTL)。数据报每经过一个路由器,路由器将TTL值减1,当TTL值为0时,数据报将被丢弃,并且该路由器会向发送者返回一个ICMP超时报文,告知数据报被丢弃。TTL默认值是64,最大值是255
  • 协议。用于说明发送数据报所使用的协议。若0x06表示使用TCP协议,则0x11表示使用UDP协议。
  • 报头校验和。用于检查IP首部的完整性,只校验IP首部,不校验数据。
  • 源IP地址。发送数据报的源计算机IP地址
  • 目的IP地址。接受数据报的目的计算机IP地址
  • IP选项可选的字段,主要用于网络调试

(五)用户数据报协议UDP

在TCP/IP模型中,UDP协议位于网络层之上,应用层之下的传输层。UDP协议向应用程序提供一种面向无连接的服务,通常被用于不需要可靠数据传输的网络环境中。

UDP协议无需建立连接,应用程序采用UDP协议无需建立和维持连接。UDP协议不保证数据报按顺序、正确地到达目的地,这项任务由应用程序完成。UDP数据报首部格式如图所示。

UDP首部的各部分含义如下:

  • 源端口。发送UDP数据的源端口号。
  • 目的端口。接收UDP数据的目的端口号。
  • 长度。该字段表示包括UDP首部和数据在内的整个数据报的长度,单位为字节。
  • UDP校验和。该字段是根据IP首部、UDP首部和数据计算出的值,当该字段被设置为0x0000时,表明发送端计算机没有计算校验和。

(六)传输控制协议TCP

(1)TCP数据包的格式

TCP提供一种面向连接的、可靠的数据传输服务。TCP数据包的首部格式如图所示。

主要字段的含义如下:

  • 源端口。发送TCP数据的源端口。
  • 目标端口。接收TCP数据的目的端口号。

(2)使用TCP进行通信的过程

  1. 建立连接(“三次握手”)
    1. 连接的发起端(通常为客户端)向目标计算机(通常为服务器)发送一个请求建立连接的数据包。
    2. 服务器收到请求后,对客户端的同步信号作出响应,并发送自己的同步信号给客户端
    3. 客户端服务器端发来的同步信号进行响应。连接建立完成,就可以进行数据传输。
  2. 关闭
    1. 请求主机发送一个关闭连接的请求给另一方
    2. 另一方收到关闭连接的请求后,发送一个接收请求的确认数据包,并关闭它的socket连接。
    3. 请求主机收到确认数据包后,再发送一个确认数据包,告知另一方其发送的确认已收到,请求主机关闭它的socket连接。

(七)客户机/服务器模型

网络中的实际应用大多都可以归纳为客户机/服务器模型Clinet/Server模型、C/S模型),其中客户机是指请求服务的一方,服务器是指提供某种服务的一方。某些应用请求服务的同时也提供一定的服务,但拆开研究,这种应用也是基于C/S模型

C/S模型既可以使用TCP协议也可以使用UDP协议,还可以二者混合使用。在C/S模型中,通常服务器端的IP地址和端口号是固定的,客户端程序连接到服务器IP和端口。通常客户端的程序设计更为简单,而服务端由于要考虑多个客户端同时请求服务的问题,设计上相对复杂

你可能感兴趣的:(Linux网络编程(一)基本原理)