TCP/UDP详解(一)

UDP

报文

源端口16bit 目的端口16bit

校验和checksum16bit 总长度16bit


源目端口用于标识应用层协议,分为知名端口(1-1023)和非知名端口(1024-65535)

通常会有一个为知名端口一个为非知名端口

校验和用于检验报文的完整性以及是否被篡改

总长度用于标识数据大小

特性

无面向连接,传输效率高但可靠性较弱,有校验和纠错和检验,且同步定长8bit结构简单

TCP

报文

源端口16bit 目的端口16bit

确认号Acknowledge Number32bit

序列号Sequence Number32bit

偏移量4bit reserved6bit flag6bit 校验和16bit

windows16bit 紧急指针urgent16bit

options40Bytes


确认号用于回复和确认报文

序列号用于标识报文顺序

偏移量标识报文头长度0x0101---0x1111即20-60Bytes

flag旗标位标识一些功能,SYN,RST,ACK,URG,PSH,FIN

SYN:同步位,用于搭建TCP会话

RST:重置位,用于重置TCP连接,常用于异常断开后重连,或者发送包发送到一个不是期望的 目的主机时,接收端发送reset 重置连接标志的包

FIN:结束位,用于结束会话

ACK:确认位,用于确认,表明数据成功接收

URG:紧急位,用于表明该数据需要紧急优先处理,于紧急指针搭配使用

PSH:推送位,表明该数据不经过缓存送达后直接处理

**reserved:**保留指端,而新定义的TCP头将flag扩展了ECE,CWR,NS三位

ECE:拥塞通知,表示TCP peer有ECN能力

CWR:拥塞窗口减少,发送者在接收到一个带有ECE flag包时,将会使用CWR flag

NS:用来保护不受发送者发送的突发的恶意隐藏报文的侵害

特性

面向连接,传输可靠不会乱序,有校验和纠错能力,报文长度可变20-60Bytes

三次握手

基础交互

ack的序列表示我想接收的序列号信息

seq表示序列号,两者存在一定关系

a,b是报文长度,我的下一次seq是对方给我的ack的值

四次挥手

拥塞避免,超时重传,确认应答,滑动窗口,捎带应答,流量控制

等特性具体再写一篇相关的让我整理整理

区别

TCP有确认号传输可靠UDP没有传输不可靠

TCP有序列号传输不会乱序UDP没有可能出现乱序

TCP能实现流量控制,UDP不行

TCP拓展性强但效率较低,UDP传输效率较高

TCP适用于对可靠性要求高的环境比如HTTP,UDP延时低适合对延时敏感的场景比如视频直播

两者都用端口号标识上层应用层协议

相关推荐
70asunflower24 分钟前
用Docker创建不同的容器类型
运维·docker·容器
2501_9336707926 分钟前
中专学财务,2026年就业方向全解析:从出纳到财务BP的进阶路
运维·服务器
优橙教育33 分钟前
通信行业四大热门岗位解析:谁才是数字时代的黄金赛道?
网络·学习·5g
Dovis(誓平步青云)1 小时前
《滑动窗口算法:从 “暴力遍历” 到 “线性高效” 的思维跃迁》
运维·服务器·数据库·算法
迎仔1 小时前
05-计算设备运维进阶:算力中心的设备医生
运维
迎仔1 小时前
11-云网络与混合云运维:弹性数字世界的交通管理
网络·安全·web安全
石去皿1 小时前
【嵌入式就业10】Linux内核深度解析:从启动流程到驱动框架的工业级实践
linux·运维·服务器
Wpa.wk1 小时前
接口自动化 - 多环境统一文件配置 +多响应统一转换处理
运维·服务器·测试工具·自动化·接口自动化·统一配置
Trouvaille ~1 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
pitch_dark1 小时前
渗透测试系统基础篇——kali系统
网络·安全·web安全