TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢。
- 面向连接:一定是「一对一」连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
- 可靠的:无论网络链路中出现了怎样的变化,TCP都可以保证每个报文都一定能够到达接收端;
- 字节流:无论我们消息有多大都可以进行传输,并且消息是有序的,当前一个消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。
TCP对报文的处理:
发送方的TCP把应用进程交付下来的数据块,仅仅看做是一连串的无结构的字节流,TCP并不知道这些字节流的具体含义,仅将他们编号,存储在发送缓存中,TCP根据发送策略,从发送缓存中提取一定数量的字节,构建TCP报文段,并发送,接收方的TCP,一方面从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中,一方面将接收缓存中的一些字节交付给应用进程,TCP不保证接收方应用进程所收到的数据块与发送方应用进程发出的数据块具有对应大小的关系,例如发送方的应用进程交给发送方TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付给了上层的应用进程。接收方的应用进程必须有能力识别收到的字节流并还原成有意义的应用层数据,TCP面向字节流是TCP实现可靠传输,流量控制,以及拥塞控制的基础。在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收(即全双工通信)。
TCP所属传输层与网络层和应用层的关系:
网络层向传输层提供的是无连接的不可靠的传输服务(也就是说IP数据报可能会出现丢失或者误码),当传输层使用tcp协议时,传输层给应用层提供的是面向连接的可靠的传输服务,不会出现误码,丢失,乱序,重复等传输差错。
TCP三次握手建立连接:
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。