一、网络编程之基础知识详解

这篇具有很好参考价值的文章主要介绍了一、网络编程之基础知识详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言:

初学网络编程时会涉及到许多网络基础知识,这些知识点比较零碎,本文希望系统总结一次,以便在后续的学习和工作中能够快速查阅。

网络基础

网络分层模型

OSI 七层模型

OSI 模型,也叫做七层模型,OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。 OSI 模型是国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系

OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。如下图所示:
一、网络编程之基础知识详解

  • 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(即由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特
  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。定义了如何让格式化数据以帧为单位进行传输,以及如何控制对物理介质的访问。将比特组合成字节进而组合成帧,用 MAC 地址访问介质,所以这一层的数据叫做帧。 这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
  • 网络层:进行逻辑地址寻址:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet 的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
  • 传输层定义了一些传输数据的协议和端口号,如:web 服务的端口为 80,TCP,UDP等等。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段
  • 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是 IP 也可以是 MAC 或者是主机名)。
  • 表示层:数据的表示、安全、压缩。主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。
  • 应用层:是最靠近用户的 OSI 层,网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

总结OSI 网络模型是一种只存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,形成两种简化模型: TCP/IP 四层模型、五层体系结构,本文主要介绍 TCP/IP 四层模型。

TCP/IP 四层模型

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

TCP/IP 四层模型在一定程度上参考了 OSI 的体系结构。OSI 模型共有七层,这显然是有些复杂的,所以在 TCP/IP 协议中,它们被简化为了四个层次:

  • 应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在 TCP/IP 四层网络模型中,它们被合并为应用层一个层次。
  • 由于传输层和网络层在网络协议中的地位十分重要,所以在 TCP/IP 四层网络模型中它们被作为独立的两个 层次。
  • 因为数据链路层和物理层的内容相差不多,所以在 TCP/IP 四层网络模型中它们被归并在网络接口层一个层次里。一、网络编程之基础知识详解

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

TCP/IP 四层模型分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示:

  • 应用层:应用层是 TCP/IP 四层网络模型的第一层,是直接为应用进程提供服务的。
    • 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,例如,邮件传输应用使用了 SMTP 协议、万维网应用使用了 HTTP 协议、远程登录服务应用使用了有 TELNET 协议。
    • 应用层还能加密、解密、格式化数据。
    • 应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。
  • 传输层:传输层为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。作为 TCP/IP 四层网络模型的第二层,运输层在整个 TCP/IP 四层网络模型中起到了中流砥柱的作用,且在运输层中, TCP 和 UDP 协议也同样起到了中流砥柱的作用。
  • 网络层:主要解决主机到主机的通信问题,在 TCP/IP 四层网络模型中网络层可以进行网络连接的建立和终止以及 IP 地址的寻找等功能。
  • 链路层:也叫网络接口层,由于网络接口层兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

一、网络编程之基础知识详解
一、网络编程之基础知识详解

总结:目前实际使用的网络模型就是 TCP/IP 四层模型,所以一般在应用开发过程中讨论最多的也是 TCP/IP 四层模型,下文主要也是以 TCP/IP 四层模型为基础进行讲解。

协议的概念

网络模型的具体实现依赖于各种各样的协议,本节将详细介绍协议的知识。

什么是协议?
  • 协议,网络协议的简称,可以理解为“约定”和“合同”,网络协议是通信计算机双方必须共同遵从的一组约定,只有通信的双方必须都遵守才能正常收发数据,例如 TCP、UDP、IP 等,所以通信的双方必须使用同一协议才能通信。
  • 协议也是一种规范,由计算机组织制定,规定了很多细节,例如,如何建立连接,如何相互识别等。
  • 协议还也可理解为“规则”,是数据传输和数据解释的规则,即协议规定了数据传输的方式和数据的格式。例如 TCP 协议注重数据的传输。http 协议则重于数据的解释。

假设,A、B 双方欲传输文件。规定:

  • 第一次,传输文件名,接收方接收到文件名,应答 OK 给传输方;
  • 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个 OK;
  • 第三次,传输文件内容。同样,接收方接收数据完成后应答 OK 表示文件内容接收成功。

由此,无论 A、B 之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间达成的这个相互遵守的规则即为协议。

