TCP协议详解一:连接特点、可靠性如何保证及首部格式

2018-10-0407:58:30计算机网络技术Comments2,846 views字数 1132阅读模式

1. tcp连接的特点

  • 提供面向连接的,可靠的字节流服务
  • 为上层应用层提供服务,不关心具体传输的内容是什么,也不知道是二进制流,还是ascii字符。

2. tcp的可靠性如何保证

  • 分块传送:数据被分割成最合适的数据块(UDP的数据报长度不变)
  • 等待确认:通过定时器等待接收端发送确认请求,收不到确认则重发
  • 确认回复:收到确认后发送确认回复(不是立即发送,通常推迟几分之一秒)
  • 数据校验:保持首部和数据的校验和,检测数据传输过程有无变化
  • 乱序排序:接收端能重排序数据,以正确的顺序交给应用端
  • 重复丢弃:接收端能丢弃重复的数据包
  • 流量缓冲:两端有固定大小的缓冲区(滑动窗口),防止速度不匹配丢数据

3. tcp的首部格式

3.1 宏观位置

TCP协议详解一:连接特点、可靠性如何保证及首部格式
  • 从应用层->传输层->网络层->链路层,每经过一次都会在报文中增加相应的首部。参考之前的文章http协议
  • TCP数据被封装在IP数据报中

3.2 首部格式

TCP协议详解一:连接特点、可靠性如何保证及首部格式
  • tcp首部数据通常包含20个字节(不包括任选字段)
  • 第1-2两个字节:源端口号
  • 第3-4两个字节:目的端口号

    源端口号+ip首部中的源ip地址+目的端口号+ip首部中的目的ip地址,唯一的确定了一个tcp连接。对应编码级别的socket。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/6266.html

  • 第5-8四个字节:32位序号。tcp提供全双工服务,两端都有各自的序号。编号:解决网络包乱序的问题

    序号如何生成:不能是固定写死的,否则断网重连时序号重复使用会乱套。tcp基于时钟生成一个序号,每4微秒加一,到2^32-1时又从0开始文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/6266.html

  • 第9-12四个字节:32位确认序列号。上次成功收到数据字节序号加1,ack为1才有效。确认号:解决丢包的问题
  • 第13位字节:首部长度。因为任选字段长度可变
  • 后面6bite:保留
  • 随后6bite:标识位。控制各种状态
  • 第15-16两个字节:窗口大小。接收端期望接收的字节数。解决流量控制的问题
  • 第17-18两个字节:校验和。由发送端计算和存储,由接收端校验。解决数据正确性问题
  • 第19-20两个字节:紧急指针

3.3 标识位说明

  • URG:为1时,表示紧急指针有效
  • ACK:确认标识,连接建立成功后,总为1。为1时确认号有效
  • PSH:接收方应尽快把这个报文交给应用层
  • RST:复位标识,重建连接
  • SYN:建立新连接时,该位为0
  • FIN:关闭连接标识

3.4 tcp选项格式

TCP协议详解一:连接特点、可靠性如何保证及首部格式
  • 每个选项开始是1字节kind字段,说明选项的类型
  • kind为0和1的选项,只占一个字节
  • 其他kind后有一字节len,表示该选项总长度(包括kind和len)
  • kind为11,12,13表示tcp事务

3.5 MSS 最长报文大小

  • 最常见的可选字段
  • MSS只能出现在SYN时传过来(第一次握手和第二次握手时)
  • 指明本端能接收的最大长度的报文段
  • 建立连接时,双方都要发送MSS
  • 如果不发送,默认为536字节

作者:kinnylee
来源:掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/6266.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/wangluo/6266.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定