分析&回答
源端口号(Source Port) :16位,标识主机上发起传送的应用程序;
目的端口(Destonation Port) :16位,标识主机上传送要到达的应用程序。
源端,目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。一个IP地址和一个端口号有时也称为一个插口Socket,插口对(Socket Pair)(包含客户IP地址、客户端口号、服务器 IP地址和服务器端口号的四元组)可唯一确定互联网络中每个TCP连接的双方。IP+TCP端口唯一确定一个TCP连接。
TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-Know Port)为用户提供服务。
序列码(Sequence Number) :32位,当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
确认码(Acknowledgment Numbwe) :32位,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码,只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。
数据偏移量(Data Offset) :4位,也就是头部长度,指出TCP负载(数据)的开始位置。以4字节为单位,如"0101"表示20字节位置的数据为负载开始,也就是头部长度为20字节。
保留(Reserved) :6位,这些位必须是0;
控制标记(Contral Flag) :6位,
- URG(Urgent data):紧急指针(urgent pointer)有效。如果URG为1,表示这是一个携有紧急资料的封包。
- ACK(Acknowledgment field significant):确认序号有效。如果ACK为1,表示此封包属于一个要回应的封包。一般都会为1。
- PSH(Push function):接收方应该尽快将这个报文段交给应用层。如果PSH为1,此封包所携带的数据会直接上传给上层应用程序而无需经过TCP处理。
- RST(Reset):重建连接。如果RST为1,要求重传。表示要求重新设定封包再重新传递。
- SYN(Synchronize sequence number):发起一个连接。如果SYN为1,表示要求双方进行同步沟通。
- FIN(Finish-No more data for sender):释放一个连接。如果FIN为1,表示传送结束,然後双方发出结束回应进而正式终止一个TCP传送过程。
窗口(Window) :16位,接收窗口大小。此字段用来进行流量控制,单位为字节数,这个值是本机期望一次接收的字节数。这里一般称为“滑动视窗(Sliding Window)”。
正如您刚才看到的TCP封包会通过SQN和ACK序号来确保传送的正确性,但如果每一个封包都要等上一个封包的回应才被发送出去的话实在是太慢和难以接受的。这样我们可以利用Sliding Window在传送两端划分出一个范围,规定出可以一次性发送的最大封包数目。
当TCP传送建立起来之後两端都会将window的设定值还原到初始值比方说每次传送3个封包。然后发送端就一次发送三个封包出去,然后视窗则会往後移动三个封包填补发送出去之封包的空缺。如果接收端够顺利也能一次处理接收下来的三个封包的话,就会告诉发送端的window值为3,但如果接收端太忙或是其它因素影响暂时只能处理两个封包,那么在视窗里面就剩下一个封包,然后就会告诉发送端window值为2。这个时候发送端就只送出两个封包而视窗就会往後移动两个封包填补发送出去的空缺。
校验位(Checksum) :16位,对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。
当资料要传送出去的时候发送端会计算好封包资料大小然後得出这个检验值封包一起发送当接收端收到封包之後会再对资料大小进行计算看看是否和检验值一致如果结果不相称则被视为残缺封包会要求对方重发该个封包。
紧急指针(Urgent Pointer) :16位,它是一个偏移量。指向后面是优先数据的字节,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,和序号字段中的值相加表示紧急数据最后一个字节的序号。
还记得刚才讲到Control Flag的时候我们提到一个URG的标记吗如果URG被设定为1的时候,这里就会指示出紧急资料所在位置。不过这种情形非常少见,例如:当资料流量超出频宽的时候系统要求网路主机暂缓发送资料所有主机收到这样的信息都需要优先处理。
选项(Options) :长度不定;但长度必须以字节记;选项的具体内容我们结合具体命令来看。
这个选项也比较少用。当那些需要使用同步动作的程式如Telnet要处理好终端的交互模式就会使用到option来指定资料封包的大小因为telnet使用的资料封包都很少但又需要即时回应。
填充(Padding) :不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始处偏移量能够被32整除。
可能包括"窗口扩大因子"、"时间戳"等选项。
喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!