这种仅在A、B之间被遵守的协议称之为原始协议。当此协议被更多的人采用,不断的增加、改进、维护、完善。最终形成一个稳定的、完整的文件传输协议,被广泛应用于各种文件传输过程中,该协议就成为一个标准协议,比如最早的 ftp 协议就是由此衍生而来。

标准协议

常见的标准协议大致介绍如下:

  1. 应用层常见的协议有 HTTP 协议,FTP 协议。

    1. HTTP 超文本传输协议是互联网上应用最为广泛的一种网络协议。
    2. FTP文件传输协议(File Transfer Protocol)
    3. NFS:网络文件系统
  2. 传输层常见协议有 TCP 和 UDP 协议。

    1. TCP 传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
    2. UDP 用户数据报协议是 OSI 七层模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
  3. 网络层常见协议有 IP 协议、ICMP 协议、IGMP 协议。

    1. IP 协议是因特网互联协议。
    2. ICMP 协议是 Internet 控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。(Linux 中 ping 命令传输的数据包的格式就是使用了 ICMP 协议)
    3. IGMP 协议是 Internet 组管理的协议,是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
  4. 网络接口层常见协议有 ARP 协议、RARP 协议。

    1. ARP 协议是正向地址解析协议,通过已知的 IP,寻找对应主机的 MAC 地址。

    2. RARP 是反向地址转换协议,通过 MAC 地址确定 IP 地址。

一、网络编程之基础知识详解

TCP/IP 协议族

目前实际使用的网络模型是 TCP/IP 四层网络模型,它对 OSI 模型进行了简化,只包含了四层,从上到下分别是应用层、传输层、网络层和链路层(网络接口层),每一层都包含了若干协议。

TCP/IP 四层模型包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百个互为关联的协议,其中 TCP 和 IP 是最常用的两种底层协议,所以把它们统称为“TCP/IP 协议族”。

一、网络编程之基础知识详解

常见的几种协议详解

参看《网络编程之协议及协议格式详解》一文。

网络模型原理

了解了上面两种网络模型和协议,那么网络模型和协议究竟是干什么呢?网路模型的通讯过程是怎样的呢?本节将详细阐述。

数据封装

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

传输层及其以下层的实现由操作系统内核提供,应用层的实现由用户进程提供(用户进程的实现请参看《网络编程之Socket编程》一文),即应用程序对通讯数据的含义进行解释,而传输层及其以下层处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。如下图所示:

一、网络编程之基础知识详解

【注意】不同的协议层对数据包有不同的称谓:

  1. 在传输层叫做段(segment)
  2. 在网络层叫做数据报(datagram)
  3. 在链路层叫做帧(frame)
数据分用

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

一、网络编程之基础知识详解

一、网络编程之基础知识详解

网络原理

了解了数据封装和数据分用后,我们来看看网络通讯的完整过程,一边深刻理解网络通讯的原理。

  • 我们平常使用的程序(或者说软件)一般都是通过应用层来访问网络的,程序产生的数据会一层一层地往下传输,直到最后的网络接口层,就通过网线发送到互联网上去了。数据每往下走一层,就会被这一层的协议增加一层包装,等到发送到互联网上时,已经比原始数据多了四层包装。整个数据封装的过程就像俄罗斯套娃。这个过程叫做封装,也叫组包
  • 当另一台计算机接收到数据包时,会从网络接口层再一层一层往上传输,每传输一层就拆开一层包装,直到最后的应用层,就得到了最原始的数据,这才是程序要使用的数据。这个过程叫做分用,也叫解包
  • 给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一层,我已经处理过了。给数据拆包装的过程正好相反,就是去掉数据头部的标志,让它逐渐现出原形。

一、网络编程之基础知识详解

两台计算机进行通信时,必须遵守以下原则:

  • 必须是同一层次进行通信,比如,A 计算机的应用层和 B 计算机的传输层就不能通信,因为它们不在一个层次,数据的拆包会遇到问题。
  • 每一层的功能都必须相同,也就是拥有完全相同的网络模型。如果网络模型都不同,那不就乱套了,谁都不认识谁。
  • 数据只能逐层传输,不能跃层。
  • 每一层可以使用下层提供的服务,并向上层提供服务。

示例:假设我们通过 QQ 发送一个 “nihao” 的数据给对方主机

一、网络编程之基础知识详解

