头图

前言

网络是一名编程人员必须掌握的知识,下面就大概介绍一下相关知识点,详细篇后续推出。

目录

  • 一 网络层次划分
  • 二 TCP/IP 协议
  • 三 五层因特网协议栈
  • 四 OSI 模型和 TCP/IP 区别

一 网络层次划分

为了使不同的计算机可以相互通信,以便在更大的范围建立计算机网络,国际标准化组织(ISO)提出了“开放系统互联参考模型”,即著名的 OSI/RM 模型(Open System Interconnection/Reference Model)。
将计算机网络体系结构的通信协议划分为 7 层,如图所示:

 title=

各层详解:

物理层

最底层负责逻辑信号(比特流)与物理信号(光、电信号)之间的相互转换,提供一个传输数据的可靠物理媒介确保原始数据可在各种物理媒体上传输

常用设备有:集线器、中继器、调制解调器、网线、双绞线、同轴电缆

数据链路层

该层有物理地址寻址、数据的成帧、流量控制、数据的检错、重发等功能。将比特组合成字节进而组合成帧,用 MAC 地址访问介质,能发现错误但无法纠正。在不可靠的物理介质上提供可靠的传输。

网络层

主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方IP地址就是在网络层被定义的。
通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中节点 A 到另一个网络中节点 B 的最佳路径。

传输层

用于定义端到端传输数据的协议端口号,以及流控和差错校验,负责可靠传输。包含了TCP,UDP等协议。

会话层

用于建立、管理、终止会话。控制应用程序之间的会话能力,如不同软件数据分发给不同软件。

表示层

数据的表示、安全、压缩。可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。它的行为:数据格式标识、基本压缩和加密功能

应用层

最靠近用户的一层,这一层为用户使用的应用程序提供网络服务。简单来说就是各种应用软件,包括 Web 应用。是针对应用的协议。<br/>
提供的服务包括: 文件传输、文件管理以及电子邮件的信息处理。

二 TCP/IP 协议

按层次分,IP(Internet Protocol)网际协议位于网络层,IP 协议的作用是把找到数据包传送给对方的最优路径。而要保证找对接收方,则需要满足各类条件。
其中两个重要的条件是 IP 地址MAC 地址(Media Access Control Address)。<br/>

1 IP 地址和 MAC 地址

指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址,IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。<br/>
IP 间的通信依赖 MAC 地址。使用地址解析协议,即 ARP(Address Resolution Protocol),根据通信方的 IP 地址反查出对应方的 MAC 地址,凭借 MAC 地址进行通信。

2 TCP 协议如何保持传输的可靠性

2-1、TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

1)面向连接意味着两个使用 TCP 的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个 TCP 连接。在一个 TCP 连接中,仅有两方进行彼此通信。

2)字节流服务意味着两个应用程序通过 TCP 连接交换 8bit 字节构成的字节流,TCP 不在字节流中插入记录标识符。

2-2、之所以可靠,大体上由于以下原因:

1)数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时 TCP 发送数据端超时后会重发数据;

2)对失序数据包重排序:既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报文段的到达也可能会失序。TCP 将对失序数据进行重新排序,然后才交给应用层;

3)丢弃重复数据:对于重复数据,能够丢弃重复数据;

3)应答机制:当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

5)超时重发:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

6)流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。

2-3、TCP 三次握手

 title=

1)第一次握手:建立连接时,向服务器发出连接请求报文,这是报文首部中的同部位 SYN = 1,同时选择一个初始序列号 seq = x ,客户端进程进入了 SYN-SENT (同步已发送状态)状态,等待服务器确认;

2)第二次握手:服务器收到 syn 包后,如果同意连接,则发出确认报文; 确认报文 ACK = 1,SYN = 1,确认号是 ack = x + 1,同时也要为自己初始化一个序列号 seq = y,此时服务器进程进入了 SYN-RCVD(同步收到)状态;

3)第三次握手:客户端收到服务器的 SYN+ACK 包,要向服务器给出确认。确认报文的 ACK = 1,ack = y + 1,自己的序列号 seq = x + 1,此时,TCP 连接建立,客户端进入 ESTABLISHED (已建立连接)状态。

完成三次握手,客户端与服务器开始传送数据。

注:<br/>
seq:"sequance" 序列号;<br/>
ack:"acknowledge" 确认号;<br/>
SYN:"synchronize" 请求同步标志;<br/>
ACK:"acknowledge" 确认标志;<br/>
FIN:"Finally" 结束标志。<br/>

建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由 TCP 的半关闭(half-close)造成的。

2-4、四次挥手

 title=

1)第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部 FIN=1,其序列号为 seq = u(等于前面已经传送过来的数据的最后一个字节的序号加 1),此时,客户端进入 FIN-WAIT-1(终止等待 1)状态。

2)第二次挥手:服务器收到连接释放报文,发出确认报文,ACK = 1,ack = u + 1,并且带上自己的序列号 seq = v,此时,服务端就进入了 CLOSE-WAIT(关闭等待)状态。

TCP 服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个 CLOSE-WAIT 状态持续的时间。<br/>
客户端收到服务器的确认请求后,此时,客户端就进入 FIN-WAIT-2(终止等待 2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

3)第三次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN = 1,ack = u + 1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为 seq = w,此时,服务器就进入了 LAST-ACK(最后确认)状态,等待客户端的确认。

4)第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK = 1,ack = w + 1,而自己的序列号是 seq = u + 1,此时,客户端就进入了 TIME-WAIT(时间等待)状态。

注意此时 TCP 连接还没有释放,必须经过 2MSL(最长报文段寿命)的时间后,当客户端撤销相应的 TCB 后,才进入 CLOSED 状态。

服务器只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,就结束了这次的 TCP 连接。

可以看到,服务器结束 TCP 连接的时间要比客户端早一些。
四次的原因:

这是因为服务端的 LISTEN 状态下的 SOCKET 当收到 SYN 报文的建连请求后,它可以把 ACK 和 SYN(ACK 起应答作用,而 SYN 起同步作用)放在一个报文里来发送。 但关闭连接时,当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必会马上会关闭 SOCKET ,也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的.

由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

三 五层因特网协议栈

应用层

应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。

我们把应用层交互的数据单元称为报文

域名系统

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

HTTP 协议

超文本传输协议( HyperText Transfer Protocol )是互联网上应用最为广泛的一种网络协议。所有的 WWW(万维网) 文件都必须遵守这个标准。

传输层

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

传输层常用的两种协议

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

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

TCP(Transmisson Control Protocol)

1)TCP 是面向连接的(需要先建立连接);

2)每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是一对一;

3)TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达;

4)TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

5)面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。

UDP(User Datagram Protocol)

1)UDP 是无连接的;

2)UDP 是尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态;

3)UDP 是面向报文的;

4)UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如直播,实时视频会议等);

5)UDP 支持一对一、一对多、多对一和多对多的交互通信;

6)UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

单工数据传输只支持数据在一个方向上传输
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

网络层

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

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

数据链路层

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

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

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

物理层

在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。

四 OSI 模型和 TCP/IP 区别

 title=


Durant
0 声望0 粉丝

长期and价值