初步认识TCP协议——可靠性和TCP头部

       TCP是可靠的协议,不支持组播和广播,可靠性是指尽可能的保证对方收到数据包,可靠性主要体现在以下方面:

       1、数据会被TCP分割成适当的大小,防止数据包的大小大于对方缓冲区的大小,导致对方丢弃数据包,TCP提供一种机制保证接收方可以重组分割的数据包。

       

       2、当TCP发送数据包时,会维持一个计数器,如果对方在给定时间内未回复确认收到信息,则会重新发送数据包,防止了丢包的出现。


       3、当TCP接收到数据包时,会回复确认收到信息,防止丢包的出现,但不会立刻回复,通常会等待一段时间。


       4、TCP的校验码会检查数据包的TCP头部和数据部分,目的是为了防止数据包在传输过程中被修改,若校验码不正确,TCP将会丢弃数据包。


       5、TCP会丢弃重复的数据包,例如:当重传定时器到期时,会重传一份相同的数据包,此时,在网络中传送的数据包会有两份是相同的,此时TCP只会接收最先接收到的数据包,其余的数据包均被丢弃。


       6、TCP提供流量控制,发送方和接收方都会有一个缓冲区,发送数据包的大小不能超过缓冲区现在的大小

 

       TCP不会翻译所传送的二进制数据,这些数据的翻译由应用层完成,TCP的头部结构为:



    各字段的意义:

    源端口号与目的端口号:端口号是为了辨别发送方和接收方所对应的应用程序(由于一台电脑上可能运行多个引用程序,那么数据包究竟是给谁的就由端口号来确定,源端口号方便接收方回复发送方时指定接收方端口号)

    序列号:用于数据包的重组。

    确认号:接收方希望下次接收的数据包的序列号(运用序列号和确认号可以丢弃重复的数据包,如果已经接受了序列号为10000的数据包,则确认号会增加,若再次接收到序列号为10000的数据包,则会丢弃(由于确认号大于序列号))

    六个bool型变量:

    URG:紧急指针域有效。

    ACK:确认号域有效。

    PSH:接收方应该尽可能快的将数据包交送给应用程序。

    RST:放弃本次连接。

    SYN:用于启动连接(与三次握手有关)。

    FIN:请求断开连接(与四次回收有关)。

    

    4位头部长度:用来表示TCP头部的长度,计算公式为(32*四位头部长度)/8,单位为字节。

    窗口大小:TCP的流量控制的途径,指定缓冲区的大小。

    校验码:检查头部和数据部分,强制打开,由接收方确认。

    紧急指针:URG有效才有效,为一个偏移量,指向紧急数据的最后一位。


    选项:指定一些扩展信息,最常见的就是最大字段大小(MSS),指定了报文数据部分的最大值,在连接建立过程中,每一方都有机会在SYN报文上指定自己的MSS,如果没有指定,则默认为536字节,该选项最大值为发送接口的MTU减去TCP和IP头部的固定长度,如果目的IP地址不是本地的(即网络号不同),一般MSS默认为536字节。选项部分的结构为:


每个选项都由一个指定类型的kind字段开头,无操作字段的目的是填充TCP报文长度,使其为4的倍数(由于TCP长度计算公式为32*长度字段/8,为4的倍数)

    TCP为建立或放弃连接发送的数据包仅仅包括头部,不会包括数据。TCP是全双工的,意味着数据流动是双向的,可以由接收方到发送方,也可以反过来,TCP建立的连接是一种逻辑上的连接,在总结四次挥手与三次握手时会再次说明。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值