【注意】当然了,一般情况下开发人员不会自己手动组包和解包,这些操作都是由下层的协议自动完成,除非做一些底层应用程序的开发的,以上组包和解包的示例只是为了让我们更加了解网络通讯的原理而已。一般都是在应用层去使用这些传输层、网络层、数据链路层的功能,而且一般都有封装好了API (例如 socket)来帮助开发人员使用这些功能。

IP 地址、MAC 地址和端口号

我们在如何在茫茫的互联网海洋中,如何找到一台计算机并与其进行通讯呢?有了上文提到的网络模型、协议还不够,还有三个要素必须具备,它们分别是 IP 地址、MAC 地址和端口号

IP 地址

在因特网上进行通信时,必须要知道对方的地址,通常数据包中会附带对方的地址信息,主机把数据包发送给路由器以后,路由器会根据地址找到对方的地理位置,完成一次数据的传递(路由器有非常高效和智能的算法,很快就会找到目标计算机)。那么这个地址其实就是 IP 地址

了解 IP 地址前,先了解下 IP 协议:IP 协议是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则

  • 任何厂家生产的计算机系统,只要遵守 IP 协议就可以与因特网互连互通。
  • 各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为“帧”)的格式不同。
  • IP 协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP 数据报”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。

正是因为有了 IP 协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP 协议也可以叫做“因特网协议”。

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

IP 地址有两种:

  • IPv4 地址是占4字节,一共32位,IPv4 地址有两种常见的表达形式:
    • 二进制形式:通常被分割为 4 个“ 8 位二进制数”(也就是 4 个字节)。
    • 点分十进制形式:表示成 a.b.c.d 的形式,其中 a,b,c,d 都是 0~255 之间的十进制整数。
    • 举例:点分十进IP地址 100.4.5.6,实际上是 32 位二进制数 01100100.00000100.00000101.00000110
  • IPv6 地址占16字节,一共128位,IPv6 地址有两种常见的表达形式:
    • 二进制形式:通常被分割为 8 个“ 8 位二进制数”(也就是 16 个字节)
    • 十六进制字符串: 格式为 X:X:X:X:X:X:X:X,其中每个 X 表示地址中的 16 位,以十六进制表示 。

目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是在教育网中已经大量使用。在windows下可以通过命令 ipconfig 、Linux下可以通过命令 ifconfig 查看 IP 地址

IP 地址编址方式

