TCP协议结构

TCP—传输控制协议

  • 缓冲区的意义

TCP协议是自带发送和接收缓冲区的,相当于malloc了两段内存空间。

系统调用接口send,write等并不是直接把数据发送到网络上,而是把数据拷贝到TCP的发送缓冲区,至此应用层的任务就完成了。

这样的设计可以提高应用层响应效率,其次是当前的网络状况是只有TCP协议可以知道的,应用层完成不知道。

那么什么时候发,发多少,出错了怎么办等这类问题,都是由TCP协议解决的,所以TCP协议叫做“传输、控制协议”。

因为缓冲区的存在,可以让应用层和TCP进行解耦。相当于应用层负责拷贝数据,TCP负责安排传输的方式。

TCP报文结构

408c.png)

  • 16位源/目的端口号

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去

  • 4位首部长度—实现有效载荷和报头的分离

4位首部长度:这是用来描述报头长度大小的,所以其单位并不是比特位,而是4个字节。

也就是说4位首部长度取值范围是0-15,那么报头长度取值范围就是该范围乘上4,也就是0-60字节,可以理解为就是加上下面的选项。不过一般都是0101,也就是5*4=20字节。

有了这个长度,在读到一个报文以后,进行报头和有效载荷分离的时候,会在前20个字节里分析出4位首部长度,确定出报头大小,从而实现报头和有效载荷的分离。

  • 32位序号/32位确认号

用于保证按序到达

  • 16位窗口大小

这个字段用于流量控制。

传输过程需要合理地进行安排,需要根据对方的接收能力进行流量控制。

在应答报文的报头填上:我自己的接收缓冲区中剩余的空间大小。

  • 6个标志位

server端可能在任一时刻都有大量的报文在向它发送数据,这些数据的来源如何甄别?如何区分不同种类的TCP报文?靠的就是6个标志位。

  • URG

表示该报文中携带了紧急数据。也可理解为紧急指针:有数据需要优先读取,就可以设置读取的起点。但是最大为1字节。

  • ACK

这个标志位是用来表示接收到的报文是表示确认信号的,代表确认号是否有效。例如接收到的报文是确认序号+ACK,这个标志位通常置1。

  • PSH

PUSH:提示接收端应用程序立刻从TCP缓冲区把数据读走。

  • RST

表示对方要求重新建立连接。我们把携带RST标识的称为复位报文段。

  • SYN

这个标志位是建立链接的请求标志位。意味着接下来要进行三次握手。

我们把携带SYN标识的称为同步报文段。

  • FIN

通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段。

  • 32位序号

在发送信息时使用TCP协议会将信息拆分成多个数据报发送给接收方,发送数据时会对每个字节的数据进行编号,等数据到达接收端是会对数据进行重新排序,避免网络数据报乱序。这就是32位序号的意义。

当触发TCP超时重传机制时,有可能造成接收方接收重复数据,这时接收方会根据接收到的数据序号进行去重。如果之前收到了这个序号的数据就进行去重。

  • 32位确认序号

TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者, 我已经收到了哪些数据;下一次你从哪里开始发。

也即是说,32位序号里保存的是对历史报文数据+1,或者说是32位序号里的数据+1。例如:确认序号是10,代表着10之前的报文都已经收到了,下次发送请从10开始!

  • 注意

每一次发送与接收,无论是数据还是应答,都是一个完整的TCP报文,而不是简单的传输序号。可以不携带数据,但必须有TCP报头。

  • 疑问

为什么序号和确认序号是两个分离的字段?在发送和确认的时候不是只需要用到一个字段吗?

TCP是一个全双工的协议,双方通信的时候,一个报文既可以携带要发送的数据,也可以携带对历史报文的确认。

通俗的说,在你发送序号的时候,也可能在确认别人发来的序号,那么此时就需要将序号和确认序号分开两个字段。

  • 总结

32位序号用来保证按序到达,32位确认序号用来保证确认应答。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值