Linux网络编程(一)——基础篇

news2024/9/24 23:24:15

目录

一、网络结构模式

(一)C/S结构

(二)B/S结构

二、MAC地址

三、IP地址

(一)IP地址编址方式

A类IP地址

B类IP地址

C类IP地址

D、E类IP地址

特殊的网址

IP分类的优缺点

(二)子网掩码

如何划分网络号、主机号?

如何实现子网划分?

(三)IP与MAC的关系

(四)无分类地址CIDR

(五)公有IP地址与私有IP地址

(六)IPv6基本认知

IPv4 首部与 IPv6 首部

四、端口

(一)端口类型

周知端口(Well Known Ports)

注册端口(Registered Ports)

动态端口/私有端口(Dynamic Ports / Private Ports)

五、网络模型

(一)OSI七层参考模型

(二)TCP/IP四层模型

六、协议

(一)常见的协议

(二)UDP协议

(三)TCP协议

(四)IPv4协议

 (五)以太网帧协议

(六)ARP协议

七、封装

八、分用


一、网络结构模式

(一)C/S结构

C/S结构即为服务器-客户机,即Client-Server(C/S)结构,是一种软件结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。

那么其优点主要体现于:

  • 能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以C/S结构客户端想要速度快。

  • 操作界面漂、形式多样,可以充分满足客户自身的个性化要求。

  • C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程。

  • 安全性较高,C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多次校验,提供了更安全的存取模式,对信息安全的控制能力很强,一般高度机密的信息系统采用C/S结构适宜。

那么它也有一些缺点,其实可以理解为我们在我们的电脑上装了一个软件,安装软件就是一种C/S结构的体现,那么这样也可以可想而知它的缺点:

  • 客户端需要安装专用的客户端软件。首先涉及到了安装的工作量,其次任何一台电脑出现问题,如病毒、硬件损坏,都需要进行安装或维护,也就是不断的进行打补丁。系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。

  • 对客户端的操作系统一般也会有限制,不能够跨平台,比如Linux与windows的软件安装包都不一样。

(二)B/S结构