最初设计互联网络时,为了便于寻址以及层次化构造网络(互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构,详细见下文名词解析中“局域网、城域网、广域网、互联网”一节),每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID,以便于IP地址的寻址操作。所以 IP 地址 = 网络号 + 主机号:

  • 网络号(也叫子网号):它标志主机所连接的网络地址表示属于互联网的哪一个网络,同一个物理网络上的所有主机都使用同一个网络 ID
  • 主机号:它标志主机地址表示其属于该网络中的哪一台主机:网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID 与其对应。
  • Internet 委员会定义了 5 种 IP 地址类型以适合不同容量的网络,即 A 类~ E 类(IPv4 地址分为A,B,C,D,E五大类):
    • A类地址以0开头,那么其网段数应该为0XXXXXXX.YYYYYYYY.YYYYYYYY.YYYYYYYY;私有IP地址范围10.0.0.0-10.255.255.255;其子网掩码为255.0.0.0
      • 网络号占前 8 位,后面有七位数字为有效位,所以原本最大网络数是 128 (2^7);但网络不能由全 0 组成,且 127.0.0.0 保留用于回路,所以 A 类地址的最终网段在 1-126 之间。
      • 主机号占后面 24 位,单个网段最大主机数为 16777216(256 的 3 次方),而网段数计算还必须“减2”,这是因为要扣除两个保留地址:二进制数里全是“0”和全是“1”的要保留,“0”做为网络号(即网段地址,例如1.0.0.0),全“1”做为广播号(即广播地址,例如1.1.1.1),所以最大主机数为 16777214 台;
      • A 类网络地址的 IP 地址范围为1.0.0.1 - 126.255.255.254:网络地址数量较少,有 126 个网络,每个网络可以容纳主机数达 1600 多万台,一般用于广域网。
    • B类地址以10开头, 那么其网段数应该为10XXXXXX.XXXXXXXX.YYYYYYYY.YYYYYYYY;私有IP地址范围172.16.0.0-172.31.255.255;其子网掩码为255.255.0.0。
      • 网络号占前 16 位,后面有 14 位数字为有效位,所以最大网络数 16384(2^14);
      • 主机号占后面 16 位,单个网段最大主机数为 65536(256 的 2 次方); 而扣除全“0”(即网段地址,例如128.0.0.0),全“1”(即广播地址,例如128.1.1.1)的保留地址,所以最大主机数为 65534 台;
      • B 类网络地址的 IP 地址范围为 128.0.0.1 - 191.255.255.254,有 16384 个网络,每个网络可以容纳主机数达 65534 台, 所以一般用于城域网;
    • C类地址以110开头, 那么其网段数应该为110XXXXX.XXXXXXXX.XXXXXXXX.YYYYYYYY ;私有IP地址范围192.168.0.0-192.168.255.255;其子网掩码为255.255.255.0。
      • 网络号占前 24 位,后面有 21 位数字为有效位,所以最大网络数 2097152(2^21);
      • 主机号占后面 8 位,单个网段最大主机数为 256(256 的 1 次方);而扣除全“0”(即网段地址,例如 192.0.0.0),全“1”(即广播地址,例如192.1.1.1)的保留地址,所以最大主机数为 254 台;
      • C 类网络地址的 IP 地址范围为 192.0.0.1-223.255.255.254 ,有 2097152个网络,每个网络可以容纳主机数达 254 台, 所以一般用于局域网;
    • D类地址(224~239):以1110开头,保留位多播地址,即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是 “1110”,范围从 224.0.0.0 - 239.255.255.255。
    • E类地址(240~255):以11110开头,保留位为将来使用
    • 特殊的网址
      • 每一个字节都为 0 的地址( “0.0.0.0” )对应于当前主机;
      • IP 地址中的每一个字节都为 1 的 IP 地址( “255.255.255.255” )是当前子网的广播地址;
      • IP 地址中凡是以 “11110” 开头的 E 类 IP 地址都保留用于将来和实验使用。
      • IP地址中不能以十进制 “127” 作为开头,该类地址中数字 127.0.0.1 到 127.255.255.255 用于回路测试,如:127.0.0.1可以代表本机IP地址。
    • 私有IP地址 :上文中提到私有IP地址,那什么是私有IP地址呢? A、B、C类是可供主机使用的ip地址,在这些ip地址中,有一些被分配为私有ip(private ip),各公司可以自行选择合适的私有 ip, 私有 ip 的对立面,就是公有 ip,使用公有ip可以直接在外网中通信。 参考文章:公有 IP 与私有 IP

如何区分网络号和主机号呢?我们可以使用子网掩码 netmask

子网掩码又叫网络掩码、地址掩码、子网络遮罩,它是一个 32 位地址,子网掩码由 1 和 0 组成,且 1 和 0 分别 连续。用于屏蔽 IP 地址的一部分以区别网络标识和主机标识,并说明该 IP地址是在局域网上,还是在广域网上。所以子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分:

  • IP 中被子网掩码中1连续覆盖的位就是子网 ID
  • IP 中被子网掩码中0连续覆盖的位就是主机 ID

示例1:IP 为 10.1.1.2;子网掩码为 255.255.255.0,将IP地址和子网掩码换算为二进制后可以计算出:10.1.1 为子网号,2 为主机号。

一、网络编程之基础知识详解

示例2:子网掩码另一种表达方式,例如 192.168.100.10/24 表示 IP 地址是 192.168.100.10,子网掩码中有24个1,即子网掩码为 255.255.255.0

子网掩码区分子网 ID 和主机 ID 后,还可以利用子网 ID 和主机 ID 来获得网段地址和广播地址:

  • 网关(路由)实质上是一个网络通向其他网络的IP地址,也叫网段地址。

    实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。

    网段地址:IP地址和子网掩码进行与运算,结果是网络地址,即主机号全0是网络地址,本例中网段地址为 10.1.1.0

    注意:网段地址与路由地址(网关地址)是两种概念,网关地址是某个网段与外界交流的进出口。

  • 广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。

    广播地址:IP地址和子网掩码进行与运算,将运算结果中的网络地址不变,主机地址变为 1,本例中广播地址为:10.1.1.255

  • lo 的 IP 地址为:127.0.0.1,被称为本地回环地址,其主要功能是测试本机的网络配置,能 ping 通 127.0.0.1 说明本机的网卡和 IP 协议安装都没问题。

