别再混淆了!一文搞懂IP协议号47(GRE)、6(TCP)、17(UDP)的区别与联系

张开发
2026/4/15 22:52:49 15 分钟阅读

分享文章

别再混淆了!一文搞懂IP协议号47(GRE)、6(TCP)、17(UDP)的区别与联系
网络协议深度解析从TCP到GRE的数据包奇幻之旅当你在浏览器输入一个网址敲下回车的那一刻一场跨越千山万水的数据包冒险就开始了。这些数据包如何在复杂的网络环境中安全到达目的地不同协议如何协同工作本文将带你深入理解TCP(6)、UDP(17)和GRE(47)这些关键协议号背后的故事揭开网络通信的神秘面纱。1. 网络协议基础理解协议号的本质每个网络协议都有一个独特的身份证号码——协议号(Protocol Number)它被定义在IP头部中用于标识上层使用的是哪种协议。就像邮政编码决定了信件应该由哪个邮局处理一样协议号决定了数据包应该交给哪个协议栈处理。常见协议号及其对应协议1ICMP互联网控制报文协议6TCP传输控制协议17UDP用户数据报协议47GRE通用路由封装协议这些数字看似简单却构成了互联网通信的基础。当网络设备收到一个IP数据包时会检查IP头部的协议号字段然后决定将数据包交给哪个上层协议处理。例如看到协议号是6就知道这是一个TCP包应该交给TCP协议栈处理。协议号由IANA统一分配和管理完整的协议号列表可以在IANA官网上找到。2. TCP与UDP传输层的双雄对决2.1 TCP(6)可靠的连接导向型协议TCP协议号6是互联网上最常用的传输层协议之一它的设计哲学是宁可慢也要可靠。想象一下TCP就像一位严谨的快递员三次握手建立连接快递员在送货前会先打电话确认你在家确认机制每送一个包裹都要你签字确认收到重传机制如果你没收到某个包裹快递员会重新送一次有序交付确保包裹按发送顺序送达# 使用tcpdump抓取TCP协议数据包示例 tcpdump -i eth0 ip proto 6 -vvTCP的这些特性使其非常适合需要可靠传输的场景如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP)等。但可靠性是有代价的——TCP的头部较大(通常20字节)且建立连接需要额外开销。2.2 UDP(17)轻量级的无连接协议与TCP形成鲜明对比的是UDP协议号17它就像一个只管投递不管结果的邮差无连接直接发送数据不需要预先建立连接不可靠不保证数据一定能到达目的地无顺序保证后发的数据可能先到头部简单只有8字节开销小# 简单的UDP客户端示例 import socket sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(bHello UDP, (example.com, 12345))UDP虽然简单但在某些场景下优势明显实时性要求高的应用视频会议、在线游戏DNS查询查询请求小响应快广播/多播应用TCP与UDP关键对比特性TCP(6)UDP(17)连接方式面向连接三次握手无连接可靠性可靠确认、重传不可靠流量控制有滑动窗口无传输效率相对较低高头部大小20-60字节8字节适用场景网页、邮件、文件传输视频、语音、DNS3. GRE(47)网络隧道的神秘信封3.1 GRE协议的基本原理GREGeneric Routing Encapsulation协议号47是一种隧道协议它就像一个神奇的信封可以把其他协议的数据包完整地封装起来通过不兼容的网络传输。想象你要寄送一个已经包装好的礼物原始数据包GRE就是在这个礼物外面再加一层包装GRE头部写上新的邮寄地址。GRE的典型应用场景包括站点间VPN连接跨不同网络传输多播流量承载非IP协议如IPX通过IP网络# 在Linux上创建GRE隧道示例 ip tunnel add gre0 mode gre remote 203.0.113.2 local 198.51.100.1 ttl 255 ip link set gre0 up ip addr add 10.0.0.1/24 dev gre03.2 GRE数据包结构解析一个完整的GRE数据包就像俄罗斯套娃外层IP头部协议号47表示这是一个GRE包GRE头部4字节包含标志位和版本信息内层原始数据包可以是任何协议TCP、UDP、甚至另一个GRE[外层IP头(协议号47)] [GRE头] [原始数据包(如TCP/UDP)] [数据]在Wireshark中分析GRE数据包时经常会看到有趣的现象Wireshark可能会直接显示内层被封装的协议如TCP或ICMP而忽略了外层的GRE封装。这是因为Wireshark会智能地解析多层封装直接显示最内层有意义的协议内容。4. 实战案例TCP穿越GRE隧道的完整旅程让我们跟随一个TCP数据包看看它如何通过GRE隧道完成一次完整的网络旅行出发准备应用程序生成TCP数据协议号6源端口54321目的端口80数据GET / HTTP/1.1第一层包装IP封装源IP192.168.1.100内网地址目的IP192.168.2.200另一内网地址协议号6TCP隧道封装GRE封装协议号47外层源IP203.0.113.1公网地址外层目的IP203.0.113.2对端公网地址协议号47GRE网络传输路由器看到外层IP协议号47知道是GRE包通过公网路由到目的地的203.0.113.2解封装过程对端路由器剥离外层IP和GRE头露出原始IP包协议号6根据内层IP头将数据包递送到192.168.2.200最终交付目标主机看到TCP包协议号6交给TCP协议栈处理应用程序在80端口收到HTTP请求# 使用tcpdump观察GRE隧道中的TCP流量 tcpdump -i gre0 tcp port 80 -vv这个过程中协议号起到了关键的路由作用在公网上路由器根据协议号47知道这是GRE包解封后内层协议号6告诉系统这是TCP包最终TCP头中的端口号决定哪个应用程序接收数据5. 协议分析技巧与常见问题排查5.1 Wireshark中的协议号分析技巧使用Wireshark分析网络流量时掌握一些小技巧可以事半功倍过滤特定协议号ip.proto 6仅显示TCP流量ip.proto 47仅显示GRE流量查看协议层级展开数据包详情观察协议栈的层层封装注意Protocol字段显示的协议号解码异常处理有时Wireshark可能错误解析封装协议右键数据包 → Decode As... → 手动指定协议5.2 常见网络问题排查思路当遇到网络连接问题时按照协议栈自底向上排查物理层网线/网卡是否正常网络层IP能否ping通传输层TCP/UDP端口是否开放应用层服务是否正常运行对于GRE隧道问题特别注意两端GRE配置是否匹配密钥、校验和等MTU设置是否合理封装后数据包可能过大路由是否正确封装后的数据包能否到达对端# 检查GRE隧道接口状态 ip link show gre0 # 查看GRE隧道流量统计 ip -s link show gre0网络协议的世界就像一套精密的齿轮系统每个协议号都代表着一个特定的齿轮功能。理解TCP(6)、UDP(17)和GRE(47)这些基础协议的区别与联系是掌握网络通信原理的重要一步。下次当你使用Wireshark抓包时不妨多留意协议号字段它会告诉你很多关于数据包旅程的故事。

更多文章