TCP 是TCP/IP
体系中非常复杂的一个协议。
1、TCP 最主要的特点
序号 | 特点 | 描述 |
---|---|---|
1 | 面向连接 | 应用程序在使用 TCP协议之前,必须先建立TCP连接 。在传输数据完毕后,必须 释放 已经建立的 TCP连接。 |
2 | 每一条TCP连接 只能有两个 端点 | 每一条TCP连接只能是点对点 的(一对一)。 |
3 | 提供可靠交付 的服务 | 通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序 到达。 |
4 | 提供全双工 通信 | TCP 允许通信双方的应用进程 在任何时候都能发送数据。TCP连接的两端都设有 发送缓存 和接收缓存 ,用来临时存放双向通信 的数据。在 发送 时,应用程序 把数据传输给 TCP的缓存 后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在 接收 时,TCP把收到的数据放入缓存 ,上层的应用进程 在合适的时候读取缓存 中的数据。 |
5 | 面向字节流 (Byte Stream) | TCP中的流 指的是流入到进程 或从进程 流出的字节序列 。 |
TCP 面向 字节流 的概念:
TCP 和 UDP在 发送报文 时所采用的方式完全不同。
TCP 并不关心应用进程
一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP
发送的报文
长度是应用进程
给出的)。
如果应用进程
传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程
一次只发来一个字节,TCP也可以等待积累有足够多的字节后,再构成报文段
(Segment
)发送出去。
2、TCP 的连接(Socket)
每一条 TCP连接 有两个端点,端点叫套接字
(Socket
)。
端口号
拼接到IP地址
就构成了套接字
。
请注意:端点(endpoint) 不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。
套接字
的表示方法是在点分十进制
的IP地址
后面写上端口号
,中间用冒号或逗号隔开。如IP地址是 192.168.1.1,端口号是 80,那么得到的套接字就是(192.168.1.1:80
)
套接字 socket = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定:
TCP连接 ::= {socket1 , socket2} = {(IP1:port1) , (IP2:port2)}
IP1和IP2分别是两个端点主机的IP地址,port1和port2分别是两个端点主机中的端口号。TCP连接的两个套接字就是socket1
和socket2
。
请注意:同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。