一、网络编程之基础知识详解

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

网卡与MAC地址

一台主机可以拥有一个独立的 IP 地址,一个局域网也可以拥有一个独立的 IP 地址(对外就好像只有一台计算机),但如上文所述,**目前广泛使用 IPv4 地址的资源是非常有限( IPv4 只有 4 个字节),一台主机一个 IP 地址是不现实的,往往是一个局域网才拥有一个 IP 地址。**也就是说IP 地址只能定位到一个局域网,无法定位到具体的一台计算机。怎么办呢?

其实,真正能唯一标识一台计算机的是 MAC (Media Access Control Address)地址,其被直译为媒体存取控制位址,也称为局域网地址、 以太网地址、物理地址或硬件地址。计算机出厂时,MAC 地址已经被写死到网卡里面了。

那什么又是网卡呢?网卡又称作为网络适配器或者网络接口卡NIC,但是现在更多人愿意使用更为简单的名词"网卡",网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。每一个网卡都有一个被称为 MAC 地址的独一无二的 48 位(6个字节 )串行号(即 MAC 地址),它使得用户可以通过电缆或无线相互连接,从而完成数据通讯等功能。网卡的主要功能:1.数据的封装与解封装、2.链路管理、3.数据编码与译码。

  • MAC 地址的长度为 48 位(6个字节),通常表示为 12 个 16 进制数,如:00-16-EA-AE-3C-40 就是一个MAC 地址。
  • MAC 地址是一个用来确认网络设备位置的位址,由网络设备制造商生产时烧录在网卡中,所以一块网卡的MAC地址具有全球唯一性,形象地说,MAC 地址就如同身份证上的身份证号码,具有唯一性。
  • MAC 地址属于 OSI 模型的第 2 层:在 OSI 模型中,第三层网络层负责 IP 地址,第二层数据链路层则负责 MAC 位址 。
  • MAC 地址用于在网络中唯一标识一个网卡**,一台设备可以有一或多个网卡,而每个网卡都需要并会有一个唯一的 MAC 地址**。
  • 局域网中的路由器/交换机会记录每台计算机的 MAC 地址。
  • 网络通讯中的数据包中除了会附带对方的 IP 地址,还会附带对方的 MAC 地址,当数据包达到局域网以后,路由器/交换机会根据数据包中的 MAC 地址找到对应的计算机,然后把数据包转交给它,这样就完成了数据的传递。

Windows 与 Linux 下网卡查看:

  • Windows下查看网卡与MAC地址:

    网络适配器在 windows 中相当于网卡,可以通过网络适配器查看网卡相关的信息。

    一、网络编程之基础知识详解

    一、网络编程之基础知识详解

  • Linux下查看网卡与MAC地址

    一、网络编程之基础知识详解

端口号

端口

有了 IP 地址和 MAC 地址,虽然可以找到目标计算机,但仍然不能进行通信。因为一台计算机可以同时提供多种网络服务,例如 Web 服务(网站)、FTP 服务(文件传输服务)、SMTP 服务(邮箱服务)等,仅有 IP 地址和 MAC 地址,计算机虽然可以正确接收到数据包,但是却不知道要将数据包交给哪个网络程序来处理,所以通信还是会失败。

为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口,端口(Port Number)是一个虚拟的、逻辑上的概念。可以把 IP 地址比作一间房子的地址,端口就是出入这间房子的门,数据通过这道门流入流出,每道门有不同的编号,这些编号就是端口号

端口可分为虚拟端口和物理端口

  • 其中虚拟端口指计算机内部或交换机路由器内的端口,不可见,是特指TCP/IP 协议中的端口,是逻辑意义上的端口。例如计算机中的 80 端口、21 端口、23 端口等。

  • 物理端口又称为接口,是可见端口,例如,计算机背板的 RJ45 网口,交换机路由器集线器等 RJ45 端口,电话使用 RJ11 插口也属于物理端口的范畴。

网络通讯中说的端口一般是指虚拟端口,所以本文所说的端口都默认是虚拟端口。

端口号

