TCP协议是传输层的一个重要的协议,用于点对点的数据传输。它是可靠的面向连接的流式服务
(1)可靠性
TCP协议自带超时重传,应答确认机制,保证其可靠性。
(2)面向连接
TCP数据报要想发送,必须先建立连接(三次握手),然后在连接好的双方之间进行数据传输。
三次握手:服务器向客户端发送带SYN标志位的请求报文,表示请求连接(初始值i)。客户端收到后发送带SYN标志位和ACK标志位的报文,表示服务器也要请求服务器的连接(表示应答的初始值j),并且回复客户端,表示“我已经收到了你的请求”(表示回复客户端的请求i+1)。客户端向服务器发送ACK报文,表示知道对方的请求(回复服务器的请求j+1)。
![](https://img-blog.csdnimg.cn/20190729190333201.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1eXlfaHVp,size_16,color_FFFFFF,t_70)
(3)流式服务与数据报服务;
流式服务:TCP协议在数据传输过程中,发送方与接收方都有发送缓冲区和接收缓冲区。当发送方将数据写入发送缓冲区后,发送到接收方的接收缓冲区中,然后由接收方将数据从接收缓冲区中读出。这个过程中,发送方执行多次写操作后将数据发送给接收方。接收方接收后将数据分一次或多次读出。发送方每次写入缓冲区的数据多少和接收方每次读出数据的多少是编程过程中自定的,没有数量限制。所以,接收方收到的报文数量与接收方从接收缓冲区读出数据的多少没有直接关系。
综上所述:发送端的写操作和接收端的读操作次数之间没有任何数量关系。这就是字节流的概念:应用程序对数据的发送和接收是没有边界限制的。
数据报服务:发送端每次执行一次写操作,然后封装成数据报发送给接受段,接收端必须及时针对收到的数据报及时处理,否则就会被丢弃。