TCP
- 前言
- 网络模型简图
- 一、TCP协议结构
- 二、TCP三次握手与状态流转
- 三、TCP四次挥手与状态流转
前言
网络模型简图

TCP协议存在于上述网络模型中的传输层,它的作用与UDP协议一样都是应对在不同的机器上,数据端到端发送与接收。
TCP协议,其本质还是协议且TCP协议的本质也就是一堆二进制数据,在TCP协议中客户端与服务端双方都需要遵守协议规定。
相比于UDP而言,TCP协议是面向连接,因此其传输相比于UDP要更加的安全。
一、TCP协议结构

-
Source Port
16 bits,数据发送源的端口号
-
Destination Port
16 bits,数据发送的目的地端口号
-
Sequence Number
32 bits,该字段的值指的是本报文段所发送的数据的第一个字节的序号。
-
Acknowledgment Number
32bits,是期望收到对方的下一个报文段的数据的第一个字节的序号。一旦建立了连接,它就会一直发送,这一点可TCP三次握手、四次挥手中的理论不太一致
-
Data Offset
4 bits,如果熟悉Netty中
LengthFieldBasedFrameDecoder
类的同学应该对这个字段不陌生。在TCP协议结构中,该字段是指Data距离该TCP报文的偏移量是多少 -
Reserved
6 bits,保留字段,今后可能会使用
-
Control Bits
6bits
- URG:当该字段置1时,表示紧急指针字段生效,应尽快传送
- ACK:当该字段置1时,包响应
- PSH:当该字段置1时,表示包中携带实际的Data数据
- RST:当该字段置1时,表示连接需要重置,需要先释放之后再重新建立连接
- SYN:当该字段置1时,表示该数据包是请求建立连接
- FIN:当该字段置1时,该数据包的发送者表示数据已经发送完毕,请求另一段断开连接
-
Window
16 bits,告诉对端自己只能接受Window表示的数值以内的数据大小
-
Checksum
16 bits,主要用来校验数据
-
Urgent Pointer
16 bits,数据包中紧急数据共有多少个字节,而紧急数据在本报文Data中的最前面,那么也就是说,紧急数据的偏移量为:[Data Offset,Data Offset + Urgent Pointer]
-
Options
多选项含义,如可以表示告诉对方本端的MSS限制,注意,这里的限制是对TCP报文中Data长度的限制
-
Padding
为了保证TCP数据包中的首部(除了Data数据区)字节长度为32 bits的整数倍,这个举措跟JVM中对象头有点类似
二、TCP三次握手与状态流转

三、TCP四次挥手与状态流转

网友评论