计算机网络协议——OSI、TCP数据、IP数据包、Ethernet 数据包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq193423571/article/details/83149746

计算机网络

欢迎关注公众号二月鸟的博客。

1、协议体系介绍

协议

1.1 五层协议

  1. 应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。
  2. 传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
  3. 网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
  4. 数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
  5. 物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。

1.2 OSI

其中表示层和会话层用途如下:

表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。

会话层 :建立及管理会话。

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。

1.3 TCP/IP

TCP/IP

它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。

TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。

1.4 各层协议/及应用层协议详解

各层协议汇总:

OSI层 功能 协议
应用层 Application layer 各种应用,如文件传输、电子邮件、虚拟终端等应用 TFTP、HTTP、SNMP、FTP、DNS、SMTP、TELNET、POP3、IMAP、DHCP
表示层 Presentation layer 数据格式化、代码转换、数据加密、数据翻译、压缩 JPEG、MPEG、ASII
会话层 Session layer 解除或建立与其他节点的联系 RPC、NFS、SQL
传输层 Transport layer 提供端对端的接口 TCP、UDP、SPX
网络层 Network layer 对数据包选择路由 IP、ICMP、RIP、BGP、IGMP、OSPF、ARP、RARP
数据链路层层 Data Link layer 传输有地址的帧,错误检测功能 SLIP、CSLIP、PPP、MTU、MAC、VLAN、FR
物理层 Physical layer 以二进制数据形式在物理媒体上传输数据 ISO2110、IEEE802、IEEE802.2、CLOCK

ARP和RARP 是网络层的协议,但是它所工作的内容是链路层的。具体来说应该是在网络层。


下面是应用层协议

应用 应用层协议 端口号 传输层协议 备注
域名解析 DNS 53 UDP/TCP 长度超过 512 字节时使用 TCP
动态主机配置协议 DHCP 67/68 UDP
简单网络管理协议 SNMP 161/162 UDP
文件传送协议 FTP 20/21 TCP 控制连接 21,数据连接 20
远程终端协议 TELNET 23 TCP
超文本传送协议 HTTP 80 TCP
简单邮件传送协议 SMTP 25 TCP
邮件读取协议 POP3 110 TCP
网际报文存取协议 IMAP 143 TCP

2、 数据在各层的传递关系

 数据传输

拆解图中数据包:

  1. 数据是用户真正看到的数据
  2. H5 是用来给对应的应用层进行解析的首部数据
  3. H4 是运输层协议对应用层的数据包信息补充的首部,比如会在首部中添加端口号等信息,不同的协议,首部长度也会有区别。
  4. H3 是网络层协议对传输层的数据包信息补充的首部,比如 IP 协议会在首部中放入机器的IP地址。
  5. H2 是数据链路层对网络层的数据包信息补充的首部,比如,在首部添加机器的MAC地址。

最底层就是数据包在物理层的传输方式——比特流,这一层主要是负责传送0和1的电信号构成的比特流。

整体数据包结构如图(传输协议使用TCP、网络协议采用IP):


2.1 应用层数据包

应用层是距离用户最近的一层,主机上的一个个进程构成了应用层,应用层的数据包是具体应用规定的应用程序的数据格式。

如 HTTP 数据包规定的数据格式: 请求行、请求头、空白行、请求体。

2.2 传输层数据包

端口(0-65535):每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。0到1023的端口通常被系统占用,用户最好选用大于1023的端口。

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,“网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字”(socket)。有了它,就可以进行网络应用程序开发了。
传输层的主要协议是 TCPUDP 协议。

TCP协议的数据首部信息

  • 源端口号:数据报来源主机的端口号。
  • 目的端口号:数据报目的主机的端口号。
    源IP地址,目的IP地址,源端口号,目的端口号这四个字段唯一的确定了一个TCP链接。
  • TCP序号(seq):发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数,比如我发送的第一个报中sq=0,数据报内容20字节,那么下一个数据报的sq就应该是21。
  • 捎带的确认(ack):确认收到上一个数据报,然后act的值是指定自己想要收到的下一个数据报的sq,比如我收到一个数据报的sq=0,数据报内容20字节,那么我的ack就应该是21,用来标明我sq=0,内容为20字节的数据报已经收到,我接下来期望收到的是sq=21的数据报。
  • 首部长度:和IP头部的长度域类似,这个域用来标明TCP头部的长度,单位也是字。
  • 保留:6bit未使用的域
  • Flag:从左到右,[URG|ACK|PSH|RST|SYN|FIN]
  • ACK 设置为1表示前面的确认(ack)是有效的,否则前面的确认应被忽略。
  • PSH 表示要求对方在接到数据后立即请求递交给应用程序,而不是缓冲起来直到缓冲区收满为止。
  • RST 用于重置一个已经混乱的连接。
  • SYN 用于建立连接的过程。在链接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域。链接应答则捎带了一个确认,即SYN=1和ACK=1.本质上SYN位是用来表示CONNECTION
    REQUEST和CONNECTION ACCEPTED,然后进一步用ACK来区分是请求还是应答,的确很高明。
  • FIN 用来释放一个连接。它表示发送方已经没有数据要传输了。然后,在关闭一个连接后,关闭进程可能会在一段不确定的时间内继续接收到数据。SYN和FIN数据段都有TCP序号,从而保证了这两种数据段被按照正确的顺序来进行处理。
  • 窗口大小:指定了从被确认的字节算起可以发送多少个字节。要深入理解这个域的含义,可以参看TCP用色控制和慢启动算法
  • 校验和:校验范围包括TCP头、数据报内容和概念性伪头部。概念性伪头部又包括源IP,目的IP,TCP协议号。
  • 紧急指针:指向数据报中紧急数据最后一个字节的下一个字节。