B/S结构,即Browerser/Server(浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装了一个浏览器,如Firefox或者是Google,服务器安装了SQL Server、Oracle、MySQL等数据库。浏览器通过Web Server同数据库进行数据交互。这就好比我们的百度网站了。

那么其优点如下:

  • B/S架构最大的优点在于其拥有成本低、维护方便、分布性强、开发简单,可以不用安装任何专门的软件就能实现在任何地方进行操作,客户端零维护,系统的扩展非常容易,只要有一台能上网的电脑就行了。

缺点也是有的:

  • 通信开销大、系统和数据的安全性比较难保障。

  • 个性特点明显降低,无法实现具有个性化的功能要求。

  • 协议一般是固定的,比如http/https

  • 客户端服务器端的交互是请求-响应模式,通常动态刷新页面,响应速度明显降低。

二、MAC地址

我们通常会听说网卡这个东西,网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,又称为网络适配器或网络接口卡NIC。其拥有MAC地址,属于OSI模型的第二层,它可以使得用户通过电缆或无线相互连接。每一个网卡都有一个称为MAC地址的独一无二的48位串行号。网卡的主要功能:数据的封装以及解封装;链路管理;数据编码与译码。这其实也是底层硬件所做的操作了。

MAC地址(Media Access Control Address),翻译为媒体存取控制位址,也称为局域网地址、以太网地址、物理地址或硬件地址,它是一个用来确认网络设备位置的位址,这个东西是由网络设备制造商生产时烧录在网卡中。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。MAC地址用于在网络中唯一标识一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址

MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制00-16-EA代表是网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界里是唯一的,形象的说,MAC地址在世界里是唯一的。

三、IP地址

IP协议是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生成的计算机系统,只要遵守IP协议就可以与因特网互连互通。各个厂家生产的网络系统和设备,比如以太网、分组交换网等,他们互相之间不能通信,不能互通的主要原因是因为他们所传送数据的基本单元(技术上称为“帧”)的格式不同。IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据报”格式,这种转换是因特网的一个最重要的特点,使得所有各种计算机都能在因特网上实现互通,即具有开放性的特点。正是因为有了IP协议,因特网才可以发展为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫作“因特网协议”。

IP地址(Internet Protocol Address)是指互联网协议地址,又称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是四个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是 0~255 之间的十进制整数。

例:点分十进IP地址(100.4.5.6),实际上是 32 位二进制01100100.00000100.00000101.00000110。

IP地址属于TCP/IP模型中的第三层,也就是网络层。那么网络层的主要作用顾名思义就是实现主机与主机之间的通信,也叫点对点(end to end)通信

 

 使用命令ping 127.0.0.1后会发现一个TTL的参数,这个参数的含义是规定在有限的次数下进行路由器的查询,每当经过一个路由器,则-1,如果最后还找不到,则说明连接不上。

(一)IP地址编址方式

最初设计互联网络时,为了便于寻址以及层次化构造网络,每个 IP 地址包括两个标识码(ID),即网络ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID 与其对应。Internet 委员会定义了 5 种 IP 地址类型以适合不同容量的网络,即 A 类~ E 类。 其中 A、B、C 3类(如下表格)由 InternetNIC 在全球范围内统一分配,D、E 类为特殊地址。可能大家都会觉得这些IP地址是会被用完的,后续会介绍更换地址的技术NAT可以使得计算机数超过最大值。

A类IP地址

一个 A 类 IP 地址是指, 在 IP 地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示 IP 地址的话,A 类 IP 地址就由 1 字节的网络地址和 3 字节主机地址组成,网络地址的最高位必须是“0”。A 类 IP 地址中网络的标识长度为 8 位,主机标识的长度为 24 位,A类网络地址数量较少,有 126 个网络,每个网络可以容纳主机数达 1600 多万台。

A 类 IP 地址 地址范围 1.0.0.1 - 126.255.255.254(二进制表示为:00000001 00000000 0000000000000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。 A 类 IP 地址的子网掩码为 255.0.0.0,每个网络支持的最大主机数为 256 的 3 次方 - 2 = 16777214 台。

B类IP地址

一个 B 类 IP 地址是指,在 IP 地址的四段号码中,前两段号码为网络号码。如果用二进制表示 IP 地址的话,B 类 IP 地址就由 2 字节的网络地址和 2 字节主机地址组成,网络地址的最高位必须是“10”。B 类 IP地址中网络的标识长度为 16 位,主机标识的长度为 16 位,B 类网络地址适用于中等规模的网络,有16384 个网络,每个网络所能容纳的计算机数为 6 万多台。 B 类 IP 地址地址范围 128.0.0.1 - 191.255.255.254 (二进制表示为:10000000 00000000 0000000000000001 - 10111111 11111111 11111111 11111110)。 最后一个是广播地址。 B 类 IP 地址的子网掩码为 255.255.0.0,每个网络支持的最大主机数为 256 的 2 次方 - 2 = 65534 台。

C类IP地址

一个 C 类 IP 地址是指,在 IP 地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示 IP 地址的话,C 类 IP 地址就由 3 字节的网络地址和 1 字节主机地址组成,网络地址的最高位必须是“110”。C 类 IP 地址中网络的标识长度为 24 位,主机标识的长度为 8 位,C 类网络地址数量较多,有 209 万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台计算机。 C 类 IP 地址范围 192.0.0.1-223.255.255.254 (二进制表示为: 11000000 00000000 0000000000000001 - 11011111 11111111 11111111 11111110)。 C类IP地址的子网掩码为 255.255.255.0,每个网络支持的最大主机数为 256 - 2 = 254 台。

D、E类IP地址

D 类 IP 地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是 “1110”,范围从224.0.0.0 - 239.255.255.255。D、E类现在是没有主机号的,不可用于主机IP,D类常被用于多类,E类是预留的分类,暂时未使用。

多播地址用于将包发送给特定组内的所有主机

特殊的网址

  • 每一个自检都为0的地址(0.0.0.0)对应于当前主机。

  • IP地址中的每一个字节都为1的IP地址(255.255.255.255)是当前子网的广播地址。广播地址用于在同一个链路中相互连接的主机之间发送数据包。广播地址也可以分为本地广播以及直接广播两种:

    在本网络内广播的叫作本地广播:

 

 在不同网络之间的广播叫作直接广播:

  • 那么我们就可以总结出:主机号全为1指定某个网络下的所有主机,用于广播;主机号全为0指定某个网络进行接收。但是直接广播有一定的安全问题,所以多数情况下会在路由器上设置为不转发。

  • IP地址凡是以11110开头的E类IP地址都保留用于将来和实验使用。

  • IP地址中不能以十进制127作为开头,该类地址中数字127.0.0.1127.255.255.255用于回路测试,如127.0.0.1可以代表本机IP地址。

IP分类的优缺点

  • 优点:不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。

  • 缺点:同一网络下没有地址层次;不能很好的与现实网络匹配(个数差距有点大)。这些缺点可以使用技术无分类地址CIDR来解决。

(二)子网掩码

如何划分网络号、主机号?

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合 IP 地址一起使用。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分

子网掩码是在 IPv4 地址资源紧缺的背景下为了解决 lP 地址分配而产生的虚拟 lP 技术,通过子网掩码将A、B、C 三类地址划分为若干子网,从而显著提高了 IP 地址的分配效率,有效解决了 IP 地址资源紧张的局面。另一方面,在企业内网中为了更好地管理网络,网管人员也利用子网掩码的作用,人为地将一个较大的企业内部网络划分为更多个小规模的子网,再利用三层交换机的路由功能实现子网互联,从而有效解决了网络广播风暴和网络病毒等诸多网络管理方面的问题。

在大多数的网络教科书中,一般都将子网掩码的作用描述为通过逻辑运算,将 IP 地址划分为网络标识(Net.ID)主机标识(Host.ID),只有网络标识相同的两台主机在无路由的情况下才能相互通信。

根据 RFC950 定义,子网掩码是一个 32 位的 2 进制数, 其对应网络地址的所有位都置为 1,对应于主机地址的所有位置都为 0。子网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意 IP 地址是否是本网段的,从而正确地进行路由。网络上,数据从一个地方传到另外一个地方,是依靠 IP 寻址。从逻辑上来讲,是两步的。第一步,从 IP 中找到所属的网络,好比是去找这个人是哪个小区的;第二步,再从 IP 中找到主机在这个网络中的位置,好比是在小区里面找到这个人。也就是使用这个掩码去进行按位与来获取这些信息。也就是说如果两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同,表明在接受方的本网络上,那么可以把数据包直接发送到目标主机。

子网掩码的设定必须遵循一定的规则。与二进制 IP 地址相同,子网掩码由 1 和 0 组成,且 1 和 0 分别连续。子网掩码的长度也是 32 位,左边是网络位,用二进制数字 “1” 表示,1 的数目等于网络位的长度;右边是主机位,用二进制数字 “0” 表示,0 的数目等于主机位的长度。这样做的目的是为了让掩码与 IP 地址做按位与运算时用 0 遮住原主机数,而不改变原网络段数字,而且很容易通过 0 的位数确定子网的主机数( 2 的主机位数次方 - 2,因为主机号全为 1 时表示该网络广播地址,全为 0 时表示该网络的网络号,这是两个特殊地址)。通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。

如何实现子网划分?

子网划分实际上就是将主机地址分为两个部分:子网网络地址子网主机地址。形式如下:

 那么对于C类的IP地址,前 24 位是网络号,最后 8 位是主机号,根据子网掩码可知从8位主机号中借用2位作为子网号

 那么这么划分,子网地址就有四个,分别是00、01、10、11。

(三)IP与MAC的关系

MAC的作用则是实现直连的两个设备之间的通信,而IP则负责在没有直连的两个网络之间进行通信传输。

 就好比有个行程表告诉你起点终点,这就是IP地址所做的事情,中间如何实现达到这个终点,需要MAC地址来进行互联。

所以在网络中的数据包传输也是如此,源IP地址和目标IP地址在传输过程中是不会变化的(前提是:没有使用NAT网络),只有源MAC地址和目标MAC一直在变化。

(四)无分类地址CIDR

正因为IP分类存在着许多缺点,所以后面提出了无分类地址的方案,即CIDR,也就是解决IP地址的缺点。那么问题来了,这样怎么划分网络号以及主机号,有分类的IP地址代表着将32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。但是对于无分类来说:

表示形式 a.b.c.d/x,其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。

比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。

那么其特殊表示可以这么表示:

(五)公有IP地址与私有IP地址

在A、B、C分类地址,实际上有分公有IP地址和私有IP地址。

公有IP地址是有个组织统一分配的,假设你要开一个博客网站,那么你就需要去申请购买一个公有 IP,这样全世界的人才能访问。并且公有 IP 地址基本上要在整个互联网范围内保持唯一。

私有 IP 地址通常是内部的 IT 人员管理,公有 IP 地址是由 ICANN 组织管理,中文叫「互联网名称与数字地址分配机构」。

(六)IPv6基本认知

IPv6类似IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。IPv4 的地址是 32 位的,大约可以提供 42 亿个地址,但是早在 2011 年 IPv4 地址就已经被分配完了,但是 IPv6 的地址是 128 位的,这可分配的地址数量是大的惊人。但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级,所以这可能是 IPv6 普及率比较慢的一个原因。

它的优点不仅仅在于分配的地址变多了,它的优点还在于:

  • IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,真是便捷到即插即用啊。

  • IPv6 包头包首部长度采用固定的值 40 字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能

  • IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性

IPv6 的地址主要有以下类型地址:

  • 单播地址,用于一对一的通信

  • 组播地址,用于一对多的通信

  • 任播地址,用于通信最近的节点,最近的节点是由路由协议决定

  • 没有广播地址

IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开。如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 「::」隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。

IPv4 首部与 IPv6 首部

 

其改进在于:

  • 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。

  • 取消了分片/重新组装相关字段。 分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。

  • 取消选项字段。 选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段使的 IPv6 的首部成为固定长度的 40 字节。

四、端口

“端口” 是英文 port 的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见,是特指TCP/IP协议中的端口,是逻辑意义上的端口。例如计算机中的 80 端口、21 端口、23 端口等。物理端口又称为接口,是可见端口,计算机背板的 RJ45 网口,交换机路由器集线器等 RJ45 端口。电话使用 RJ11 插口也属于物理端口的范畴。 如果把 IP 地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个 IP地址的端口可以有 65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从 0 到65535(2^16-1)。

(一)端口类型

周知端口(Well Known Ports)

周知端口是众所周知的端口号,也叫知名端口、公认端口或者常用端口,范围从 0 到 1023,它们紧密绑定于一些特定的服务。例如 80 端口分配给 WWW 服务,21 端口分配给 FTP 服务,23 端口分配给Telnet服务等等。我们在 IE 的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下WWW 服务的端口是 “80”。网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号“:”(半角),再加上端口号。比如使用 “8080” 作为 WWW服务的端口,则需要在地址栏里输入“网址:8080”。但是有些系统协议使用固定的端口号,它是不能被改变的,比如 139 端口专门用于 NetBIOS 与 TCP/IP 之间的通信,不能手动改变。

注册端口(Registered Ports)

端口号从 1024 到 49151,它们松散地绑定于一些服务,分配给用户进程或应用程序,这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序。这些端口在没有被服务器资源占用的时候,可以用用户端动态选用为源端口。

动态端口/私有端口(Dynamic Ports / Private Ports)

动态端口的范围是从 49152 到 65535。之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

五、网络模型

(一)OSI七层参考模型

七层模型,亦称 OSI(Open System Interconnection)参考模型,即开放式系统互联。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为 OSI 参考模型或七层模型。

它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。

 

 

  • 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。将比特组合成字节进而组合成帧,用MAC地址访问介质

  • 网络层:进行逻辑地址寻址,在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。

  • 传输层:定义了一些传输数据的协议和端口号( WWW 端口 80 等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP 特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如 QQ 聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

  • 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。

  • 表示层:数据的表示、安全、压缩。主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。

  • 应用层:网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

(二)TCP/IP四层模型

现在 Internet(因特网)使用的主流协议族是 TCP/IP 协议族,它是一个分层、多协议的通信体系。TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。

TCP/IP 协议在一定程度上参考了 OSI 的体系结构。OSI 模型共有七层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在 TCP/IP 协议中,它们被简化为了四个层次。

(1)应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在 TCP/IP 协议中,它们被合并为应用层一个层次。

(2)由于传输层和网络层在网络协议中的地位十分重要,所以在 TCP/IP 协议中它们被作为独立的两个层次。

(3)因为数据链路层和物理层的内容相差不多,所以在 TCP/IP 协议中它们被归并在网络接口层一个层次里。

只有四层体系结构的 TCP/IP 协议,与有七层体系结构的 OSI 相比要简单了不少,也正是这样,TCP/IP 协议在实际的应用中效率更高,成本更低。

  • 应用层:应用层是 TCP/IP 协议的第一层,是直接为应用进程提供服务的。

    a. 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用 了 SMTP 协议、万维网应用使用了 HTTP 协议、远程登录服务应用使用了有 TELNET 协议。

    b. 应用层还能加密、解密、格式化数据。

    c. 应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。

  • 传输层:作为 TCP/IP 协议的第二层,运输层在整个 TCP/IP 协议中起到了中流砥柱的作用。且在运输层中, TCP 和 UDP 也同样起到了中流砥柱的作用。

  • 网络层:网络层在 TCP/IP 协议中的位于第三层。在 TCP/IP 协议中网络层可以进行网络连接的建立和终止以及 IP 地址的寻找等功能。

  • 网络接口层:在 TCP/IP 协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

六、协议

协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。 为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议(protocol),它最终体现为在网络上传输的数据包的格式。协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。

(一)常见的协议

  • 应用层常见的协议有:FTP协议(File Transfer Protocol 文件传输协议)、HTTP协议(Hyper Text Transfer Protocol 超文本传输协议)、NFS(Network File System 网络文件系统)。

  • 传输层常见协议有:TCP协议(Transmission Control Protocol 传输控制协议)、UDP协议(User Datagram Protocol 用户数据报协议)。

  • 网络层常见协议有:IP 协议(Internet Protocol 因特网互联协议)、ICMP 协议(Internet Control Message Protocol 因特网控制报文协议)、IGMP 协议(Internet Group Management Protocol 因特 网组管理协议)。

  • 网络接口层常见协议有:ARP协议(Address Resolution Protocol 地址解析协议)、RARP协议(Reverse Address Resolution Protocol 反向地址解析协议)。

(二)UDP协议

  • 源端口号:发送方端口号。

  • 目的端口号:接收方端口号。

  • 长度:UDP用户数据报的长度,最小值是8(仅有首部)。

  • 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃。

(三)TCP协议

  • 源端口号:发送方端口号。

  • 目的端口号:接收方端口号。

  • 序列号:本报文段的数据的第一个字节的序号。

  • 确认序号:期望收到对方下一个报文段的第一个数据字节的序号。

  • 首部长度(数据偏移):TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长度。单位:32位,即以 4 字节为计算单位。

  • 保留:占 6 位,保留为今后使用,目前应置为 0。

  • 紧急 URG :此位置 1 ,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。

  • 确认 ACK:仅当 ACK=1 时确认号字段才有效,TCP 规定,在连接建立后所有传达的报文段都必须把 ACK 置1。

  • 推送 PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作,这时,发送方TCP 把 PSH 置 1,并立即创建一个报文段发送出去,接收方收到 PSH = 1 的报文段,就尽快地(即“推送”向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。

  • 复位 RST:用于复位相应的 TCP 连接。

  • 同步 SYN:仅在三次握手建立 TCP 连接时有效。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段,对方若同意建立连接,则应在相应的报文段中使用 SYN = 1 和 ACK = 1。因此,SYN 置1 就表示这是一个连接请求或连接接受报文。

  • 终止 FIN:用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。

  • 窗口:指发送本报文段的一方的接收窗口(而不是自己的发送窗口)。

  • 校验和:校验和字段检验的范围包括首部和数据两部分,在计算校验和时需要加上 12 字节的伪头部。

  • 紧急指针:仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据。

  • 选项:长度可变,最长可达 40 字节,当没有使用选项时,TCP 首部长度是 20 字节。

(四)IPv4协议

  • 版本:IP 协议的版本。通信双方使用过的 IP 协议的版本必须一致,目前最广泛使用的 IP 协议版本 号为 4(即IPv4)。

  • 首部长度:单位是 32 位(4 字节)。

  • 服务类型:一般不适用,取值为 0。

  • 总长度:指首部加上数据的总长度,单位为字节。

  • 标识(identification):IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。

  • 标志(flag):目前只有两位有意义。标志字段中的最低位记为 MF。MF = 1 即表示后面“还有分片”的数据报。MF = 0 表示这已是若干数据报片中的最后一个。标志字段中间的一位记为 DF,意思是“不能分片”,只有当 DF = 0 时才允许分片。

  • 片偏移:指出较长的分组在分片后,某片在源分组中的相对位置,也就是说,相对于用户数据段的起点,该片从何处开始。片偏移以 8 字节为偏移单位。

  • 生存时间:TTL,表明是数据报在网络中的寿命,即为“跳数限制”,由发出数据报的源点设置这个字段。路由器在转发数据之前就把 TTL 值减一,当 TTL 值减为零时,就丢弃这个数据报。

  • 协议:指出此数据报携带的数据时使用何种协议,以便使目的主机的 IP 层知道应将数据部分上交给哪个处理过程,常用的 ICMP(1),IGMP(2),TCP(6),UDP(17),IPv6(41)。

  • 首部校验和:只校验数据报的首部,不包括数据部分。

  • 源地址:发送方 IP 地址。

  • 目的地址:接收方 IP 地址。

 (五)以太网帧协议

类型:0x800表示 IP、0x806表示 ARP、0x835表示 RARP。

(六)ARP协议

  • 硬件类型:1 表示 MAC 地址。

  • 协议类型:0x800 表示 IP 地址。

  • 硬件地址长度:6。

  • 协议地址长度:4。

  • 操作:1 表示 ARP 请求,2 表示 ARP 应答,3 表示 RARP 请求,4 表示 RARP 应答。

七、封装

上层协议是如何使用下层协议提供的服务的呢?其实这是通过封装(encapsulation)实现的。应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。

举个简单的栗子,比如说我们需要发一个QQ消息,首先我们需要将QQ协议头以及要发送的消息封装于应用层中,之后在传输层加入UDP协议,根据UDP的协议要求,里面加入了发送方端口号以及接收方端口号;接下来是进入了网络层,在网络层中我们加入了IP协议,根据IP协议的要求,我们加入了目标IP地址以及本机IP地址,并且把我们上述的UDP协议也加入其中;再下一层是数据链路层,这里我们加入了以太网帧头,加入了本机物理地址、目标物理地址、UDP头部,这个也是我们最后的数据包,我们把他发给我们的目标设备。以上的方式叫作封装。

八、分用

当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing)。分用是依靠头部信息中的类型字段实现的。

当我们需要处理A设备发过来的包时,我们首先根据以太网驱动的程序,匹配到对应的Mac地址,并且也可以得知我们是使用UDP的传输方式,之后将以太网帧头删除,传去上层,上层再次匹配IP地址,匹配到后进行删除,再传入上层,上层将端口号读取后,继续删除,最后送到了对应的端口,即可发送消息。

总体来说,整个流程是这样的:

 那么我们发送一个QQ消息即可以视作这种形式:

 

以上的图片部分摘自于《小林Coding》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决org.apache.jasper.JasperException: 无法为JSP编译类

1.问题描述 org.apache.jasper.JasperException: 无法为JSP编译类: 在运行java web项目时,启动tomcat服务器报这样的操作,一般就是tomcat版本跟jdk版本不兼容的问题。我用的是jdk17,经过查阅相关资料得出一般使用jdk8就可以解决此类问题 2.…

微信小程序 | 小程序配置和架构

🖥️ 微信小程序 专栏:小程序配置和架构 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f44…

JavaScript:cookie和storage

cookie 用于客户端存储会话信息。在浏览器中会对cookie做一些限制: ❑ 不超过300个cookie; ❑ 每个cookie不超过4096字节; ❑ 每个域不超过20个cookie; ❑ 每个域不超过81920字节。 每个域能设置的cookie总数也是受限的&#xf…

(5)Pytorch数据处理

Pytorch 数据处理 要点总结 1、功能 Dataset:准备数据集,一般会针对自己的数据集格式重写Dataset,定义数据输入输出格式 Dataloader:用于加载数据,通常不用改这部分内容 2、看代码时请关注 Dataloader中collate_fn 传入…

分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建

2.1 Zookeeper集群简介 2.1.1为什么搭建Zookeeper集群 大部分分布式应用需要一个主控、协调器或者控制器来管理物理分布的子进程。目前,大多数都要开发私有的协调程序,缺乏一个通用机制,协调程序的反复编写浪费,且难以形成通用、…

17、基于Mybaits、Vue、axios、Element-ui的JavaWeb项目

目录 1、项目功能介绍 ​编辑 2、环境准备 创建项目 准备数据库 准备Mybatis核心配置文件 创建实体类与Mapper映射文件 补全项目结构 1、在pom.xml中导入相关依赖 2、导入axios、vue的js文件 3、导入Element-ui 3、查询所有功能的实现 3.1、后端的实现 3.1.1、d…

【人工智能与机器学习】——朴素贝叶斯与支持向量机(学习笔记)

📖 前言:朴素贝叶斯(Naive Bayes)和支持向量机(Support Vector Machine,SVM)是两种不同的机器学习算法,它们都用于分类。朴素贝叶斯算法基于贝叶斯定理来进行分类,它是一…

内存优化之掌握 APP 运行时的内存模型

在上一章,我们已经从操作系统的维度了解了一个进程的内存模型。这一节,我们将维度继续上升,从应用层出发看看一个 App 运行时的内存模型是怎样的。从 App 运行时的内存模型中我们可以知道导致内存增长的源头,从源头出发&#xff0…

【RCNN系列】Faster RCNN论文总结及源码

目标检测论文总结 【RCNN系列】 RCNN Fast RCNN Faster RCNN 文章目录目标检测论文总结前言一、Pipeline二、模型设计1.RPNHead2.Anchors3.RPN(Region Proposal Networks)4.RPN正负样本划分阈值5.训练策略三、总结前言 一些经典论文的总结。 一、Pipel…

RK3568平台开发系列讲解(驱动基础篇)Linux内核面向对象思想之继承

🚀返回专栏总目录 文章目录 一、私有指针二、抽象类三、接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在面向对象编程中,封装和继承其实是不分开的:封装就是为了更好地继承。我们将几个类共同的一些属性和方法抽取出来,封装成一个类,就是为了通过继承最大化…

【云原生】devops之jenkins中pipeline语法(2)

前言: pipeline语法分类一般来说,有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。 二、阶段步骤 (1)post 根据pipeline块或者stage块(阶段)完成的状态来进行一个或者多个附加步骤(取决…

搭建高性能数据库服务⭐《Sharding-JDBC+Canal》⭐

本文主要记录本周的学习内容,搭建mysql的高性能数据库服务 源于 现最多被使用的数据库还是Msql,而MySQL本身不是一种分布式型数据库,在高性能要求下,简单的主从、复制已无法满足高性能要求。 而本文主要在提供读者一种高性能方案…

Java学习之equals方法练习

目录 第一题 题目要求 我的代码 创建Person类 main类 结果 重写equals 重写后的结果 老师代码 思路 结果 总结 Interger类 源代码 String类 源代码 第二题 运行结果 第三题 知识点 运行结果 第一题 题目要求 判断两个 Person 对象的内容是否相等,…

SQL开窗函数之基本用法和聚合函数

开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询。窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列值和聚合后的结果…

python之模块使用

目录 一、模块 二、标准模块 collections模块 三、异常处理 四、文件操作 一、模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 新建util…

day17【代码随想录】找出字符串中第一个匹配项的下标 、重复的子字符串

文章目录前言一、找出字符串中第一个匹配项的下标(力扣28)二、重复的子字符串(力扣459)前言 1、找出字符串中第一个匹配项的下标 2、重复的子字符串 一、找出字符串中第一个匹配项的下标(力扣28) 给你两个…

LeetCode HOT 100 —— 200 .岛屿问题

题目 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该…

有意思,圣诞节自己做一个装饰圣诞帽头像的APP!

话说又到了一年一度到别人到节日,圣诞节,还记得去年的时候,朋友圈疯狂转发到圣诞帽嘛,在圣诞节为自己到头像增加一款圣诞帽还是蛮应景的。 我们的目标就是是这样的 ❝ 当然,如果你对过程不感兴趣,那么直接到…

总结本人学习b站黑马前端课程,各部分案例汇总

目录 1.Ajax: 对应课程: b站黑马JavaScript的Ajax案例代码——新闻列表案例 b站黑马JavaScript的Ajax案例代码——评论列表案例 b站黑马JavaScript的Ajax案例代码——聊天机器人案例 b站黑马JavaScript的Ajax案例代码——图书管理案例 2.ES6面向对…

HTML-如何让网站变成灰色?

在某些特定的时候,我们经常会看到网站会将整体布局设置成灰色色调,以示哀悼。 那么这是怎么实现的呢? 我去查了下相关的文章,发现是通过CSS的 过滤器函数 实现的,详见:grayscale()。 grayscale:对图片进…