TCP协议是TCP/IP协议族中非常复杂的协议。本章节就由浅入深的总结下。
知识点概览
一、TCP基础
1、tcp的有哪些主要特点?
(1)面向连接的运输层协议
应用程序使用TCP之前要先建立连接,传送数据完毕后必须释放建立的链接。
(2)一条TCP链接只能有两个端点
也就是说每条TCP链接只能是点对点(一对一)的。
(3)TCP提供数据的可靠交付。
TCP传送的数据无差错、不丢失、不重复、按顺序到达。
(4)TCP提供全双工通信
1、TCP允许通信双方的进程在任何时候都能发送数据
2、TCP两端设有发送缓存,接收缓存。用来临时存放双向通信的数据。
3、发送时,应用程序吧数据传送给TCP的缓存中,TCP在合适的时候发送出去。
4、接收时、,TCP吧数据放入缓存,上层应用进程在合适时读取缓存。
(5)面向字节流
1、流入到应用进程或者从应用进程流出的是字节序列。
2、虽然应用程序和TCP交互为一个个大小不等数据块,但是TCP吧每个数据块都看作一段段字节流。
3、TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系,但是接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
ps:简略图如下:
2、TCP链接
TCP是面向连接的,TCP的很多特性都与这个有关,那么TCP的链接的到底是啥?
其实TCP链接的端点既不是主机,不是主机的IP地址、不是应用进程、也不是运输层的协议端口。TCP链接的端点叫套接字(插口)。
(1)套接字(socket)
1、套接字:RFC 793定义端口号拼接到IP地址就构成了套接字。
2、表示方法:点分十进制的IP地址之后写上端口号,中间用冒号隔开即可。
3、栗子: 192.23.23.23:8080
(3)TCP链接
1、每一条TCP链接唯一的被通信两段的两个端点(两个套接字)所确定
2、TCP 连接的端点是个很抽象的套接字,即(IP 地址:端口号)
3、同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中
二、可靠传输的工作原理基础
TCP发送的报文交付给下层的IP层,而IP层只提供尽最大努力服务,不保证传输的可靠性。这时TCP需要采取适当的措施才能保证传输的可靠。
理想假设下的可靠传输
1、传输信道不产生差错
2、不管发送发以多块的速度发送数据,接收方总是来得及处理收到的数据。
实际中采取的措施
实际的网络中。以上两种都不具备,但是我们可以采取一些可靠的协议进行控制。
1、当数据出现差错时,让接收方重传数据。
2、当接收方来不及接收数据时告诉发送方适当降低发送的速度。
1、停止等待协议
1、前面我们了解到TCP通信的特点之一是全双工通信,也就是通信的双方既是发送方也是接收方。
2、为了方便讨论 下图中A我们定为发送方B为接收方
3、其实每一层传递的数据单元我们都可以叫做分组。这里也以分组表示。
什么是停止等待协议?
1、停止等待协议:发送方每发完一个分组就停止发送,等待接收方确认,接收方收到分组后发送确认,在收到接收方的确认后再发送下一个分组。
2、超时重传:A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组要实现超时重传,就要在每发送完一个分组设置一个超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。
(1)停止等待协议:无差错情况
(2)停止等待协议:超时重传(出现差错时)
1、出现差错的可能情况:
1、B在接收到M1分组后检测分组错误,丢弃M1
2、M1在发送过程中发生了丢失。
ps:这两种情况下B什么也不会做的,也不会通知A收到有差错的分组。2、超时重传时需要留意:
1、A发送完一个分组后需要暂时保留已发送的分组副本(在发生超时重传时可以使用),只有在收到相应的确认后才删除分组副本。
2、分组和确认分组要进行编号。这样可以明确哪一个发出的分组收到了确认。哪一个发出的分组没有收到确认。
3、超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些
(3)停止等待协议:确认丢失(出现差错)
可能出现的情况:
B收到M1分组后向A发动确认分组。但分组发送过程中丢失。A在超时计时器到达后就要重传分组M1。
假如这时B又收到了A发送的M1这时B要采取两个动作:1、丢弃这个重复的分组,不向上层交付。
2、向A发送确认分组(每次收到分组时都要发送确认分组,不能认为收到过这个分组就不发送了。况且A之所以重传M1就是因为没有收到M1的确认)
(4)停止等待协议:确认迟到(出现差错)
可能出现的情况:
B收到A发送的M1,这时开始发送确认分组。但是发送确认分组时,这个分组由于某些原因传递的很慢,A的M1的超时计时器事件到了还没收到确认,这时A在发个M1,B收到M1发现这个M1重复,丢弃这个重复的M1,发送确认分组。这时A收到确认分组。继续发送分组M2…Mn这时这个龟速的M1分组终于收到了。。。
处理:A收到迟到的确认分组,丢弃。
收获
1、通常A最终总是可以收到对所有发出的分组的确认。如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信
2、使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
3、上述的这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reRuest)。意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
停止等待协议的优缺
优点点简单,缺点信道利用率低。
1、假定AB之间有一条直通道信道(利用率低)
2、采用流水线方式传输1、流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然,这种传输方式可以获得很高的信道利用率。
2、当使用流水线传输时就要使用连续ARQ协议和滑动窗口协议
2、连续的ARQ协议基础和滑动窗口初识
滑动窗口是TCP协议的精髓,后面总结,这里主要总结下连续的ARQ协议基础。