传输层
- UDP协议
- TCP协议
文章目录
一、概述
TCP协议特点:
- TCP协议是面向连接的协议,就是说在使用TCP协议之前,必须向建立TCP连接
- TCP协议是端对端的(UDP可以一对多,一对一),TCP只能一对一
- TCP提供可靠交付的服务,通过TCP连接传输的数据,无差错,不丢失,不重复,按需到达
- 面向字节流,这意味着上层应用交付给TCP的数据(可能是某些数据结构形成的数据块)对TCP来说是没什么意义的,TCP把它当成普通的二进制字节流,并对这个字节流的传输提供可靠服务。接收方的应用进程应该要具有能够识别字节流并还原为有意义的应用层数据的能力。
- TCP不关心应用进程一次把多少报文发送到TCP的缓存中,而是根据对方给出的接收窗口(流量控制)和网络拥塞程度(拥塞窗口)来决定发送的报文段中包含多少字节。
- 对过长的报文,TCP会把它划分为较短的报文后发送出去;对很短的报文,比如应用进程只发了一个字节,TCP恶意等待积累有足够多字节后再构成报文段发送出去。
二、TCP报文格式
- 源端口,目的端口
- 序列号:每个报文的序列号对应当前发送报文的第一个字节的序列号,如上一次发送方发送的序列号为1001,数据段长度为1000字节,则下一次报文的序列号为2001
- 确认号:累计确认机制,但有些区别,收到ACK(n),表示到n-1的序列号全部确认,序列号为n的没有确认
- 特殊位:
- URG
- ACK:在建立连接后,这一位均为1
- PUSH
- RST:TCP报文出现严重错误时置1
- SYN:TCP连接建立时,SYN置1
- FIN:TCP断开连接时,FIN置1
三、TCP的可靠交付原理
TCP的可靠交付的核心是滑动窗口协议,原理参考blog
但有一些区别:
- GBN中的ACK(n)是序号n之前(包括n)的数据报全部确认受到,TCP中的ACK(n)是指到n-1全部收到,n还没有收到(接收方期待收到的)
- 发送方滑动窗口的大小会变化
- 采用了
快速重传机制
快速重传机制:是区别丢包和网络拥塞的一种机制;GBN情况下,如果发送方发送的数据报丢失,发送方必须要超时后才重传;网络拥塞情况下,也是超时重传,两种情况无法区分的情况下不利于TCP的拥塞控制。为了区分这两种情况,添加了快速重传机制,即发送方受到连续三个重复确认,就知道发送时丢包了