路由交换03-----传输层协议
传输层协议
传输层比较重要的两个协议是TCP
和UDP
协议。
1.TCP
TCP是一种可靠的、面向连接的全双工传输层协议。
TCP
的报文格式是这样的:
源端口(2字节):源主机应用程序使用的端口号。源端口和IP地址用作标识报文的返回地址。
目的端口(2字节):目的主机应用程序使用的端口号。
序号(4字节):seq
序号,标识发送方向接收方发送的数据段的序号。
确认序号(4字节):Ack
序号,接收方应答的序号,为接受到的序号+1。
头长度(4字节):表示i头部占4字节的数目。
URG:是否为紧急指针,0为不是,1为是。
ACK:请求或者应答连接,用于确认序号有效。
PSH:最快速度传输数据。
RST:重建会话。
SYN:同步连接序号,用于建立连接。
FIN:结束连接,为0是请求结束连接,为1是结束连接。
窗口大小(2字节):接收方告诉发送方想接收到的每个数据段的大小,可用于流量控制。
校验和(2字节):对头部和数据进行校验。
紧急指针:当URG为1时生效,表示这个数据是紧急数据,优先发送。
选项:用于记录路由或者时间戳之类的可选任务。
TCP传输数据分为三个过程:建立连接、传输数据、关闭连接。
建立连接的过程是一个三次握手的过程,首先,客户端发送一个标识为SYN
,序列为seq=a
的数据包,服务器端收到后,要对这个包进行确认,便回复一个SYN
,ACK
,Ack=a+1
,seq=b
的数据包,客户端收到这个包之后,进行确认,回复一个ACK
,seq=a+1
,Ack=b+1
的包,这样就建立连接了。
注意:ACK
是标志位的,用于确认序号有效。Ack
是确认序号,是seq+1
。
接着就开始传输数据。
数据传输结束后开始进行关闭连接,即TCP四次挥手。假设客户端想终止这个连接,于是发送一个数据包:FIN
,ACK
,seq=a
,服务器端收到之后,进行确认回复ACK
,seq=b
,Ack=a+1
,确认完客户端的终止连接之后,服务器端再进行终止连接,向客户端发送数据包为:FIN
、ACK
,seq=b
,Ack=a+1
,客户端收到之后,知道服务器端也终止连接然后进行确认回复:ACK
,seq=a+1
,Ack=b+1
,这样会话就关闭了。
2.UDP
UDP
是一种不可靠的、无连接的传输层协议,他不像TCP
一样需要三次握手四次挥手,UDP
不需要事先建立连接,因此也无法保证数据的可靠。
UDP
报文的头部是这样的:
源端口(2字节):初始化通信的端口号。
目的端口(2字节):接收方应用程序的地址接口。
UDP数据包长度(2字节):UDP头和数据的总长度。
校验和(2字节):数据包的头部和包内容的校验。
使用UDP
发送数据时,应用程序需要提供报文到达确认、排序、流量控制等功能,UDP
没有像TCP
一样的重传机制,占用资源小,处理效率高。一般用来传输语音、视频等。
对比
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App