面试题总结之TCP报头

前言

听说你熟悉TCP/IP协议,请讲下TCP的报头。

解答

面试题总结之TCP报头_第1张图片

TCP报文一般有20个字节。
1.16位的源端口号加上16位的目的端口号,这两个值加上IP首部中的源端IP地址和目的端IP地址,用于多路复用或多路分解来自或送至上层应用的数据。
2. 32位的序列号,其用来标识从TCP发送方向TCP接收端发送的数据字节流,它表示该报文段首字节的字节流编号。
3. 32位的确认序号标识发送确认一段所期望收到的下一个序号。序号字段和确认号字段用于TCP发送方和接收方来实现可靠数据传输服务。
4. 4比特的首部长度指示了以32比特为单位的TCP的首部长度。一般TCP首部长度为20字节,则该字段为0110。
5. 6位作为保留字段。
6. 6比特的标志字段。URG比特用来指示报文段存在着被发送方的上层实体置为“紧急”的数据。ACK比特用于指示确认字段中的值是有效的。RST, SYN, FIN用于连接的建立和拆除。PSH比特指示接受方应立即将数据交给上层。
7. 16位的接收窗口字段,该字段指示接收方愿意接受的字节数量,用于流量控制。
8. 16位校验和。
9. 16位紧急数据指针为紧急数据的最后一个字节。


既然说到了TCP字段不妨把IP数据报也了解一下。

IP 数据报

TCP数据一般是被封装在一个IP数据报中,如下图

面试题总结之TCP报头_第2张图片

IP数据报的格式如下:
面试题总结之TCP报头_第3张图片
1. 4比特版本号。规定了数据报IP协议的版本。如IPv4和IPv6。通过查看版本号,路由器能够确定如何解释IP数据报剩余部分。
2. 4位首部长度。用于确定IP数据报中数据部分从哪里开始。
3. 8位服务类型。用于区分不同类型的数据报。
4. 16位数据报长度,为IP数据报的总长度(首部加数据)。最大长度理论为65535字节,但是通常数据报很少超过1500字节。
5. 16位比特标志,3位标志,13位片偏移。这三个字段与IP分片有关。1)标识字段唯一地标识一个IP数据包,每发送一份报文,其值会加1。2)标志位字段占3位,第一位为保留位,第二位为DF,为1表示禁止IP分片,为0代表允许分片。第三位为MF,为1代表此IP数据报不是最后一片,为0代表IP数据报是最后一片或者未分片。3)片偏移字段占13位,表示一个IP分组分片封装原IP分组数据的相对偏移量,以8字节为单位。
6. 8位TTL生存时间字段设置了数据包可以经过的最多路由数。路由器每转发一次分组,TTL减1,如果TTL=0,则路由器丢弃该分组。
7. 协议字段占8位,指示IP分组封装的是哪个协议的数据包。1表示ICMP协议,2表示IGMP协议,6代表TCP协议,17表示UDP协议。
8. 首部检验和字段占16位,实现对IP分组首部的差错检测。
9. 源IP地址和目的IP地址字段各占32位,分别标识发送分组的源主机/路由器和接受分组的目的主机/路由器的IP地址
10. 选项字段一个可变长的可选信息,携带安全,源选路径,时间戳和路由记录等内容。其中包含填充字段,用于32位对齐。

你可能感兴趣的:(面试题整理)