TCP报文格式
- 源端口(Source port)和目的端口(Destination port)
各16 bits。IP地址标识互联网中的不同终端,端口号标识终端中的不同应用进程,具有本地意义。32位IP + 16位端口号 = 48位插口。
端口由互联网数字分配机构(Internet Assigned Numbers Authority,IANA)分配,TCP和UDP端口号列表。
著名端口号(Well-known) | 注册端口号(Registered) | 动态端口号(Dynamic) |
---|---|---|
0~1023 | 1024~49151 | 49152~65535 |
IANA统一分配 | 向IANA申请注册 | 本地分配 |
- 序号(Sequence Number)和确认序号(Acknowledgment Number)
各32 bits。TCP连接传输的字节流中的每一个字节都有序号。SN指示本报文段所发送的数据第一个字节的序号。AN指示期望收到对方的下一个报文的第一个字节的序号,所有小于AN的报文都被正确接收。
- 首部长度(Data offset)
4 bits,以32-bit字为单位。TCP首部长短,也是TCP报文数据部分的偏移量。范围5~15,即20 bytes ~ 60 bytes。options部分最多允许40 bytes。
- 保留(Resevered)
3 bits,将来使用,目前应设为0。
- 标志位(Flags)
URG = 1,指示报文中有紧急数据,应尽快传送(相当于高优先级的数据)。
PSH = 1,接到后尽快交付给接收的应用进程。
RST = 1,TCP连接中出现严重差错(如主机崩溃),必须释放连接,在重新建立连接。
FIN = 1,发送端已完成数据传输,请求释放连接。
SYN = 1,处于TCP连接建立过程。
ACK = 1,确认序号(AN)有效。
- 窗口(Window size)
16 bits,接收窗口的大小。接收端希望接收的字节数。
- 校验和(Checksum)
16 bits,校验报文首部、数据。
- 紧急指针(Urgent pointer)
16 bits,如果URG = 1,该字段指示紧急数据的大小(相对于SN的偏移),紧急数据在数据部分的最前面。
- 可选项(Options)
TCP报文的字段实现了TCP的功能,标识进程、对字节流拆分组装、差错控制、流量控制、建立和释放连接等。
UDP报文格式
源端口(Source port)和目的端口(Destination port)
报文长度(Length)
16 bits,指示UDP报文(首部和数据)的总长度。最小8 bytes,只有首部,没有数据。最大值为65535 bytes。实际上,由于IPv4分组的最大数据长度为(65535 - 20 = 65515) bytes,UDP的报文长度不超过65515 bytes。IPv6允许UDP的长度超过65535,此时length字段设为0。
- 校验和(Checksum)
参考:
http://www.xuetangx.com/courses/course-v1:UST+UST001+sp/courseware/a4bb2456afc54cdc94defd1ab13b0389/
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
https://en.wikipedia.org/wiki/User_Datagram_Protocol