端口是通过端口号来标记的,端口号只有整数,端口号一般占 2 个字节,可以表示 0-65535 个端口(即:2^16,一共 65536 个端口)。端口类型如下:

  1. 周知端口(Well Known Ports) :周知端口是众所周知的端口号,也叫知名端口、公认端口或者常用端口,范围从 0 到 1023,它们紧密绑定于一些特定的服务。例如 80 端口分配给 Web 服务,21 端口分配给 FTP 服务,23 端口分配给Telnet服务,SMTP 服务的端口号是 25等等。

    我们在 IE 的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下 Web 服务的端口是 “80”。但网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号“:”(半角),再加上端口号。比如使用 “8080” 作为 Web 服务的端口,则需要在地址栏里输入“网址:8080”。但是有些系统协议使用固定的端口号,它是不能被改变的,比如 139 端口专门用于 NetBIOS 与 TCP/IP 之间的通信,不能手动改变。

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

  3. 动态端口 / 私有端口(Dynamic Ports / Private Ports) :动态端口的范围是从 49152 到 65535。之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

一、网络编程之基础知识详解

Windows 和 Linux 都可以通过 netstat 命令查看端口使用情况,Linux 下一般常用 netstat -nap。【注意】一个应用程序可以有多个端口,不同的端口可以和不同应用程序进行通讯;一个端口只能服务一个应用程序,比如 QQ 软件,即可以视频,有可以发送数据,这是因为他使用了多个端口。

网络应用程序设计模式

C/S 模式

传统的网络应用设计模式为客户机(client)/服务器(server)模式。在C/S 结构中,应用程序分为两部分:服务器部分和客户机部分,因此 C/S 模式需要在通讯两端各自部署客户机和服务器来完成数据通信。

  1. 服务器负责数据的管理与处理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。
  2. 客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。
  3. 服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。

C/S 模式的优缺点:

  • 优点:

    • 能充分发挥客户端 PC 的处理能力,很多工作可以在客户端处理后再提交给服务器,所以 C/S 结构的客户端响应速度快;
    • 操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求;
    • C/S 结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程;
    • 客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传输效率。
    • 安全性较高,C/S 一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强,一般高度机密的信息系统采用 C/S 结构适宜。
    • 一般来说客户端和服务器程序由一个开发团队创作,所以他们之间所采用的协议相对灵活。可以在标准协议的基础上根据需求裁剪及定制。例如,腾讯公司所采用的通信协议,即为ftp协议的修改剪裁版。
  • 缺点:

    • 首先涉及到安装的工作量,即客户端需要安装专用的客户端软件;
    • 其次从用户角度出发,需要将客户端安插至用户主机上,对用户主机的安全性构成威胁。这也是很多用户不愿使用C/S模式应用程序的重要原因;
    • 然后,任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高;
    • 最后,由于客户端和服务器都需要有一个开发团队来完成开发。工作量将成倍提升,开发周期较长。

因此,传统的网络应用程序及较大型的网络应用程序都首选 C/S 模式进行开发。如知名的网络游戏魔兽世界:3D画面,数据量庞大,使用C/S模式可以提前在本地进行大量数据的缓存处理,从而提高观感。

B/S 模式

浏览器(browser)/服务器(server)模式只需在一端部署服务器,而另外一端使用每台 PC 都默认配置的浏览器即可完成数据的传输。B/S 模式是 WEB 兴起后的一种网络结构模式,WEB 浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如 Firefox 或 Internet Explorer,服务器安装 SQL Server、Oracle、MySQL 等数据库。浏览器通过 Web Server 同数据库进行数据交互。

  • 优点:

    • B/S 模式相比 C/S 模式而言,由于它没有独立的客户端,使用标准浏览器作为客户端,其工作开发量较小,只需开发服务器端即可。
    • 另外由于其采用浏览器显示数据,因此移植性非常好,不受平台限制。如早期的偷菜游戏,在各个平台上都可以完美运行。
    • 因此 B/S 架构最大的优点是总体拥有成本低、维护方便、 分布性强、开发简单,可以不用安装任何专门的软件就能实现在任何地方进行操作,客户端零维护,系统的扩展非常容易,只要有一台能上网的电脑就能使用。
  • 缺点:

    • 服务器端的交互是请求-响应模式,通常动态刷新页面,响应速度明显降低;
    • 个性特点明显降低,无法实现具有个性化的功能要求;
    • 由于使用第三方浏览器,因此网络应用支持受限,通信开销大、系统和数据的安全性较难保障;
    • 没有客户端放到对方主机上,缓存数据不尽如人意,从而传输数据量受到限制,应用的观感大打折扣。
    • 必须与浏览器一样,采用标准 http/https 协议进行通信,应用层协议选择不灵活。

