一、网络协议分层
网络协议分不同层次进行开发,每一层分别负责不同的通信功能。
1.1 OSI七层模型
- 分层体系结构的一个主要优点是具有协议复用的能力。这种复用形式允许多种协议共存于同一基础设施中,也允许相同协议对象的多个实例同时存在,并且不会被混淆。
- 复用可以发生在不同层,并在每层都由不同类型的标识符用于确定信息属于哪个协议或信息流。
1.1.1 封装
- PDU:协议数据单元、
- 封装通常与分层一起使用。
- 单纯的封装涉及获得某层的PDU,并在低层将它作为不透明的数据来处理。
- 封装发生在发送方,拆封(还原操作)发生在接收方。
- 多数协议在封装过程中使用头部,少数协议也使用尾部。头部用于在发送时复用数据,接收方基于一个分解(拆分)标识符执行分解。
- 在 TCP/IP 网络中,标识符通常是硬件地址、IP地址和端口号。
- 头部中也包含一些重要的状态信息,如一条虚电路是正在建立还是已经建立。
- 第N-1层的标识符在第N层的分解过程中用于决定正确的接收协议或程序
- 在单纯的分层中,并不是所有网络设备都需要实现所有层。在某些情况下,如果设备只希望执行特定操作,那么它只需要实现少数几层。
1.2 TCP/IP 介绍
1.2.1分层
TCP/IP是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统。总的来说5层分层可以看作是4层分层。
- 链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电脑或是其他介质的物理接口细节
- ARP:地址解析协议,用来转换IP层和链路层使用的地址。IPv4的专用协议,只用于多接入链路层协议。IPV6的地址映射功能作为ICMPV6的一部分。
- RARP:逆地址解析协议,用来转换IP层和网络接口层使用的地址。
- 网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络协议层包括IP协议(网际协议)、ICMP协议(internet 互联网控制报文协议)以及IGMP协议(internet 组管理协议)。
- IP发送给链路层协议的PDU称为IP数据报,大小为 64KB,IPV6将它扩大为4GB。
- 通常用术语”分组“来表示IP数据报。大的分组放入链路层PDU(称为帧)时需要进行缩小处理,这个过程称为分片,它通常由IP主机和某些路由器在必要时执行。
- 在分片的过程中,大数据报的一部分被放入多个称为分片的小数据报中,并在到达目的地后组合(称为重组)。
- 每个IP分组(数据报)都包含发送方和接收方的第3层地址。这些地址称为IP地址。即32位的IPV4地址或128位的IPV6地址。
- 每个数据报的目的地址用于决定将该数据报发送到哪里,而做出此决定和发送数据报到下一站的过程称为转发。路由器和主机都能进行转发,但更多的是由路由器实现转发。
- IP地址由三种类型,地址类型决定如何进行转发:
- 单播:目的地是一台主机
- 广播:目的地是一个指定网络中的所有主机
- 组播:目的地是属于一个组播中的一组主机
- ICMP协议:Internet 控制报文协议,这是IP协议的一个辅助协议,在网络层(辅助)中。IP层使用它与其他主机或路由器的IP层之间交换差错消息和其他重要消息。诊断工具 ping 和 traceroute 都使用ICMP。ICMP消息被封装在IP数据报中,采用与传输层PDU相同的封装方式。
- IGMP协议:internet 组管理协议,为IP协议的另一个辅助协议。采用组播寻址和交付管理来作为组播成员的主机(一组接收方接收一个特定目的地址的组播流量)。
- 运输层:主要为两台主机上的应用程序提供端到端的通信。在TCP/IP 协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
- TCP为两台主机提供可靠性的数据通信,它把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
- 它会处理数据报丢失、重复和重新排序等IP层不处理的问题。采用面向连接(VC)的方式,并且不会保留消息边界。
- TCP发送到IP的PDU称为TCP段
- UDP为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必须的可靠性由应用层提供。为应用程序发送和接收数据报。
- UDP允许应用发送数据报并保留消息边界,但不强制实现速率控制和差错控制
- UDP所做的是提供一套端口号,用于复用、分解数据和校验数据的完整性。
- DCCP:数据报拥塞控制协议,它提供了一种介于 TCP 和 UDP 之间的服务类型:面向连接、不可靠的数据报交换,但具有拥塞控制功能。
- 拥塞控制包括发送方控制发送速率的多种技术,以避免流量堵塞中个网络
- SCTP:流控制传输协议,是用于某些特定系统的传输协议。
- SCTP提供类似于TCP的可靠交付,但不要求严格保持数据的顺序。
- 它还允许多个数据流逻辑上在同一连接上传输,并提供了一个消息抽象,这是它与TCP的主要区别。
- SCTP用于在IP网络上携带信令消息
- TCP为两台主机提供可靠性的数据通信,它把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
- 应用层负责处理特定的应用程序细节。比如下面的应用:
- Telnet:远程登录
- FTP:文件传输协议
- SMTP:简单邮件传送协议
- SNMP:简单网络管理协议
1.2.2 TCP/IP 中的复用、分解和封装
- TCP/IP协议栈将地址信息和协议分解标识符相结合,以决定一个数据报是否被正确接收,以及哪个实体将会处理该数据报。有几层还会检测数值(例如校验和),以保证内容在传输中没有损坏
- 以太网帧包含一个48位的目的地址(又称为链路层或介质访问控制(MAC)地址)和一个16位的以太网类型字段
- 0x0800 表示这个帧包含IPV4数据报
- 0x0806 表示ARP
- 0x86dd 表示IPV6
- 若目的地址与接收方的一个地址匹配,这个帧将被接收并校验差错,以太网类型字段用于选择处理它的网络协议。
- 若接收到的帧包含一个IP数据报,以太网头部和尾部信息将被清除,并将剩余字节交给IP来处理。IP检测一系列的字段,包含数据报中的目的IP地址,如果目的地址与自己的一个IP地址匹配,并且数据报头部没有错误,则检测8位的IPV4协议字段,以决定接下来调用哪个协议来处理。常见的值位:
- ICMP:1
- IGMP:2
- IPV4:4
- TCP:6
- UDP:17
- IPV6:41
- 若网络层认为传入的数据报有效,并已确定正确的传输层协议,则将数据报交给传输层处理。在传输层中,大部分协议(包括TCP和UDP)通过端口号将复用分解到适当的应用。
1.2.3 端口号
-
端口号位16位的非负整数(范围 0~65535)。这些数字是抽象的,在物理上没有指任何东西。
-
每个IP地址又65536个可用的端口号,每个传输协议可使用这些端口号,它们被用于确定正确的接收数据的具体服务。
-
端口号分类:
-
熟知端口号:0~1023,用于识别众所周知的服务,如
-
安全外壳协议:SSH,端口号22
-
FTP:端口号20和21
-
Telnet远程终端协议:端口23
-
电子邮件/简单邮件传输协议:SMTP,端口号25
-
域名系统(DNS,53)
-
超文本传输协议或WEB(HTTP和HTTPS,80)
- 交互式邮件访问协议:IMAP和IMAPS,端口143和993
- 简单网络管理协议:SNMP,端口161和162
- 轻量级目录访问协议:LDAP,端口389
-
-
注册端口号:1024~49151,提供给有特殊权限的客户机和服务器,应避免使用为特定用途和保留的端口号。
-
动态/私有端口号:49152~65535,临时端口号
-
1.2.4 名称、地址和DNS
- 在TCP/IP中,每台计算机(包括路由器)的每个链路层接口至少有一个IP地址,IP地址用来识别主机。
- DNS为一个分布式数据库,提供主机名和IP地址之间的映射。它是一个应用层协议,运行依赖于其他协议
1.3 客户服务器模型
一般来说,TCP服务器是并发的,UDP服务器是重复的。