TCP基础知识总结_tcp交互储存数据

2.4 全双工通信

TCP协议是一个全双工的协议,在TCP连接建立后,那么两个主机就是对等的,任何一个主机都可以向另一个主机发送数据,数据是双向流通的。
一般来说,TCP协议的确认是通过捎带方式来实现的,即接收方把确认信息放到反向传来的数据报文中,不必单独为确认信息申请一个报文,捎带机制减少了网络中的通信流量。

2.5 流量控制

TCP提供了流量控制服务(flow-control service)以消除发送方使接收方缓冲区溢出的可能性。流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。TCP协议中使用滑动窗口的流量控制方法。
TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制,它用于给发送方一个提示:接收方还能接收多少数据,接收方会将此窗口值放在TCP报文的首部中的窗口字段,然后传递给发送方,这个窗口的大小是在发送数据的时候动态调整的。

2.6 差错控制

除了确认与重传之外,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。

最全的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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值