TCP概述

TCP的主要特点

  1. TCP是面向连接的传输层协议(应用程序在使用TCP协议之前必须先建立TCP连接,使用完后必须释放TCP连接)
  2. 每个TCP连接只能有两个端点,点对点的。(端点 - 套接字 (IP地址:端口号))
  3. TCP提供可靠性
  4. 全双工的。(TCP允许通信双方在任何时候都能发送数据,TCP连接两端都设有发送缓存和接收缓存,发送端在发送数据后,就做自己的事情了,数据会保存在缓存区,TCP会在合适的时候发送数据,接收同理)。
  5. 面向字节流的。(TCP把应用程序交下来的数据块看成一连串无结构的字节流)。

TCP的可靠性实现

  1. 基于请求应答机制的 - 每次发送完一个数据分组后,等待请对方确认,收到确认信号后再发送下一个分组,分组会进行编号。
  2. TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。保证序列按序到达
  3. 当TCP发送一组数据后,会启动一个超时定时器,如果一定时间内没有接到目的端的接受确认信号,则进行重发。超时重发。
  4. 丢包重传
  5. 通过滑动窗口进行流量控制,防止发送数据过快,要让接收方来的及接收。
  6. 接收方滑动窗口已满,发送方等待一段时间,系统过一段时间(设置定时器)会询问接收方的缓冲区
  7. 网络拥塞控制(慢开始,拥塞避免,快重传,快恢复)。

    TCP报文段的首部格式

//定义TCP报头
typedef struct _tcphdr
{
 byte source_port[2]; //发送端端口号,16位
 byte dest_port[2];  //接收端端口号,16位
 byte sequence_no[4]; //32位,标示消息端的数据位于全体数据块的某一字节的数字
 byte ack_no[4];   //32位,确认号,标示接收端对于发送端接收到数据块数值
 byte offset_reser_con[2];//数据偏移4位,预留6位,控制位6为
 byte window[2];   //窗口16位
 byte checksum[2];  //校验码,16位
 byte urgen_pointer[2]; //16位,紧急数据指针
 byte options[3];  //选祥和填充,32位
}TCP_HEADER;

这里写图片描述

  • 端口号:各占两个字节
  • 序号(4字节):[0,2^23 - 1],序号增加到最大后又变为0,本报文段所发送的第一个字节的序号。
  • 确认号(4字节):假设发送来的序号是101,数据长度为100 (101~200),返回下一待接收的序号201为确认号。(若确认号为N,代表到N-1为止的字节已经全部正确接收。)
  • 数据偏移(4比特位):TCP报文段数据部分与首部的距离。(因为有可变长部分,保留字段供以后使用)。4比特位最大为15,所以数据最大偏移位置是60字节。-选项长度不能超过60-20=40字节。
  • URG(紧急指针)-URG为1时,表示有效,代表当前数据应该率先处理。(提高优先级,不按原来的顺序)。
  • ACK(确认)-为1时确认号有效,为0时确认号无效。TCP规定建立连接时,该位默认至为1.
  • PSH(推送)-尽快推送交付。不等待缓冲区满。
  • RST(复位)-为1时表明TCP连接中出现严重错误,必须释放连接,重新建立。还可以用来拒绝非法链接。
  • SYN(同步)-建立连接时用来同步序列。SYN=1,ACK=0,表明这是一个请求连接。若对方同意会回复SYN=1,ACK=1的报文段。
  • FIN(终止)-用来释放一个连接,为1时表明此报文段已经发送完毕,要求释放链接
  • 窗口(2字节):告诉发送方,从确认号起,接收方可以接收 发送方发送的数据量的大小。
  • 检验和(2字节):检验数据段和首部。
  • 紧急指针(2字节):当URG为1时有效,指出了紧急数据的字节数。就可以知道紧急数据的末尾,当处理完紧急数据后按序处理。
  • 选项(最大40个字节)。

    滑动窗口
    这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魏尔肖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值