-
TCP 比较复杂
-
TCP 主要特点
1、面向连接
使用TCP之前,必须要先建立连接;数据传送完毕,必须释放已经建立的TCP连接。
类似于打电话:通话前要先拨号建立连接,通话结束后要挂机释放连接。
2、每一个TCP连接只能有两个端点,是点对点的连接。
3、提供可靠交付的服务
通过TCP连接传送的数据,不出错不丢失不重复。
4、全双工通信
TCP通信双方的应用进程在任何时候都能发送数据。
TCP两端都设有发送缓存
和接收缓存
,用于临时存放双向通信的数据。
发送时,应用进程把数据传送给TCP的发送缓存后,就可以做自己的事,TCP负责在合适的时候把数据发送出去。
接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
5、面向字节流
流:流入到进程或从进程流出的字节序列
面向字节流:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据
仅仅看成是一连串的无结构的字节流
。TCP不知道也不需要知道所传送的字节流的含义。TCP不保证接收方应用进程收到的数据块和发送方应用进程发出的数据块具有对应大小的关系(如发送方应用程序交给发送方TCP的10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。但是接收方应用进程收到的字节流
一定要和发送方应用进程发出的字节流
完全一样。
-
TCP和UDP在
发送报文时所采取的方式
是不同的。
TCP不关心应用进程一次将多长的报文发送到TCP缓存中,而是根据对方给出的窗口值
和当前网络的拥塞程度
来决定一个报文段应包含多少个字节
(UDP发送的报文长度是应用进程给出的)。
若应用进程传送到TCP(发送)缓存的数据块太长,TCP可以把它划分短一些再传送;
若应用进程传送到TCP(发送)缓存的数据块太短(如一次只发来一个字节),TCP可以等待积累有足够多的字节
后再构成报文段发送出去。 -
在
TCP报文段的首部
只有端口号
而没有IP地址
。
当TCP将其报文段交给IP层时,还需要告诉IP层此报文段要发送给哪一个目的主机
(给出其IP地址
)