如何为南宁企业定制开发高效程序题的小程序?
摘要:做程序题的国外网站,南宁小程序定制开发,网上开店如何找货源,wordpress加导航栏视频本节内容开始,我们正式学习TCP协议中具体的一些原理。首先,最重要的内容仍然是这个协议的封
做程序题的国外网站,南宁小程序定制开发,网上开店如何找货源,wordpress加导航栏视频本节内容开始#xff0c;我们正式学习TCP协议中具体的一些原理。首先#xff0c;最重要的内容仍然是这个协议的封装结构和首部格式#xff0c;因为这里面牵扯到一些环环相扣的知识点#xff0c;例如ACK、SYN等等#xff0c;如果这些内容不能很好的理解#xff0c;那么后续…本节内容开始我们正式学习TCP协议中具体的一些原理。首先最重要的内容仍然是这个协议的封装结构和首部格式因为这里面牵扯到一些环环相扣的知识点例如ACK、SYN等等如果这些内容不能很好的理解那么后续学习中的连接建立、流量控制等知识就没办法学习下去了。 TCP报文的组成
经过前面的学习我们至少已经知道了两件事情一是TCP是具有可靠传输特性的传输层协议二是使用TCP协议的传输层其PDU是报文段为什么是段而不是整个的报文我们后面学完UDP之后会出一个对比和总结此处先简单的把 报文段报文 理解就可。
TCP的报文段从整体来看和IP数据包一样也是首部数据部分的格式这里的首部自然就是TCP的协议首部数据部分是上面的应用层传递下来的数据如下图所示 TCP首部结构
经过前面的数据链路层、网络层等协议封装格式的学习就会发现一个规律基本上每个协议所具有的功能都体现在其首部的各个字段当中。TCP协议也是不例外的所以我们需要详细学习TCP的首部字段不过限于篇幅本节先学习其中的一部分。
首先来看TCP首部里面都包含哪些字段 从图中可以看出TCP报文的首部和IP数据包的首部有相似的地方同样在最上方标注着每个字段占的长度是多少例如第一个字段——源端口长度为16个二进制位。另外和IP首部一样TCP也有20个字节的固定首部长度也是最小首部长度因为“选项”和“填充”两个字段是可选的可以根据需要而增加。
首先第一个和第二个字段也就是源端口和目的端口前面学过了端口号在这里就好理解了。这两个字段的值指出了发送方自己的端口号和对方的端口号比如一台主机的浏览器想要通过HTTP协议访问一个服务器的网址那么其TCP首部中的源端口就是自己主机浏览器程序的随机端口号目的端口就是HTTP的熟知端口80。
源端口和目的端口的字段长度都是16位所以端口号的取值范围就是0—(2^16)-1也就是0~65535对应了我们前面学到的端口号范围。
下面一个字段叫“序号”也叫“报文段序号”这个字段的值表示本报文段的数据部分的第一个字节的编号。前面我们学过给报文编号主要是为了让接收方能够区分开一个报文段是新发送的还是重传的以便接收端进行报文的确认。在TCP协议中一个报文段的序号就是其数据部分的第一个字节的编号意思就是说假设一个TCP报文的数据部分有100个字节这些数据的编号是1~100这就说明这个报文段的首部中“序号”值是1同理如果这些数据的编号要是101~200那就说明这个报文段的首部中“序号”值是101。总之应当记住“序号”字段的值是本报文段的数据部分的第一个字节的编号。
当然上面这些只是举例子为了方便理解在实际当中的“序号”字段的值没有这么“随便”不过序号字段的值确实是随机的当通信双方应用程序建立TCP连接的时候双方都会自动生成一个随机数作为初始序号也就是说第一个字节的序号不一定必须是1。
然后我们看到“序号”字段的长度是32位也就意味着序号的取值范围是0—(2^32)-1大概四千多万个。虽然有这么大的取值范围但毕竟是有限的在使用高速网络时有可能会出现序号重复使用的情况。如果出现序号重复就会导致接收方区别不了一个报文段是新到达的还是由于网络拥堵而迟到的为了解决这种问题在TCP首部的“选项”字段中可以选择加上时间戳选项时间戳的一个重要功能就是防止序号绕回PAWS。
“序号”字段下面紧接着是“确认号”字段确认号的意思是期望收到对方下一个报文的序号。要理解确认号就要特别注意“期望”这两个字。比如说还是上面的例子发送方A把序号为101数据部分有100个字节的报文段发送过来接收方B接收下来以后那么B就“期望着”后面的数据到来于是B将会在发送给A的确认报文中将首部中的“确认号”字段设置成201。这就是告诉发送方A“到序号200为止的字节我都已经收到现在我期望收到200后面的201号字节”。
“确认号”在后面走是4位长度的“数据偏移”字段数据偏移指的是本报文段中的数据部分距离报文首部开始有多少个字节其实也就可以理解为“首部长度”。因为TCP虽然有固定首部20字节但是如果加入了长度可变的“选项”字段首部长度就不固定了所以通过一个字段来指出首部的长度是有必要的。
另外需要知道的是TCP的首部也有一个最大长度和IP一样都是60字节。
