计算机网络基础

琬淇 程序媛琬淇


目录

  • 什么是计算机网络

  • 常见的网络

  • 计算机网络的作用

  • 计算机网络的分类

  • 网络协议

  • OSI(Open System Interconnection 开放式系统互连)模型(协议规范)

  • TCP/IP 网络模型

  • 为什么要对网络协议进行分层

  • TCP/IP协议簇详解

  • 传输层中的TCP和UDP

  • 三次握手

  • 四次挥手




什么是计算机网络


计算机网络就是利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统。


  • 功能独立的计算机:能正常打开使用的计算机,比如可以查看图片、听本地音乐、单机游戏等。

  • 地理位置不同:一台计算机在北京,一台在上海。

  • 通讯线路:网线、光纤、无线等。

  • 设备:光猫。(光猫的作用:首先我们要知道电脑只能识别数字信号,而光纤传输的是光信号,光猫的作用就是将光信号转换成数字信号使电脑能够识别)。



常见的网络


我们家里的电脑要想上网的话都通过运营商(电信、联通、移动)拉一根光纤,电脑连上光纤之后才可以上网,光纤的作用就是实现计算机互联的通讯线路。本端连接上了运营商,对端也连接上了运营商,而运营商内部都是互联的,那两端就间接的通过运营商实现了互连,实现了互联的计算机才可以进行通讯。


两台计算机相连就组成了一个简单的网络。



计算机网络的作用


  • 软件共享:例如FTP服务器,百度云盘等。

  • 硬件共享:比如网络打印机,绘图仪。(当打印机连接到网络上之后,其他相同连接到此网络的计算机可以共同使用一台打印机)。

  • 信息资源共享:比如百度搜一些问题。


计算机网络主要功能是为了实现资源共享与信息传递,百度,qq,微信,百度网盘这些网络软件的作用就是为了实现资源共享与信息传递的。



计算机网络的分类


按照覆盖范围分:计算机网络可以分为局域网(LAN)、城域网(MAN)和广域网(WAN)。


局域网:是一个高速数据通信系统,它在较小的区域内将若干独立的数据设备连接起来,使用户共享计算机资源。局域网的地域范围一般只有几公里。局域网的基本组成包括服务器、客户机、网络设备和通信介质。通常局域网中的线路和网络设备的拥有、使用、管理一般都是属于用户所在公司或组织的。


城域网:它在局域范围和数据传输速率两方面与LAN有所不同,其域范围从几公里至几百公里,数据传输速率可以从几Kbit/s到几Gbit/s。MAN能向分散的局域网提供服务。对于MAN,最好的传输媒介是光纤,因为光纤能够满足城域网在支持护具、声音、图形和图像业务上的带宽容量和性能需求。


广域网:覆盖范围为几百公里至几千公里,由终端设备、节点交换设备和传送设备组成。一个广域网的骨干网络常采用分布式网络网状机构,在本地网和接入网中通常采用的是树型或星型链接。广域网的线路与设备的所有权和管理权一般是属于电信服务提供商,而不属于用户。



网络协议


互联网的本质就是一系列的协议。


一台硬件设备有了操作系统,然后装上软件你就可以正常使用了,每个人都拥有一台自己的机器,然后彼此孤立。


如何能让大家一起玩耍,就有了初步的网络,其实两台计算机之间通信与两个人打电话之间通信的原理是一样的,普通话属于中国国内人与人之间通信的标准,那如果是两个国家的人交流呢?问题是,你不可能要求一个人/计算机掌握全世界的语言/标准,于是有了世界统一的通信标准:英语,英语成为世界上所有人通信的统一标准。


在计算机网络中,计算机之间要实现连接和通信,也需要遵守一定的规则,我们把这种连接和通信的规则称为“网络通信协议”,它对数据的传输格式,传输速率和传输步骤等都做了统一规定,通信双方都必须遵守才能完成数据交换。


互联网协议的功能:定义计算机如何接入Internet,以及接入Internet的计算机通信的标准。



OSI(Open System Interconnection 开放式系统互连)模型(协议规范)


为了使不同体系结构的计算机网络都能互联,国际标准化组织 ISO 于1977年提出了一个试图使各种计算机在世界范围内互联成网的标准框架,即着名的开放系统互联基本参考模型 OSI/RM,简称为OSI。


OSI把网络通信的工作分为7层,分别是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。


关于OSI七层模型详解点我



TCP/IP 网络模型


OSI 是标准化组织为了实现设备互联而提出的一个纯理论的框架性的概念。也可就是说:它只能告诉我们一个网络应该具备哪些功能,某个功能的实现是在某个层次,但具体的实现技术他是不进行规范的。


因为OSI的网络模型标准比较严格,另外推出的时间也相对较晚,所以目前还没有完全按照OSI模型实现的网络。


TCP/IP是另一种网络模型。是我们实际应用最广泛的一种网络的模型。在这个模型中,不只是划分了功能层,还有具体的实现技术,即协议。

TCP和IP就是这个模型中最重要的两个层次的代表协议。


这两个模型之间可以说是完全独立的,因为OSI是一种理论上的指导,而TCP/IP是一种事实上的标准。


但两者也是有一定联系的,两者都是网络模型,都存在某些相同的层次。另外,OSI是一个通用性的指导,它不仅可以解释TCP/IP,还可以解释任何一种类型的网络。而tcp/ip是无法解释其他网络的。


TCP/IP协议在一定程度上参考了OSI的体系结构,在TCP/IP协议中,OSI被简化成了四层:应用层,传输层,网络层和网络接口层;有时候为了方便理解TCP/IP,也会划分为五层:应用层、传输层、网络层、数据链路层、物理层,但实际应用还是四层。


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


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


  • 因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层一个层次里。只有四层体系结构的TCP/IP协议,与有七层体系结构的OSI相比要简单了不少,也正是这样,TCP/IP协议在实际的应用中效率更高,成本更低。