总结:在开发过程中,模式的选择由上述各自的特点决定。根据实际需求选择应用程序设计模式。

网络名词解析

局域网、城域网、广域网、互联网

1、局域网

局域网(local area network)简称 LAN,一种覆盖一座或几座大楼、一个校园或者一个厂区等地理区域的小范围的计算机网。其特点如下:

  • 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。
  • 使用专门铺设的传输介质进行联网,数据传输速率高(10Mb/s~10Gb/s)
  • 通信延迟时间短,可靠性较高
  • 局域网可以支持多种传输介质

那局域网的用户是如何连接到城域网的呢?然后连接到互联网的呢?

任何需要使用互联网的计算机必须通过某种方式与互联网进行连接,互联网接入技术的发展非常迅速:带宽由最初的 14.4Kbps 发展到如今的 100Mbps 甚至 1000Mbps 带宽;接入方式也由过去单一的电话拨号方式,发展成多样的有线和无线接入方式。

现在公司、家庭使用接入互联网,最主要是光纤接入或者网线接入。通过 ISP 安装的宽带拨号设备(也叫做“猫”),然后通过路由器去配置拨号、自动获取或静态IP地址,去接入互联网。

2、城域网

城域网也叫都会网域(Metropolitan Area Network)简称 MAN,指大型的计算机网络,MAN 改进LAN(局域网)中的传输介质,扩大局域网的范围。其特点如下:

  • 它是较大型的局域网,需要的成本较高,但可以提供更快的传输速率。
  • 地理分布范较大,一般为数十公里至数百公理。可覆盖一座城市,一个大都会区。
  • 属宽带局域网,它的传输媒介主要采用光缆,传输速率在 100 兆比特/秒以上。
  • MAN 的一个重要用途是用作骨干网( 它与中国的骨干网相连 ),通过它将位于同一城市内不同地点的主机、数据库,以及LAN等互相联接起来
  • 城域网中所有城市网络设备,光缆建设等工作,都是由中国的三大运营商(ISP)来建设的:电信、移动、联通。

3、广域网

广域网(wide area network)简称 WAN,一种用来实现不同地区的局域网或城域网的互连,可提供不同地区、城市和国家之间的计算机通信的远程计算机网。覆盖的范围比局域网(LAN)和城域网(MAN)都广。广域网的通信子网主要使用分组交换技术。

广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互连起来,达到资源共享的目的。如互联网是世界范围内最大的广域网。其特点如下:

  • 适应大容量与突发性通信的要求;
  • 适应综合业务服务的要求;
  • 开放的设备接口与规范化的协议;
  • 完善的通信服务与网络管理。

4、国际互联网

国际互联网络,即为因特网(Internet),是目前世界上最大的计算机互联网络,它是由那些使用公用语言互相通信的计算机连接而成的全球网络,一旦你连接到它的任何一个节点上,就意味着您的计算机已经联入Internet网。Internet目前的用户已经遍布全球,有超过几亿人,并且它的用户数还在以等比技术上升。

DNS 服务器

DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 地址串。

它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为 IP 地址功能的服务器。

半双工/全双工

Full-duplex(全双工)全双工是在通道中同时双向数据传输的能力。

Half-duplex(半双工)在通道中同时只能沿着一个方向传输数据。

以太网交换机

以太网是一种局域网标准,工作在数据链路层和物理层,作用是封装成帧发送比特流

以太网交换机是基于以太网传输数据的交换机,以太网是采用共享总线型传输媒体方式的局域网。以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据。

以太网交换机工作于 OSI 网络参考模型的第二层(即数据链路层),是一种基于MAC(Media Access Control,介质访问控制)地址识别、完成以太网数据帧转发的网络设备

路由

路由(route)解释:

  • 路由(名词):数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。
  • 路由(动词):某个路由节点为数据包选择投递方向的选路过程。

路由器工作原理:路由器(Router)是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

路由表(Routing Table):在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径。

路由条目:路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成,如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。

缺省路由条目:路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

路由节点:一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。

参考文档

1、局域网、城域网、广域网、国际互联网

2、阮一峰 互联网协议入门文章来源地址https://www.toymoban.com/news/detail-489541.html

