TCP 最主要的特点
-
TCP 是面向连接的运输层协议。在传送数据之前,必须先建立TCP连接。在传送数据完毕后,必须释放己经建立的TCP连接
-
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
-
TCP 提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
-
TCP 提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
-
面向字节流。 最小单位为字节。
图一
图二
-
TCP 连接是一条虚连接而不是一条真正的物理连接。
-
TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
-
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
-
TCP 可把太长的数据块划分短一些再传送。
-
TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
TCP 的连接
- TCP 把连接作为最基本的抽象。
- 每一条 TCP 连接有两个端点。
- TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
- 端口号拼接到(contatenated with) IP 地址即构成了套接字。
套接字 (socket)
套接字 socket = (IP地址: 端口号)
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP 连接 = {socket1, socket2} = {(IP1: port1), (IP2: port2)}