2024年Linux最全TCP基础知识总结_tcp交互储存数据

2.7 拥塞控制

如果一个主机以很大的流量给另一个主机发送数据,但是其中间的路由器通道很小,无法承受这样大的数据流量的时候,就会导致拥塞的发生,这样就导致了接收方无法在超时时间内完成接收(接收方此时完全有能力处理大量数据),而发送方又进行重传,这样就导致了链路上更加拥塞。
因此发送方必须实现一定的自适应机制,在网络中拥塞的情况下调整自身的发送速度,这种形式对发送方的控制被称为拥塞控制

3. 端口号的概念

TCP协议的连接是包括上层应用间的连接,简单来说,TCP连接是两个不同主机的应用连接,而传输层与上层协议是通过端口号进行识别的,端口号的取值范围是0~65535,这些端口标识着上层应用的不同线程。一个主机内可能只有一个IP地址,但可能有多个端口号,每个端口号表示不同的应用线程。
TCP协议常用的端口号如下表所示:

端口号协议说明
20/21FTP文件传输协议
23Telnet终端远程登录
25SMTP简单邮件传输协议
69TFTP普通文件传输协议
80HTTP超文本传输协议
110POP3邮局协议版本3

4. TCP报文段结构

4.1 TCP报文段的封装

TCP报文段依赖IP协议进行发送,因此TCP报文段封装在IP数据报中,IP数据报封装在以太网帧中,TCP报文段经过了两次的封装,然后发送出去,具体见下图:

TCP报文段的封装

4.2 TCP报文段格式

TCP报文段如ARP报文、IP数据报一样,也是由首部+数据区域组成,TCP首部内容很丰富,如果不计算选项字段,一般来说TCP首部有20字节,如下图所示:

TCP报文段格式
在LWIP协议栈中,TCP报文段首部采用一个名字叫tcp_hdr的结构体进行描述:

struct tcp\_hdr {
  PACK\_STRUCT\_FIELD(u16\_t src);
  PACK\_STRUCT\_FIELD(u16\_t dest);
  PACK\_STRUCT\_FIELD(u32\_t seqno);
  PACK\_STRUCT\_FIELD(u32\_t ackno);
  PACK\_STRUCT\_FIELD(u16\_t _hdrlen_rsvd_flags);
  PACK\_STRUCT\_FIELD(u16\_t wnd);
  PACK\_STRUCT\_FIELD(u16\_t chksum);
  PACK\_STRUCT\_FIELD(u16\_t urgp);
} PACK_STRUCT_STRUCT;

1.源端口和目的端口:各占2个字节,端口是传输层和应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。
2.序号:占4个字节。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置,首部中的序号字段值则是指本报文段所发送的数据的第一个字节的序号例如,一个报文段的序号是301,而数据共100字节,这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401。
3.确认号:占4个字节。是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。
4.数据偏移(首部长度):占4位。它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。应注意,“数据偏移”以4字节为计算单位,由于4位二进制数表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大字节(即选项长度不能超过40字节)。
5.保留:占6位。保留为今后使用,但目前应置为0。
6.紧急URG:占1位。当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。要与首部中紧急指针字段配合使用。
7.确认ACK:占1位。仅当ACK=1时确认号字段才有效。TCP协议规定,在建立连接后所有传送的报文段都必须把ACK置为1.
8.推送PSH:占1位。当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(push)的操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去,接收方TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不用再等到整个缓存都填满了后再向上交付。
9.复位RST:占1位。当RST=1时,表明TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接。然后再重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。
10.同步SYN:占1位。在建立连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1,因此SYN置为1就表示这是一个请求连接或连接接受报文。
11.终止FIN:占1位。用来释放连接。当FIN=1时,表明此报文段的数据已发送完毕,并要求释放连接。
12.窗口:占2个字节。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
13.检验和:占2个字节。检验和字段检验的范围包括首部和数据这两部分。
14.紧急指针:占2个字节。紧急指针在URG=1时才有意义,它指出本报文段中的紧急数据字节数(紧急数据结束后就是普通数据),当紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可以发送紧急数据。
15.选项:长度可变,最长可达40字节。
16.填充:为了使整个首部长度是4字节的整数倍。

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值