【传输层协议】 TCP UDP协议 解析(一)
文章目录
- TCP UDP 协议
- TCP协议报文解析
- 报文格式
- TCP会话的建立-三次握手
- TCP会话的确认
- TCP会话的断开-四次挥手
TCP UDP 协议
TCP(Transmission control protocol) 传输控制协议是可靠的、面向连接的协议,但传输效率低,类似于打电话。
UDP(User datagram protocol) 用户数据报协议是不可靠、无连接的服务,但传输效率高,类似于群聊。
TCP在通信前需要建立关系 来确认之间状态
UDP在通信前不需要建立关系 来确认之间的状态
TCP协议报文解析
报文格式
TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。
结合Wireshark抓包分析TCP
报文字段名称 | 描述 | 当前参数 | 备注 | |
---|---|---|---|---|
Source Port | 源端口 | 443 | 长度为16位,指明发送数据的进程。 | |
Destination Port | 目标端口 | 63569 | 长度为16位,指明目的主机接收数据的进程。 | |
Sequence Number (raw) | 序列号 | 2013525370 | 也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。 | |
Acknowledgment number (raw) | 确认号 | 67128956 | 长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。确认号只有在ACK标志为1时才有效。 | |
Header Length | 头部长度(20 字节) | 0101 .... | 长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。 | |
Flags | 标志 | 0x010 | 长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。 | |
Reserved | 预留 | 000. .... ....(Not Set) | ||
Accurate ECN | ...0 .... .... (Not Set) | |||
Congestion Window Reduced | 窗口位 | .... 0... .... (Not Set) | ||
ECN-Echo | 阻塞位 | .... .0.. .... (Not Set) | ||
Urgent | 紧急指针位 | .... ..0. .... (Not Set) | 紧急标志位,说明紧急指针有效; | |
Acknowledgment | 确认位 | .... ...1 .... | 确认标志位,多数情况下空,说明确认序号有效; | |
Push | 上推功能 | .... .... 0... (Not Set) | 推标志位,置位时表示接收方应立即请求将报文交给应用层; | |
Reset | 重置连接位 | .... .... .0.. (Not Set) | 复位标志,用于重建一个已经混乱的连接; | |
Syn | 同步序列号 | .... .... ..0. (Not Set) | 同步标志,该标志仅在三次握手建立TCP连接时有效 | |
Fin | 终止位 | .... .... ...0(Not Set) | 结束标志,带该标志位的数据包用于结束一个TCP会话。 | |
Window | 窗口大小 | 1077 | 长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。 | |
Checksum | 校验和 | 0x6eb5 (未经认证) | 长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。 | |
Urgent Pointer | 紧急指针 | 0 | 长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。 |
TCP会话的建立-三次握手
拓扑图
**三次握手机制类似打电话 **
第一次握手:你是小王?
第二次握手:我是小王,你是小刘?
第三次握手:好的,我知道了
结合报文信息,总结通信流程
TCP会话的确认
对每个数据包都会进行确认,这并不意味着客户端发几次数据,服务端就会回几次确认信号具体如下
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
对前面客户端两次发送的数据进行确认,并回复:服务端192.168.1.13:2058 ——> 客户端 192.168.1.12:2071
总结这次的数据报文流程
接着再看一回合的数据,
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
对前面客户端三次发送的数据进行确认,并分开两次回复:服务端192.168.1.13:2058 ——> 客户端 192.168.1.12:2071
结合之前会话传输报文信息,总结流程
如上面通讯分析:
客户端发送两组数据,服务端将这两组数据都确认号后回应一条ack信号
客户端发送三组数据,服务端收到数据后,分两次确认。对收到序列字段确认号之后发送两次的ack。
滑动窗口机制
窗口大小 决定了在收到确认前可以发送的字节数
在这传输期间会出现客户端或者服务端处理过快或者过慢的情况,这是使用滑动窗口(Win)大小来告知对方传输数据的数量。举例两个场景:
客户端发送Win:8192给服务器,是告诉服务器你可以发送最多8192个字节
服务器同样会发送Win:6732给客户端,是告诉客户端你可以发送最多6732个字节
TCP会话的断开-四次挥手
第一次挥手:我要挂电话咯
第二次挥手:好的
第三次挥手:我也要挂电话咯
第四挥手:好的
总结四次挥手机制流程
注:第一条报文包括传输的数据以及断开连接信号的确认