以太网数据包架构

以太网数据包架构


如果您想要了解相关内容,可以点击跳转本文所在的系列的检索目录,点击跳转


  互连网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP不是一个单一协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的HTTP、FHP协议等等。

首先我们看一下以太网数据结构



 

注意数据长度为46~1500

从物理层上看,一个完整的以太网帧有7个字段,事实上前两个字段(前同步码和SFD码)并不能算是真正的以太网数据帧,它们是网卡在物理层上发送以太网数据时添加上的,是为了实现底层的正确传输。上图中的目的地址,源地址,长度/类型属于以太网首部的部分。

特别说明:上面的目的地址和源地址是MAC,不是IP!!!!

几个常用的协议的功能我们通过一个形象的说法来展现

IP:I want to send data to 192.168.0.127

UDP:I want to send a datagram on the port N

TCP:I want to send data in a reliable way on the port N (reliable:可靠的)

ARP:who knows 192.168.0.127's MAC address?

RARP:who knows 21.21.12.21.21.12's IP address?

ICMP:I send or receive queries or error message

DHCP/BOOTP:I want to get an IP address

DNS:what is the IP address of www.st.com?

关于OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、和物理层,如下图

所谓的协议就是双方进行数据传输的一种格式。整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档。

从网络上传来的数据。我们一层层扒去它的外层(各种协议做的封装),得到真正我们需要的数据。发送网络上的数据也是在添加完各种协议头(封装),才开始发送到网络上,下面我们来看一下网络上数据包的IP--TCP结构。以便我们更好的分析解析出真正的数据。

一、应用层

应用层直接和应用程序接口并提供常见的网络应用服务。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。应用层使用最为广泛,需要的协议标准也是最多的。在应用层可以实现运输、访问和管理,收发电子邮件以及虚拟终端目录服务远程作业录入信息通信等等。例如DNS、HTTP、FTP等协议都是应用在这一层。

二、传输层

传输层是最关键的一层,也是唯一负责总体的数据传输和数据控制的一层。传输层提供端到端的交换数据的机制。传输层对应用层提供可靠的传输服务,对网络层提供可靠的目的地站点信息。TCP是最常用的的传输层协议,它的主要功能是:对一个进行的对话或连接提供可靠的传输服务,在通向网络的单一物理连接上实现该连接的复用,在单一连接上提供端到端的序号与流量控制、差错控制及恢复等服务。

1、TCP连接建立

(a)连接建立 (b)连接终止

图2 TCP协议的建立与终止过程

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。如图2(a)所示,TCP三次握手的过程如下:

客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入

SYN_RECV状态。

客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入

Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

2、TCP连接终止

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如图2(b)所示。

