1.一个TCP报文的数据字段最多为多少个字节?理由是什么?若用户要传送的数据字
长度超过了TCP报文中序号字段所能编出的最大序号,还能否用TCP来传送?理由?2.在TCP报文的头部设置一个选项来说明最长报文段MSS的作用是什么?3.TCP在进行流量控制时是以分组丢失作为产生拥塞标志的,但是否有不是拥塞导致分组丢失的情况?如果有,请举例说明?4.为什么在TCP首部中的最开始的4个字节是TCP的端口号?为什么UDP的首部中没有TCP首部中的首部长度字段?

解决方案 »

  1.   

    1.一个TCP报文的数据字段最大长度也(MSS)跟网络层IP包的最大长度(MTU)有关,MSS=MTU-20-20(假设IP和TCP头都没有用选项字段,那么它们的首部一个20字节),而MTU跟底层网络规定的最大数据帧长有关。至于seq字段超出范围的问题,我觉得这个概率很小,万一发生了,我也不知道TCP会如何处理。
    2.这个选项是用于和TCP连接的另一方协商MSS的值的。
    3.肯定有撒,因为TCP包也是封装在IP包中传输的,而IP本身就不保证可靠性。比如,数据帧在物理介质中传输时由于某种原因被破坏了,那么接收方的链路层直接就会将这个数据帧丢弃,那接收方的TCP当然就不能接收到这个报文段,在它看来也就是分组丢失了。
    4.端口号用于判断这个包的数据要递交给上层的哪个进程。因为TCP首部有选项字段,所以它的首部长度是可变的,所以要用一个字段说明其首部长度;而UDP首部不存在选项字段,所以没有必要加上首部长度字段。
      

  2.   

    你所指的seq 超出范围的问题。 是不是指 seq 达到 0xffffffff的问题?
    如果是的话,这点不用担心。 tcp协议中的判断seq的程序,已经很好的解决了这个问题。tcp报文的最大长度,除了和mtu有关外,还和对方(也就是你所连接的服务器端或客户端)的windows大小。 这个windows表示的是对方所能接收到数据的最大长度(在tcp首部中)。