从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。


互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。




不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。



为什么要对网络协议进行分层


  • 简化问题难度和复杂度,由于各层之间独立,可以分隔大问题为小问题。

  • 灵活性好,当其中一层的技术变化时,只要层间接口关系保持不变,其它层不受影响。

  • 易于实现和维护。

  • 促进标准化工作,分开后,每层功能可以相对简单的被描述。


网络协议分层的缺点:功能可能出现在多个层里,产生了额外开销。



TCP/IP协议簇详解


这里分为五层讲解。


1)应用层(application layer)


主要任务是通过应用进程间的交互来完成特定网络应用。

应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。


对于不同的网络应用需要不同的应用层协议,在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。


2)传输层(transport layer)


主要任务就是负责向两台主机进程之间的通信提供通用的传输服务。应用进程利用该服务传送应用层报文。

运输层主要使用以下两种协议:


  • 传输控制协议-TCP:提供面向连接的,可靠的数据传输服务。

  • 用户数据协议-UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。


TCP:

是否连接: 面向连接

是否可靠: 可靠传输,使用流量控制和拥塞控制

连接对象个数: 只能是一对一通信

传输方式: 面向字节流

首部开销: 首部最小20字节,最大60字节

使用场景: 适用于要求可靠传输的应用,例如文件传输


拥塞控制:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。


UDP:

是否连接: 无连接

是否可靠: 不可靠传输,不适用流量控制和拥塞控制

连接对象个数: 支持一对一、一对多、多对一和多对多交互通信

传输方式: 面向报文

首部开销: 首部开销小,仅8个字节

使用场景: 适用于实时应用(IP电话、视频会议、直播等)


每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一。


运行在TCP协议上的协议:


  • HTTP(Hypertext Transfer Protocol 超文本传输协议):主要用于普通浏览。


  • HTTPS(Hypertext Transfer Protocol SSL 安全超文本传输协议):HTTP协议的安全版本。


  • FTP(File Transfer Protocol 文件传输协议):用于文件传输。


  • POP3(Post Office Protocl,version 3 邮局协议):收邮件用。


  • SMTP(Simple Mail Transfer Protocol 简单邮件传输协议):用来发送电子邮件。


  • TELNET(Teletype over the NetWork 网络电传):通过一个终端(terminal)登录到网络。


  • SSH(Secure Shell 用于替代安全性差的TELNET):用于加密安全登录。

运行在UDP协议上的协议:


  • BOOTP(Boot Protocol 启动协议):应用于无盘设备。

  • NTP(Network Time Protocol 网络时间协议):用于网络同步。

  • DHCP(Dynamic Host Configuration Protocol 动态主机配置协议):动态配置IP地址。

运行在TCP/UDP协议上:


  • DNS(Domain Name Service 域名服务):用于完成地址查找,邮件转发等工作。


3)网络层


主要任务:选择合适的网间路由和交换节点,确保计算机通信的数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。


互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Protocol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。

4)数据链路层


数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用到专门

的链路层协议。


在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。


在接收数据时,控制信息使接收端能够知道一个帧从哪个bit开始和到哪个bit结束。


发送端在层与层之间传输数据时,每经过一层会被打上一个该层所属的首部信息;反之,接收端在层与层之间传输数据时,每经过一层时会把对应的首部信息去除。


5)物理层


物理层(或称物理层,Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。


物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。


五层协议的体系结构只是为了介绍网络原理而设计的,实际应用还是 TCP/IP 四层体系结构。


数据处理流程


下图以用户 a 向用户 b 发送邮件为例子:



  • ① 应用程序处理

    首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;

    编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。


  • ② TCP 模块的处理

    TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。


  • ③ IP 模块的处理

    IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。


  • ④ 网络接口(以太网驱动)的处理

    从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。


  • ⑤ 网络接口(以太网驱动)的处理

    主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。

    如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。


  • ⑥ IP 模块的处理

    IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。

    另外,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。


  • ⑦ TCP 模块的处理

    在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。


  • ⑧ 应用程序的处理

    接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。



传输层中的TCP和UDP


TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。


  • TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备 流控制(流量控制)拥塞控制、提高网络利用率等众多功能。


  • UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。


  • TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。



三次握手


TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。


TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。


一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个链接,通过四次挥手来关闭一个连接。


当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。


TCP报文的头部结构


在了解TCP连接之前先来了解一下TCP报文的头部结构。


上图中有几个字段需要重点介绍下:


(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。


(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。


(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:


  • ACK:确认序号有效。

  • FIN:释放一个连接。

  • PSH:接收方应该尽快将这个报文交给应用层。

  • RST:重置连接。

  • SYN:发起一个新连接。

  • URG:紧急指针(urgent pointer)有效。


需要注意的是:


  • 不要将确认序号ack与标志位中的ACK搞混了。

  • 确认方ack=发起方seq+1,两端配对。


三次握手


三次握手的本质是确认通信双方收发数据的能力。


首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。


于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。


然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。


这,就是三次握手,这样说,你理解了吗?



  • 第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。


  • 第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。


  • 第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。




四次挥手


四次挥手的目的是关闭一个连接。



比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。


  • 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。


  • 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。


  • 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。


  • 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。



参考文章


thinkwon.blog.csdn.net/article/details/104903925


blog.csdn.net/taotongning/article/details/81352985


baijiahao.baidu.com/s?id=1657526848437688729&wfr=spider&for=pc


baike.baidu.com/item/TCP%2FIP%E5%8D%8F%E8%AE%AE#5


zhuanlan.zhihu.com/p/143406591


文章推荐