网络(一):网络模型和协议
TCP/IP 网络模型有哪几层?
- 应用层(message消息或报文):工作在操作系统中的用户态,传输层及以下则工作在内核态
- 传输层(segment段):为应用层提供网络支持,如 TCP(Transmission Control Protocol 传输控制协议)、UDP(用户数据报协议 User Datagram Protocol)
- 网络层(packet包):网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文
- 网络接口层(frame帧):网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上
IP 地址分成两种意义:
- 一个是网络号,负责标识该 IP 地址是属于哪个「子网」的;
- 一个是主机号,负责标识同一「子网」下的不同主机;
IP地址 & 子网掩码 = 网络号
IP地址 & 子网掩码取反 = 主机号
CIDR(Classless Inter-Domain Routing 无类别域间路由)是一种对IP地址进行分配和路由选择的标准方法。
OSI(Open System Interconnection Reference Model 开放式系统互联通信参考模型)
- 物理层(Physical Layer):负责传输原始的比特流,处理物理介质、电压等物理连接细节。
- 数据链路层(Data Link Layer):在直接连接的节点之间传输数据,处理帧(Frame)的发送和接收,提供可靠的数据传输。
- 网络层(Network Layer):负责在不同网络之间进行路径选择和数据包转发,处理数据包的路由和寻址。
- 传输层(Transport Layer):提供端到端的可靠数据传输,负责分段、流控制、差错检测和恢复等功能。
- 会话层(Session Layer):建立、管理和终止应用程序之间的会话,负责进行对话控制和同步。
- 表示层(Presentation Layer):处理数据的表示格式,负责数据的加密、压缩、解压缩以及数据格式的转换等。
- 应用层(Application Layer):提供直接面向用户的应用服务,包括各种应用程序和协议,如电子邮件、文件传输、远程登录等。
ARP(Address Resolution Protocol 地址解析协议)
ARP 是用于在局域网(LAN)中将IP地址解析为对应的物理MAC地址的协议。
在计算机网络中,数据包在传输过程中需要知道目标设备的物理地址(MAC地址),而通常应用程序使用的是目标设备的IP地址。ARP 协议(如果目标设备的 IP 地址和 MAC 地址映射在 ARP 缓存中不存在)通过在局域网内广播请求,询问某个IP地址对应的MAC地址,从而实现 IP 地址到 MAC 地址的解析。
ICMP(Internet Control Message Protocol Internet控制报文协议)
ICMP 是一种网络协议,用于在IP网络中传输控制和错误消息。
ICMP 协议的主要功能包括以下几个方面:
- 错误报告:当在网络通信中出现错误时,ICMP 可以生成和传输错误报文给源设备,以通知发送者发生的问题。例如,当目标主机不可达、数据报超时、端口不可达等情况发生时,ICMP 可以生成相应的错误报文。
- 回显请求和回显回答:ICMP 提供了回显请求(Ping)和回显回答的功能。通过发送一个回显请求消息到目标设备,可以测试目标设备是否可达和计算往返时间(RTT)。目标设备收到回显请求后,会发送一个回显回答消息作为响应。
- 传输状况报告:ICMP 可以传输有关网络状况的信息。例如,当路由器转发数据报时,可以使用 ICMP 来发送传输状况报告,如 TTL(生存时间)过期报文等。
- 网络重定向:当路由器发现数据包正在沿着非最佳路径传输时,它可以使用 ICMP 报文发送网络重定向消息,告知发送者采用更佳的路径。
ICMP 协议通常工作在网络层(第3层),它直接封装在 IP 数据报中传输。它在网络通信中起到控制和诊断的作用,帮助网络管理员监控和排除网络问题,并提供了一些基本的网络工具和命令,如 Ping 和 Traceroute。
TCP报文
-
源端口和目的端口:各16bits,端口是传输层与应用层的服务接口
-
序号seq:32bits,TCP 连接中传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
-
确认号ack:32bits,是期望收到对方的下一个报文段的数据的第一个字节的序号
-
数据偏移:4bits,表示首部长度包含可选部分,最小单位为32bits
-
保留:6bits,保留为今后使用,但目前应置为 0
-
URG:当 URG=1 时,表示紧急数据,相当于高优先级的数据,尽快传送
ACK:当 ACK=1 时确认号字段才有效,当 ACK=0 时无效
PSH(PuSH):当 PSH = 1 时,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
RST (ReSeT):当 RST=1 时,由于主机崩溃或其他等原因必须释放然后再重新建立连接
SYN:当 SYN = 1 时,表示这是一个连接请求或连接接受报文
FIN:但 FIN=1 时,表示发送方的数据已发送完毕,要求释放连接
-
窗口大小:16bits,窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
-
检验和:16bits,校验首部前12字节 + 数据部分
-
紧急指针:16bits,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
-
选项options:长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。 这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)
-
填充:使整个首部长度是 4 字节的整数倍
options 字段
TCP报文中的选项(Options)字段具有以下结构:
- 选项类型(Option Kind):1字节,表示选项的类型。常见的选项类型包括:
- 0:表示选项字段的结束标记(End of Option List)。
- 1:表示无操作(No-Operation),用于填充字节和对齐选项字段。
- 2:表示最大报文段长度(Maximum Segment Size,MSS)。
- 3:表示窗口扩大因子(Window Scale)。
- 4:表示选择确认(Selective Acknowledgment,SACK)。
- 其他选项类型还包括时间戳(Timestamp)、窗口探测(Window Probe)等。
- 选项长度(Option Length):1字节,表示选项字段的长度,包括选项类型字段和选项数据字段的总长度。
- 选项数据(Option Data):可变长度,根据选项类型的不同而具体确定。选项数据字段包含了选项的具体内容和参数。
TCP报文的选项字段可以包含多个选项,按顺序排列。每个选项的结构由选项类型、选项长度和选项数据组成。选项字段的长度是根据选项数据的实际长度计算得出的。
在TCP报文头中,选项字段紧跟在固定长度的报文头字段后面。如果选项字段的长度不是4字节的倍数,将会使用填充字节进行对齐,确保选项字段的起始位置是4字节对齐的。
选项字段的使用是根据需要和协商来确定的。发送方和接收方需要共同支持并理解使用的选项类型和相应的选项数据格式,以确保正确的解析和处理。选项字段的存在为TCP协议提供了一定的灵活性和功能扩展性,允许在TCP报文中传递额外的信息和实现协议的扩展功能。