网络原理 | TCP协议与UDP协议的报文格式

目录

端口号

UDP协议

TCP协议


端口号

        端口号是一个整数,用来区分不同的进程。同一时刻,同一个机器,同一个协议,一个端口只能被一个进程绑定,但一个进程可以绑定多个端口号。 

端口号的划分

        0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,它们的端口号都是固定的。

        1024-65535:操作系统动态分配的端口号。客户端程序的端口号,就是由操作系统从这个范围动态分配的。

知名的端口号

        · ssh 服务器:使用 22 端口

        · ftp 服务器:使用 21 端口

        · telnet 服务器:使用 23 端口

        · http 服务器:使用 80 端口

        · https 服务器:使用 443 端口

UDP协议

下图为 UDP 报文格式

网络原理 | TCP协议与UDP协议的报文格式_第1张图片 但实际上,UDP的数据,如下图所示:

网络原理 | TCP协议与UDP协议的报文格式_第2张图片

UDP 报头总共为 8 字节,是固定长度。报头中的四个字段,没有指定分隔符,通过固定长度来进行区分,每个字段 2 个字节。

UDP 报文的长度即报头长度 + 载荷长度。报文长度的单位是“字节”,比如报文长度是 1024,则整个 UDP 数据报的长度就是 1024 字节(包括 8 字节报头和 1016 字节数据)。UDP 报头中,UDP报文长度是使用 2 个字节来表示长度的,因此其最大值是 65535,即 64KB。

在UDP中,使用2个字节表示端口号,但其实有效范围在0-65535之间,如果使用超过这个范围的数来标识端口号(例如10w),就会在系统底层被“截断”。

检验和的作用

由于在网络传输中,非常容易出现错误,因此需要使用检验和来“发现”或者“纠正”这里的错误,通过在传输的数据中引入额外的信息(校验和)来发现/纠正错误。 

 UDP中,使用2个字节作为校验和。UDP使用简单有效的方案,类似于CRC校验和(循环冗余校验)来进行校验。

TCP协议

下图为 UDP 报文格式网络原理 | TCP协议与UDP协议的报文格式_第3张图片· 32位序号:本报文段数据的第一个字节的序号(用于数据排序和可靠性传输)

· 32位确认序号:期望收到的下一个报文段的序列号(仅在 ACK=1 时有效)

· 4位首部长度:此处的长度单位是 4 字节,而不是字节,4位首部长度,即说明TCP头部最大长度为 15 * 4 = 60 字节。

· 保留(6位):保留字段,必须将其置为0.

· 6 位标志位:URG:紧急指针有效(高优先级数据,需立即处理);ACK:确认号有效(建立连接后通常为 1);PSH:要求接收方立即将数据提交给应用层(避免缓冲区延迟);RST:重置连接(通常表示异常终止,如端口未打开);SYN:同步序列号,用于建立连接(三次握手);FIN:发送方数据发送完毕,请求关闭连接(四次挥手)。

· 窗口大小:接收方的接收窗口大小(用于流量控制,单位:字节)

· 检验和:校验首部和数据部分的完整性(计算时包含伪首部)。伪首部 包含源/目的 IP、协议号(TCP=6)、TCP 长度(用于防止 IP 层误传)

· 16位紧急指针:标识紧急数据的末尾位置(仅在 URG=1 时有效)

· 选项:可选字段(如 MSS、SACK、时间戳等),长度必须是 4 字节的整数倍

你可能感兴趣的:(网络原理 | TCP协议与UDP协议的报文格式)