到了这里,关于一、网络编程之基础知识详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Java SE》网络编程基础知识归纳。

    目录 一、网络基本介绍 1、什么是网络通信? 2、网络 3、IP地址 4、域名 5、网络通信协议 6、Socket 二、TCP网络通信编程  1、应用实例1(字节流) 2、应用实例2(字节流) 3、应用实例3(字符流) 4、netstat 指令 三、UDP网络通信编程  1、基本介绍 2、基本流程 3、应用实例  

    2024年01月20日
    浏览(53)
  • 《3.linux应用编程和网络编程-第8部分-3.8.网络基础》 3.8.1.网络通信概述 3.8.3.网络通信基础知识2

        进程间通信: 管道 、 信号量、 共享内存, 技术多,操作麻烦     线程就是解决 进程间 通信 麻烦的事情,这是线程的 优势 3.8.1.网络通信概述 3.8.1.1、从进程间通信说起: 网络域套接字socket , 网络通信其实就是位于网络中不同主机上面                   的 

    2024年02月15日
    浏览(56)
  • 由浅入深Netty基础知识NIO网络编程

    阻塞模式下,相关方法都会导致线程暂停 ServerSocketChannel.accept 会在没有连接建立时让线程暂停 SocketChannel.read 会在没有数据可读时让线程暂停 阻塞的表现其实就是线程暂停了,暂停期间不会占用 cpu,但线程相当于闲置 单线程下,阻塞方法之间相互影响,几乎不能正常工作,

    2024年02月05日
    浏览(55)
  • Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

    Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现 IP(Internet Protocol) 地址是唯一标识互联网上连接至计算机或其他设备的地址。每一个设备在 IP 网络中拥有一个不同的 IP 地址,它由 32 位二进制数组成,通常表示为四个从 0 到 255 的十进制数之间用 (.)

    2024年02月04日
    浏览(64)
  • C/C++网络编程基础知识超详细讲解第二部分(系统性学习day12)

                懒大王感谢大家的关注和三连支持~       目录 前言 一、UDP编程 UDP特点:  UDP框架: UDP函数学习   发送端代码案例如下: 二、多路复用  前提讲述 select  poll 三、图解如下  总结         作者简介:  懒大王敲代码,正在学习嵌入式方向有关课程stm32,网络

    2024年02月07日
    浏览(73)
  • C/C++网络编程基础知识超详细讲解第一部分(系统性学习day11)

    目录 前言 一、网络的含义与构成 含义: 构成:  二、网络的体系结构 1OSI七层模型 2TCP/IP协议体系结构  3数据经过体系结构,怎么封装?  4端口号 5大小端序 6TCP/UDP传输层的协议  三、系统函数API学习框架(TCP)     服务器(优先):  客户端: 四、服务器和客户端代码实

    2024年02月08日
    浏览(49)
  • C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)

                                                        懒大王感谢大家的关注和三连支持~    目录 前言 一、并发服务器 1.进程并发服务器 实例代码如下:  2.线程并发服务器 实例代码如下:  二、域通信 域通信TCP实例代码如下:  三、广播与组播(UDP)  1.广播 实例代码

    2024年02月05日
    浏览(47)
  • C++网络编程 TCP套接字基础知识,利用TCP套接字实现客户端-服务端通信

    流式套接字编程针对TCP协议通信,即是面向对象的通信,分为服务端和客户端两部分。 1)加载套接字库( 使用函数WSAStartup() ),创建套接字( 使用socket() ) 2)绑定套接字到一个IP地址和一个端口上( 使用函数bind() ) 3)将套接字设置为监听模式等待连接请求( 使用函数

    2024年02月03日
    浏览(60)
  • 【Linux系统基础快速入门详解】SSH远程连接必备网络基础知识详解

    鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) SSH(Secure Shell)是一种网络协议,用于通过加密的方式在不安全的网络上安全地进行远程连接和数据传输。下面是对SSH远程连接的必备

    2024年02月07日
    浏览(67)
  • 【Java 基础篇】Java网络编程实战:P2P文件共享详解

    Java网络编程是现代软件开发中不可或缺的一部分,因为它允许不同计算机之间的数据传输和通信。在本篇博客中,我们将深入探讨Java中的P2P文件共享,包括什么是P2P文件共享、如何实现它以及一些相关的重要概念。 P2P(Peer-to-Peer)文件共享是一种分布式计算模型,其中每个

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包