网络编程——TCP协议面向连接的可靠的传输协议——建立与断开连接

TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。

TCP协议的特点

TCP协议提供面向连接的,端对端的,字节流的,可靠的,传输层的服务。TCP是在IP网络层之上的传输层协议。

端对端(port到port):IP层负责数据包从一个IP到另一个IP的传输。IP层之上的TCP层加上端口后,就面向进程了,每个端口port都可以对应到用户进程。

可靠的:包括收包后确认包、丢包后重发等措施来保证可靠性。由于带宽和不同机器处理能力不同,TCP要能控制流量。

字节流:TCP把应用程序的数据,组包成报文段,发送数据时设置超时,确认被其他端点接收到的数据,给到达顺序杂乱的数据进行重新排序,丢弃重复的数据,提供端到端的校验和。 
TCP必须把字节流转换成一组IP可以携带的分组。这被称为【组包】(packetization)。
这些分组,包含序列号,序列号在TCP中代表了,每个分组的第一个字节,在整个数据流中的字节偏移,而不是分组号。
这允许分组在传送中是可变大小的,并允许它们组合,称为【重新组包】( repacketization)。
应用程序数据,被打散成TCP认为的最佳大小的块来发送,使得每个报文段,按照不会被分片的单个IP层数据报,的大小来划分。这与UDP不同,应用程序每次写入就产生一个UDP数据,其大小就是写入的大小(加上头部)。
由TCP传给IP的块称为报文段(segment)。
 

TCP维持了一个强制的校验和

该校验和涉及它的头部、任何相关应用程序数据和IP头部的所有字段。这是一个端到端的伪头部,它用于检测传送中,引入的比特差错。如果一个带有无效校验和的报文段到达,那么TCP会丢弃它,不为被丢弃的分组发送任何确认。然而,TCP接收端可能会对一个以前的(已经确认的)报文段进行确认,以帮助发送方计算它的拥塞控制。TCP校验和,所用的数学函数与其他互联网协议(UDP、 ICMP等)一样。对于大数据的传送,对这个校验和是否不够强壮的担心是存在的,所以仔细的应用程序应该应用自已的差错保护方法(更强的校验和或CRC)。或者使用某种中间层来达到同样的效果。

 

TCP给应用程序提供全双工服务

数据可在两个方向流动,两个方向互相独立。连接端点必须对两个方向,维持数据流的一个序列号。一个完整的TCP连接是双向对称的,数据可以在两个方向上平等地流动。
使用序列号,一个TCP接收端可丢弃重复的报文段和记录以杂乱次序到达的报文段。
TCP是一个字节流协议,TCP不会以杂乱的次序把数据发送给上层应用程序。TCP接收端会被迫先保持大序列号的数据不交给应用程序,直到缺失的小序列号的报文段被填满,才交给应用程序。


TCP的封装和头部结构

网络编程——TCP协议面向连接的可靠的传输协议——建立与断开连接_第1张图片

 

     

 

一个TCP连接的建立与终止

ACK,接收方给发送方发信号以确定自已已经接收到一个分组,这种方法称为确认acknowledgment,A

你可能感兴趣的:(网络编程)