# 传输层协议:TCP和UDP的报文格式 ## TCP > 数据控制协议,协议号为6 > > 是一种面向有链接的可靠的传输层协议 - 为什么可靠? - TCP有三次握手,四次挥手,重传机制,确认机制以及滑动窗口等机制,确保数据传输的可靠性 - TCP报文格式 - Ethernet-II帧+IP头+TCP头+DATA+FCS #### TCP头部参数 - Source port - 源端口号 - Destination port - 目的端口号:标识上层(应用层)协议类型,区分不同的网络类型 - Sequenece number - 序列号,用来标识不同的报文 - Acknowledgement number - 确认序列号,用来对接收到的报文进行确认,并且确定后续发送端发送报文的序列号 - Header length - 头部长度 最大60B - Reserved - 保留字段 - Control bits - 控制字段 - Urg位:1bit,紧急指针位,当U位置位后表示紧急指针有效 - Ack位:1bit,当A位置位后表示确认序列号有效 - Psh位:1bit,当P位置位后表示这份数据需要紧急交由应用程序处理,通常与U位配合使用 - Rst位: 1bit,当R位置位后表示请求重新建立TCP连接 - Syn位:1bit,当S位置位后表示请求建立TCP连接 - Fin位: 1bit,当F位置位后表示请求断开TCP连接 - Window - 窗口位:表示接收端期望接收单次能够接收数据的大小,最大支持65535B,通常用于流量控制 - Checksum - 校验字段 - Urgent - 紧急指针,表示需要优先处理的数据 紧急指针,表示需要优先处理的数据 - Options - 可选字段 ### TCP端口号 - 取值范围:0-65535 - 知名端口号 - 0-1023,表示已经固定分配给应用协议使用 - telnet:23 - FTP:20 21 - HTTP:80 - SMTP:25 - 非知名端口号 - 1024-65535,为随机端口,没有固定分配出去 ### TCP链接建立过程(三次握手) - PCA--->服务器B 1. PCA向服务器B发送SYN置位的TCP报文,请求和服务器B建立TCP连接,序列号(seq为a) 2. 服务器B收到SYN置位的TCP报文后,向PCA回应SYN和ACK置位的TCP报文seq为b,确认序列号(ack)为a+1(对序列号为a的报文进行确认,同时请求后续报文的序列号为a+1)此时TCP的单向连接建立完成 3. PCA收到服务器B发送的SYN和ACK置位的报文后,向服务器B发送一个ACK置位的报文,seq为a+1,A为b+1 此时TCP双向连接建立完成 PS:+x,为数据包的大小,此时我们认为数据包的大小为1B ### TCP连接断开过程(四次挥手) - PCA--->服务器B 1. PCA向服务器B发送FIN和ACK置位的TCP报文,请求和服务器B断开TCP连接, 所携带的序列号(seq)=a,ACK=b 2. 服务器B收到报文后回复一个ACK置位的TCP报文,所携带的seq=b,ack=a+1,对PCA请求和服务器B断开连接进行确认 3. 服务器B向PCA发送一个FIN和ACK置位的TCP报文,请求和PCA断开TCP连接,所携带的seq=b,ack=a+1 4. PCA收到报文后回复一个ACK置位的消息,所携带的seq=a+1,ack=b+1,对服务器B请求和PCA断开连接进行确认,至此 TCP的双向连接断开完成 ## UDP: > 用户数据包协议,协议号:17 > 是一种面向无连接,不可靠的传输层协议,传输数据前是不需要建立连接,没有确认、重传 等机制来保障数据传输的可靠性 ### UDP报文格式 - ethernet-II帧+IP头+UTP头+data+FCS - 头部参数:源端口号、目的端口号、长度字段、校验 PS:UDP长度只有8B,减少了数据传输时的消耗,数据传输过程中的重传、排序、流量控制等可靠性确保机制都由应用程序所提供,所以UDP的传输数据的效率比TCP快 - TCP适用于对数据传输可靠性要求较高的业务流量 如 telnet、 FTP、 X Windows - UDP适用于对数据传输可靠性要求不高,但对数据传输时延要求较高的业务流量 如语音、视频流量 最后修改:2021 年 08 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