通信模式中的一种,它指通信双方在通信之前需要先建立连接,连接建立好后再进行通信,另外通信结束后还要释放已经建立的连接。
打电话就是一个面向连接的过程。通话前要先拨号建立连接,拨通后进行对话,通话结束后要挂机释放连接。
这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。也就是说,应用进程之间的通信好像在“打电话”。
-
TCP连接是一条虚连接(也就是逻辑连接),而不是一条真正的物理连接。
-
2.TCP提供可靠交付的服务。通过TCP连接传输的数据,无差错、不丢失、不重复,并且按序到达。
3.每一条TCP 连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。而是叫做套接字或插口。
端口号拼接到IP地址即构成了套接字,套接字结构如下:
例如:若IP地址是 192.168.23.5,而端口号是80,那么得到的套接字就是(192.168.23.5:80)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP连接 ::={socket1,socket2} = {(IP1:port1),(IP2:port2)}
这里的IP1和IP2分别是两个端点主机的IP地址,而port1和port2分别是两个端点主机中的端口号。TCP连接的两个套接字就是socket1 和socket2。
1)TCP连接的端点是个很抽象的套接字,即 (IP地址:端口号)。
2)同一个IP地址可以有多个不同的TCP连接,(因为同一个主机里可能有多个应用程序在通信)而同一个端口号也可以出现在多个不同的TCP连接中。(一个应用程序可能和不同的目标主机通信)
4.TCP提供全双工通信。TCP允许通信双方的应用程序在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
TCP中的“流”指的是流入到进程或从进程流出的字节序列。
TCP并不关心应用进程一次把多长的报文发送到 TCP 的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节。
如果应用进程传送到TCP缓存的数据会太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发来一个字节,TCP也可以等待积累足够多的自己节后再构成报文段发送出去。(见下图)
1)“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
3)TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的有关系。
例如发送方应用程序交给发送方的TCP共十块个数据块但接收方的TCP可能只用了四个数据块就把收到的字节流交付上层的应用程序。(这里的数据块内容量不一样,前者的数据块小,后者的数据块大。就好比我吃的一碗米饭相当于你的十碗米饭,前者的碗大,后者的碗小)但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
4)接收方的应用程序必须有能力识别收到的字节流,并把它还原成有意义的应用层数据。
突然想到了一句话,不管你多大,在父母眼里你永远就是个孩子。
个人觉得面向字节流和上句话有着异曲同工之妙,也就是说不管你应用层传递给我TCP的数据块有多大,我统统看成以字节为单位的字节流进行接收和发送,然后根据接收方要求,发送对应报文段,报文段形成的这个过程中有可能对收到的报文段进行拆分(对方只收数据部分3个字节,但上面传下来的却大于3字节,这时候就需要拆分),有可能进行组合(对方只收数据部分3个字节,上面传下来1字节,我TCP再等等,凑够3个字节再封装进行发送),也就是说我TCP只以字节为单位。
END
原文始发于微信公众号(计算机408):传输控制协议TCP的特点
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291239.html