本文主要是介绍iOS 网络相关面试题(TCP、三次握手、四次挥手、代码实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、TCP的特点和报文结构
1、面向连接、可靠传输、面向字节流、全双工服务
2、TCP的报文结构
TCP报文段由首部字段和一个数据字段组成。
数据字段包含一块应用数据。最大报文长度MSS
(Maximum Segment Size)限制了报文段数据字段的最大长度。MSS
选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。
所以当TCP发送一个大文件(比如一张高清图片)时,通常是将该文件划分为MSS
长度的若干块(最后一块除外,通常会小于MSS
)。而实际交互式应用通常传送长度小于MSS
的数据块。
如图,与UDP一样,首部包括源端口号和目的端口号,用于多路复用/分解来自上层或送到上层应用的数据。TCP首部也同样包括检验和字段
TCP首部还包含下列字段:
-
32比特的序号字段Seq(sequence number field) 和32比特的确认号字段Ack(acknowledge number field)
-
16比特的接收窗口字段RW(receive window field),该字段用于流量控制,用于指示接收方愿意接收的字节数量。
-
4比特的首部长度字段(header length field),该字段指示了以32比特的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部长度是可变的。(通常,选项字段为空,所以TCP首部的典型长度就是20字节)
-
可选和变长的选项字段(option field),该字段用于发送方和接收方协商最大报文段长度(MSS)时,或用作窗口调节因子时使用。
-
6比特的标志字段(flag field)。ACK比特用于指示确认字段中的值是有效的,即该报文段包括一个对已被接收报文段的确认。RST、SYN、FIN比特用于连接建立和拆除。
PSH比特指示接收方应立即将数据交给上层。URG比特用于指示报文段里存在着被发送端的上层实体置为“紧急”的数据。紧急数据的最后一个字节由16比特的紧急数据指针字段指出。当紧急数据存在并给出指向紧急数据尾的指针的时候,TCP必须通知接收端的上层实体。在实践中,PSH、URG和紧急数据指针并没有使用。
3、序号字段Seq和确认号字段Ack
- 在TCP通讯中,无论是建立连接,数据传输,友好断开,强制断开,都离不开Seq值和Ack值,它们是TCP传输的可靠保证。
序号Seq:
TCP把数据看成一个无结构的、有序的字节流。一个报文段的序号因此是该报文段的首字节的字节流编号。
比如数据流由一个包含100000
字节的文件组成,其MSS
这篇关于iOS 网络相关面试题(TCP、三次握手、四次挥手、代码实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!