(1) 某个应用进程首先调用close,称该端执行"主动关闭"(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

(2) 接收到这个FIN的对端执行 "被动关闭"(passive close),这个FIN由TCP确认。

(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。

(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

三、网络层

TCP/IP协议体系中的网络层功能由IP协议规定和实现,故又称IP层。网络层介于运输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。

网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。IP定义了在TCP/IP互联网上数据传送的基本单元和数据格式,完成路由选择功能,选择数据传送的路径并且包含了一组不可靠分组传送的规则,指明了分组处理、差错信息发生以及分组的规则。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。

四、数据链层

数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

五、物理层

物理层(Physical Layer)是TCP/IP协议栈中最低的一层,它直接面向实际承担数据传输的物理媒体(即通信通道),物理层的传输单位为比特(bit),即一个二进制位("0"或"1")。实际的比特传输必须依赖于传输设备和物理媒体,但是,物理层不是指具体的物理设备,也不是指信号传输的物理媒体,而是指在物理媒体之上为上一层(数据链路层)提供一个传输原始比特流的物理连接。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。包括网线的制式,网卡的定义等,这一层无协议的编写。

概念:

在 TCP/IP 内部

TCP/IP 中包含一系列用于处理数据通信的协议:

  • TCP (传输控制协议) - 应用程序之间通信
  • UDP (用户数据包协议) - 应用程序之间的简单通信
  • IP (网际协议) - 计算机之间的通信
  • ICMP (因特网消息控制协议) - 针对错误和状态
  • DHCP (动态主机配置协议) - 针对动态寻址

你将在本教程中学习到更多关于这些标准的知识。

端口

TC PU D P采用16 bit的端口号来识别应用程序。那么这些端口号是如何选择的呢?

服务器一般都是通过知名端口号来识别的。例如,对于每个T C P / I P实现来说, F T P服务器的T C P端口号都是2 1,每个Te l n e t服务器的T C P端口号都是2 3,每个T F T P (简单文件传送协议)服务器的U D P端口号都是6 9。任何T C P / I P实现所提供的服务都用知名的11 0 2 3之间的端口号。这些知名端口号由I n t e r n e t号分配机构( Internet Assigned Numbers Authority, IANA)来管理。

1 9 9 2年为止,知名端口号介于12 5 5之间。2 5 61 0 2 3之间的端口号通常都是由U n i x系统占用,以提供一些特定的U n i x服务也就是说,提供一些只有U n i x系统才有的、而其他操作系统可能不提供的服务。现在IANA管理11023之间所有的端口号。I n t e r n e t扩展服务与U n i x特定服务之间的一个差别就是Te l n e tR l o g i n。它们二者都允许通过计算机网络登录到其他主机上。Te l n e t是采用端口号为2 3T C P / I P标准且几乎可以在所有操作系统上进行实现。相反,R l o g i n最开始时只是为U n i x系统设计的(尽管许多非Unix系统现在也提供该服务),因此在80年代初,它的有名端口号为513。客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着的,其服务就运行。

大多数T C P / I P实现给临时端口分配1 0 2 45 0 0 0之间的端口号。大于5 0 0 0的端口号是为其他服务器预留的( I n t e r n e t上并不常用的服务)。我们可以在后面看见许多这样的给临时端口分配端口号的例子。

TCP 使用固定的连接

TCP 用于应用程序之间的通信。

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP TCP 很相似,但是更简单,同时可靠性低于 TCP

IP 是无连接的

IP 用于计算机之间的通信。

IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。

通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。

IP 负责将每个包路由至它的目的地。

IP 路由器

当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。

IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。

在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。

TCP/IP

TCP/IP 意味着 TCP IP 在一起协同工作。

TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。

IP 负责计算机之间的通信。

TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。

IP 负责将包发送至接受者。

IP地址

每个计算机必须有一个 IP 地址才能够连入因特网。

每个 IP 包必须有一个地址才能够发送到另一台计算机。

在本教程下一节,你会学习到更多关于 IP 地址和 IP 名称的知识。

IP 地址包含 4 个数字:

这是你的 IP 地址:222.66.141.10

TCP/IP 使用 4 个数字来为计算机编址。每个计算机必须有一个唯一的 4 个数字的地址。

数字在 0 255 之间,并由点号隔开,像这样:192.168.1.60

TCP 使用固定的连接

TCP 用于应用程序之间的通信。

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP TCP 很相似,但是更简单,同时可靠性低于 TCP

32 比特 = 4 字节

TCP/IP 使用 32 个比特来编址。一个计算机字节是 8 比特。所以 TCP/IP 使用了 4 个字节。

一个计算机字节可以包含 256 个不同的值:

000000000000000100000010000000110000010000000101000001100000011100001000 ....... 直到 11111111

现在,你知道了为什么 TCP/IP 地址是介于 0 255 之间的 4 个数字。

域名

12 个阿拉伯数字很难记忆。使用一个名称更容易。

用于 TCP/IP 地址的名字被称为域名。www.baidu.com就是一个域名。

当你键入一个像https://www.baidu.com/这样的域名,域名会被一种 DNS 程序翻译为数字。

在全世界,数量庞大的 DNS 服务器被连入因特网。DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。

当一个新的域名连同其 TCP/IP 地址一同注册后,全世界的 DNS 服务器都会对此信息进行更新。

猜你喜欢

转载自blog.csdn.net/Firefly_cjd/article/details/79400345
今日推荐