因为 TCP 包的首部要占用20字节,所以这的MTU为1480 -20 = 1460 字节


UDP 协议数据包首部信息

  • 源端口号: 表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。 占 2 个字节
  • 目标端口号: 表示接收端端口号,字段长度16位,占 2 个字节
  • 包长度: 该字段保存了UDP首部的长度跟数据的长度之和。占 2 个字节。
  • 校验和: 校验和是为了提供可靠的UDP首部和数据而设计。在计算校验和时,如图所示,附加在UDP伪首部与UDP数据报之前。通过在最后一位增加一个“0”将全长增加16倍。此时将UDP首部的校验和字段设置位“0”。然后以16比特为单位进行1的补码和,并将所得到的1的补码和写入校验和字段。 占 2 个字节。

因为 UDP 包的首部要占用8字节,所以这的MTU为1480 -8 = 1472 字节

2.3 网络层数据包

IP 包头格式:

  • 版本:记录数据报属于哪一个版本的协议,如IPv4或IPv6
  • 首部长度:指明IP头部长度,它指明的是首部占32bit的数目,(即单位为4Byte)。该域的值最小为5,就是标准的头部长度;最大为15,表明有扩展部分。
  • 服务类型:用来区分不同服务的需要
  • 数据报总长:包含IP头部的数据报的总长度。注意,这里不包括链路层的头部,目前最大值是65535字节。
  • 分组ID:这个域的作用是当一个大的数据报被拆分时,拆分成的小的数据段的这个域都是一样的。
  • 标记:共三个bit,第一个未使用;第二个DF(Don’t Fragment),设置成1表示这个数据包不能被分割,这个是针对路由器的一条指令;第三个MF(MoreFragment),如果一个数据包被分割了,那么除了最后一个分段以外的所有分段都必须设置为1,用来表示后面还有更多的分段没有到达,最后一个设置为0,用来表示分割的段全部到达。
  • 段偏移量:这个域有13bit,也就是每一个数据报最多有8192个分段。每一个分段的长度必须是8字节的倍数,也就是说8字节是分段的基本单位,当然分组的最后一个段不做限制。这样最大的数据报长度为8*8192=65536字节,比目前限制的最大数据报长度还多1,能够满足对网络中所有数据报传送的需求。
  • 生存时间:这是一个生存期计数器,最大为255s,但是实际上使用的时候用作跳数计数器,当值为0时数据报被丢弃,用来避免一个数据报过久的逗留在网络中。
  • 高层协议:这里和链路层的类型作用相同,用来表示更高层的协议,这个数据报里是TCP
  • 首部校验和:IP头部的校验和
  • 源IP地址:数据报来源主机的IP地址
  • 目的IP地址:数据报目的主机的IP地址

因为IP包的首部要占用 20 字节,所以这的MTU为1500-20 = 1480 字节

2.4 数据链路层数据包

以太网的数据包(数据链路层的数据包)的最大传输单元( MTU )大小是固定的,最初是 1518 字节,后面增加到 1522 字节,其中 1500 是负载字节,22 字节是头信息。

Ethernet II 帧结构:

名称 长度
D-MAC 6 字节
S-MAC 6 字节
类型 Type 2 字节
数据 46-1500 字节
CRS 4 字节

Ethernet SNAP 帧结构:

名称 长度
D-MAC 6 字节
S-MAC 6 字节
长度 Length 2 字节
DSAP 1 字节
SSAP 1字节
数据 46-1500 字节
CRS 4 字节
  • 目的 MAC 地址(Destination MAC) 它首先使用最低有效位(IEB)传送48位值。接收方站点使用D-MAC来决定一个进入的数据包是否被送往特定的节点。目的地址可以是单独的地址,或者是广播或组播MAC地址。记住,广播地址为全1(十六进制形式为全F)并被送往所有设备,但组播地址只被送往网络中节点的同类子集。
  • 源 MAC 地址(Source MAC) S-MAC 是48位的MAC地址,用来识别发送没备,它首先使用LSB。在 S-MAC 字段中,广播和组播地址格式是非法的。
  • 类型(Type) 数据包类型,识别网络层的协议,如 IP(0x0800)、ARP(0x0806))
  • 数据(Data) 这是从网络层传送到数据链路层的数据包。它的大小可以在46~1500字节之间变化。
  • 循环冗余校验(CRC) 循环冗余校验(CRC)是位于帧末尾的字段,它用来表示帧校验序列(FraIue check sequence,FCS)。
  • DSAP(Destation service access point) 目的 SAP
  • SSAP(Source service access point ) 源 SAP
  • SAP 表示帧的上层协议。

其他网络的最大传输单元如下:

猜你喜欢

转载自blog.csdn.net/qq193423571/article/details/83149746