说明
连接是指两个应用程序为了相互传递信息而专有的、虚拟的通信线路,也叫做虚拟电路。
流是指不间断的数据结构,类似于管道中的水流。可靠性指TCP协议提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具有“流量控制”、“拥塞控制”提供网络利用率等众多功能。
TCP是一种面向连接的传输控制协议(transform contorl protocol),必须要和服务器交互,具有高安全性,可靠性,需要和服务器进行三次握手,能根据具体网络拥堵情况进行延时。例如MSN传输
TCP协议为应用软件提供一种面向链接的可靠的字节流传输服务的协议。
三次握手
1552225-1126590e66ffd968.png
1、三次握手的主要目的在于同步连接双方发送数据的初始序列号。
连接中每次数据的发送、都需要附带序列号。作用已经在前文中提过
2、连接是双向的
数据的发送/回复是双向的。每个方向都有自己维护的序列号
3、SYN - 创建一个连接
4、ACK - 同意一个操作
- 第一次握手: (主动方 ----->> 被动方)链接待建立
主动方向被动方申请建立连接(SYN)--以发送数据给被动方 - 第二次握手: (主动方 ----->> 被动方)链接已建立、 (被动方 ----->> 主动方)链接待建立
被动方同意建立连接(ACK)--以接收主动方数据
被动方申请建立连接(SYN)--以发送数据给主动方 - 第三次握手: (主动方 ----->> 被动方)链接已建立、 (被动方 ----->> 主动方)链接已建立
主动方同意建立连接(ACK)--以接收被动方数据
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
四次挥手
1552225-ae4d37ee6deadacc.png
1、TCP连接是双向的
可以看做两个管道、同一时刻每一个管道都可以发送数据
2、半关闭
只关闭一个方向的数据传输、另一个方向还是可以继续的
3、FIN - 终结一个连接
4、ACK - 同意一个操作
5、主动方申请关闭
连接的主动方先发送FIN数据段、告诉被动方自己的数据发送完了。
6、被动方确认
连接的被动方很可能还没发送完数据、所以只能用ACK段告诉主动方自己知道也同意主动方关闭管道不在发送数据过来。
7、被动方申请关闭
连接的被动方在确认自己的数据也发送完了之后、发送FIN段给主动方关闭连接。
8、主动方确认
连接的主动方通过ACK告诉被动方、同意被动方也关闭管道。
TCP协议与UDP协议的比较
-
面向连接的传输服务
TCP以连接作为协议数据的最终目标
对于TCP协议,要成功建立一个新的链接,需要保证新链接四个要素组合体的唯一性:客户端的IP、客户端的port、服务器端的IP、服务器端的port。也就是说,服务器端的同一个IP和port,可以和同一个客户端的多个不同端口成功建立多个TCP链接(与多个不同的客户端当然也可以),只要保证【Server IP + Server Port + Client IP + Client Port】这个组合唯一不重复即可。 -
UDP以端口作为协议数据的最终目标
UDP协议的端口不可不用
对于UDP协议、是以监听端口作为操作的。而且在协议中、源端口和源IP地址都是可选项。哪怕不填(只制定了目的端口和目的地址)也可以成功发送。 -
TCP协议需要先建立连接、然后才能发送/接收数据
并且需要对很多细节进行协商(最大数据长度、窗口大小、初始序列号等) -
UDP协议直接发送/接收数据
-
可靠的传输服务
1、TCP协议提供的是可靠的传输服务 以序列号保证有序、以重发机制保证成功发送。 2、UDP协议提供的是不可靠的传输服务 可能会丢失、失序、重复等。 -
面向字节流的传输服务
TCP协议是以字节为单位流式传输数据,TCP的传输是无边界的
TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接口有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去。 -
UDP协议是以数据块传输数据
UDP的传输是有边界的
而UDP传输报文的方式是由应用程序控制的,应用层交给UDP多长的报文,UDP照样发送,既不拆分,也不合并,而是保留这些报文的边界,即一次发送一个报文。
TCP应用于UDP应用
- TCP应用
| 协议 | 说明 |
|---|---|
| FTP | 大文件传输,FTP是TCP/IP协议族之一、属于依赖TCP的应用层协议。适用于大批量、高可靠性要求的应用 |
| Telnet | 远程登录 ,适用于小批量、长时间、高可靠性要求的应用 |
| http | 可靠传输 |
-
UDP应用
1、事实应用 TCP的传输时有先后顺序的、所以有时会阻塞 2、多播式应用 TCP是面向连接的、如果要多播需要建立n*(n-1)个连接。













网友评论