TCP/IP详解 卷1 笔记 第17章 TCP:传输控制协议

来源:互联网 发布:名片设计软件手机版 编辑:程序博客网 时间:2024/05/22 07:49

TCP提供的是面向连接,可靠的字节流服务

TCP的可靠性:

  • 数据被分割成TCP认为最适合发送的数据块(18章介绍)
  • 当TCP发出一个段后,它启动一个定时器来等待对方确认收到这个段,如果在设定的时间结束还没收到确认就会重发这个报文段.(21章介绍)
  • TCP收到来自另一端的数据时会推迟几分之一秒再发送一个确认.(19.3节介绍)
  • TCP将保持它首部和数据的检验和.这是一个端到端的检验和,用来检测数据在传输过程中的任何变化,如果收到的检验和有差错,TCP会丢弃报文段并不发送确认报文(希望超时让对方重发)
  • TCP报文段作为IP数据报来传输有可能会失序,在必要的情况下TCP会对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层.(如果一直没收到完成的分片呢??不会一直等吧?)
  • IP数据报会发生重复,所以TCP接收端必须丢弃重复的数据.
  • 流量控制是TCP提供的,TCP连接的每一方都有固定大小的缓冲空间,TCP接收端值只允许另一端发送接收端缓冲区所能接纳的数据,这样可以防止较快主机让较慢主机缓冲区溢出.

TCP数据在IP数据报中的封装

TCP首部格式

32位序号(Sequence number): 用来跟踪和对方端发送的数据量来计数(单位是字节,比如第一个TCP数据报的序号是1000,这个报是20个字节,那么下一个报的序号就是1020 ),当某个主机开启一个TCP会话时,他的初始序列号是随机的,可能是0和4,294,967,295之间的任意值,(像Wireshark这种工具,通常显示的都是相对序列号/确认号,而不是实际序列号/确认号,相对序列号/确认号是和TCP会话的初始序列号相关联的。这是很方便的,因为比起真实序列号/确认号,跟踪更小的相对序列号/确认号会相对容易一些).

32位确认序号(Acknowledgement number): 确认数据报没有错误的情况下向对方发送确认序号,确认序号由目前收到的最后一个数据报的序号+字节长度+1.并且只有ACK字段为1时确认序号才有效.

4位首部长度:一般TCP首部为20字节.(这个字段单位是4字节,也就是首部中有多少个32bit)

6个标志比特(control bits): 可以多选
URG 紧急指针(urgent pointer)
ACK 确认序号
PSH 接收方应尽快将这个报文段交给应用层
RST 重建连接
SYN 同步序号用来发起一个连接
FIN 发送端完成发送任务

16位窗口大小: TCP的流量控制由连接的每一段通过声明窗口大小来提供,单位为字节数.

16位检验和: 由发送端计算和存储,接收端验证,计算方法和UDP相似.(11.3节介绍)

16位紧急指针: 当URG标志为1时才有效,是发送端向另一端发送紧急数据的一种方式(20.8节介绍)

选项: 最常见的可选字段是最长报文大小(MSS:Maximum Segment Size),在通信的第一个报文段中指明这个选项.

0 0