4.3 传输控制协议TCP
4.3.1 TCP主要特点
(1)TCP是面向连接的运输层协议。在使用TCP协议之前需要先建立TCP连接,传输数据完成后,必须释放已经建立的TCP连接(就像打电话一样,拨号,挂机)。
(2)每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能点对点的。
(3)TCP提供可靠的交付。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。
(4)TCP提供全双工通信。 TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通行的数据。在发送时,应用程序把数据传送到TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去;在接收时,TCP把接收到数据存放在缓存中,上层的应用程序在合适的时候读取缓存中的数据。
(5)面向字节流。TCP中的“流”指的是流入到进程或者从进程流出的字节序列。面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交付下来的数据看成仅仅是一连串的无结构的字节流。
如图所示,TCP和UDP在发送报文时所采用的方式是完全不同的。TCP对应用进程一次把多长的报文发送到TCP缓存中是不关心的。TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。
图中的TCP连接是一条虚连接,而不是一条真正的物理连接。TCP报文段先发送到IP层,IP层加上首部后再将TCP报文段发送到数据链接层,数据链接层在加上首部和尾部后,才离开主机发送到物理链路。
4.3.2 TCP的连接
TCP把连接作为最基本的抽象。每条TCP连接都有两个端点,TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做**套接字(socket)**或插口。
端口号拼接到IP 地址即构成了套接字。
格式: 套接字 socket = (IP地址:端口号) 比如:192.3.4.5:80
每一条TCP连接唯一地被通信两端的两个端点(两个套接字)所确定。
TCP连接 ::= {socket1,socket2} = {(IP1:port1),(IP2:port2)}
记住:TCP连接的端点是套接字。同一个IP地址可以有多个不同的TCP连接,而同一个端口号可以出现在不同的TCP连接中。