第三章 常用协议
文章目录
- 一、TCP/UDP协议
- 1、传输层
- 2、报文格式
- (1)、TCP报文头部:
- (2)、UDP报文头部:
- 3、端口号
- 4、TCP的建立——三次握手
- (1)、TCP连接建立的详细过程如下:
- 5、TCP的关闭——四次握手
- 6、TCP的序列号与确认序列号
- (1)、传输过程
- 7、TCP的窗口滑动机制
- 二、ARP协议
- 1、数据链路层
- 2、以太网
- 3、以太网MAC地址
- 4、工作原理
- 三、ICMP
- 1、定义
- 2、作用
一、TCP/UDP协议
1、传输层
传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”(Port to Port)的连接。
传输层的PDU被称为Segment(段)。传输层协议:
TCP:一种面向连接的、可靠的传输层通信协议,由IETF的RFC 793定义。
UDP:一种简单的无连接的传输层协议,由IETF的RFC 768定义。
2、报文格式
(1)、TCP报文头部:
Source Port:源端口,标识哪个应用程序发送。长度为16比特。
Destination Port目:的端口,标识哪个应用程序接收。长度为16比特。
Sequence Number:序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。
Acknowledgment Number:确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。
Header Length:头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。
Reserved:保留,必须填0。长度为6比特。
Control bits:控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。
Window:窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。
Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。
Urgent:紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。长度为16比特。
Options:选项字段(可选),长度为0-40字节。
(2)、UDP报文头部:
Source Port:源端口,标识哪个应用程序发送。长度为16比特。
Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。
Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。
3、端口号
客户端使用的源端口一般随机分配,目标端口则由服务器的应用指定;
源端口号一般为系统中未使用的,且大于1023;
目的端口号为服务端开启的应用(服务)所侦听的端口,如HTTP缺省使用80。
4、TCP的建立——三次握手
任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。
(1)、TCP连接建立的详细过程如下:
由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。
5、TCP的关闭——四次握手
当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。
TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:
- 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
- PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
- 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
- PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。
6、TCP的序列号与确认序列号
TCP使用序列号和确认序列号字段实现数据的可靠和有序传输。
(1)、传输过程
假设PC1要给PC2发送一段数据,如下:
- PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。
- PC1会把每一段数据的第一个字节的编号作为序列号(Sequence number),然后将TCP报文发送出去。
- PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1 )+载荷长度=下一段数据的第一个字节的序号(a+1+12)
- PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。
为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认。
7、TCP的窗口滑动机制
TCP通过滑动窗口机制来控制数据的传输速率。
- 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
- 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
- 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
- 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
- 发送方根据接收方当前的Window大小发送相应数量的数据。
二、ARP协议
根据已知的IP地址解析获得其对应的MAC地址。
1、数据链路层
数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。数据链路层的PDU被称为Frame(帧)。
以太网(Ethernet)是最常见的数据链路层协议。 数据链路层位于网络层和物理层之间:
- 数据链路层向网络层提供“段内通信”。
- 负责组帧、物理编址、差错控制等功能。
- 常见的数据链路层协议有:以太网、PPPoE、PPP等。
2、以太网
以太网是一种广播式数据链路层协议,支持多点接入。
个人电脑的网络接口遵循的就是以太网标准。
一般情况下,一个广播域对应着一个IP网段。
3、以太网MAC地址
MAC (Media Access Control)地址在网络中唯一标识一个网卡,每个网卡都需要且会有唯一的一个MAC地址。
MAC用于在一个IP网段内,寻址找到具体的物理设备。
工作在数据链路层的设备。例如以太网交换机,会维护一张MAC地址表,用于指导数据帧转发。
MAC地址由48比特(6个字节)长,12位的16进制数字组成。例如:48-A4-72-1C-8F-4F
4、工作原理
ARP(Address Resolution Protocol,地址解析协议)是一种用于在局域网中将 IP地址转换为对应的MAC地址 的网络协议。它的核心原理可以用一段清晰的文字来描述如下:
当一台设备(比如计算机A)想要和同一局域网内的另一台设备(计算机B)通信时,它必须知道目标设备的 物理地址(即MAC地址),因为数据链路层的数据帧是通过MAC地址进行传输的。虽然A知道B的IP地址,但它并不知道其MAC地址。
于是,A会发起一个 ARP请求:它向局域网内所有设备广播一条消息:“谁拥有IP地址
192.168.1.2
?请把你的MAC地址告诉我!” 这个广播消息包含了A自己的IP地址和MAC地址。局域网中所有的设备都会收到这条广播,但只有IP地址匹配的目标设备B会响应。B收到后,会向A发送一个 ARP应答 消息:“我是
192.168.1.2
,我的MAC地址是48-A4-72-1C-8F-4F
。” 这个应答是以单播方式发送给A的。同时,B也会在这个过程中学习到A的IP与MAC对应关系,并将其保存在自己的ARP缓存表中,以便后续通信使用。
A收到应答后,就把B的IP-MAC映射关系存储在本地的 ARP缓存表 中,有效期通常为几分钟。之后,A就可以用这个MAC地址封装以太网帧,直接向B发送数据了。
此后一段时间内,只要该条目未过期,A就不需要再次发送ARP请求,可以直接从缓存中查找MAC地址,提高通信效率。
主机1的ARP缓存表中不存在主机2的MAC地址,所以主机1会发送ARP Request来获取目的MAC地址。
ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机1的MAC地址。此时,由于主机1不知道主机2的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。
ARP Request报文中包含发送端MAC地址、发送端IP地址、目的端MAC地址、目的端IP地址,其中目的端MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。
所有的主机接收到该ARP Request报文后,都会检查它的目的端IP地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP请求报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。
主机2会向主机1回应ARP Reply报文。
ARP Reply报文中的发送端IP地址是主机2自己的IP地址,目的端IP地址是主机1的IP地址,目的端MAC地址是主机1的MAC地址,发送端MAC地址是自己的MAC地址,同时操作类型被设置为Reply。
ARP Reply报文通过单播传送。
主机1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段与自身的IP地址是否匹配。如果匹配,ARP报文中的发送端MAC地址和发送端IP地址会被记录到主机1的ARP缓存表中。
三、ICMP
1、定义
ICMP(Internet Control Message Protocol,互联网控制报文协议)是 TCP/IP 协议族中的一个 网络层协议,主要用于在 IP 网络中传递控制消息和错误报告。它不用于传输用户数据,而是帮助 IP 协议实现自我管理和诊断功能。
标准定义:
ICMP 是一种面向无连接的协议,用于在网络设备(如主机、路由器)之间传递关于网络通路状态、错误情况和诊断信息的消息。当 IP 数据包无法成功送达目标时,ICMP 会发送相应的错误报告回源主机。
2、作用
- 错误报告
- 当路由器或目标主机处理 IP 数据包失败时(如目标不可达、超时等),通过 ICMP 向源主机发送错误信息。
- 例如:你 ping 一个不存在的地址,收到“Destination Unreachable”就是 ICMP 报文。
- 网络诊断与测试
- 常见工具如
ping
和traceroute
都基于 ICMP 实现。ping
使用 ICMP Echo Request 和 Echo Reply 来测试连通性和延迟。traceroute
利用 ICMP 超时报文(Time Exceeded)来追踪数据包经过的路由路径。- 拥塞控制与重定向
- 路由器可通过 ICMP 重定向消息通知主机使用更优路径。
- 虽然现代网络中较少使用,但仍是协议的一部分。