1、TCP/IP最主要的特点:

(1)TCP是面向连接的运输层协议。

(2)每一条TCP连接智能有两个端点。

(3)TCP提供可靠交付的服务。

通过TCP连接传送的数据,无差错,不丢失,不重复,而且按需到达;

(4)TCP提供全双工通信。

(5)面向字节流。

“流”指的是流入到进程或从进程流出的字节序列。

 

2、TCP的连接

TCP连接的端点叫做套接字或者插口。端口号拼接到IP地址即构成套接字。

套接字soket=(IP地址:端口号)

每一个TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定:即:

TCP连接::={soket1,soket2}={(IP1:port1),(IP2:port2)}

3、可靠传输的工作原理

TCP发送的报文段是交给IP层传送的,但IP层指提供尽最大努力服务,也即是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。

理想的传输条件有以下两个特点:

(1)传输信道不产生差错。

(2)不管发送方以多块的熟读发送数据,接受方总是来得及处理收到的信息。

停止等待协议:

无差错情况,发送方A发送分组M1,发完就暂停发送,等待B的确认。B收到了M1就向A发送确认。A收到对M1的确认后,就再发送下一个分组M2,如此往复。

出现差错:B接受M1时检测出了差错,就丢弃M1,其他什么也不做。也有可能是M1在传输过程中丢失了,这时B当然不知道;

   以上情况有这样一个设计:A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失,因而重传前面发送过的分组。这就超时重传;

  实现超时重传,在每发完一个分组设置一个超时计时器。

确认丢失和确认迟到:如果某些情况下,B又收到了重传的分组M1。这时应采取两个行动:(1)丢弃这个重复的分组M1,不向上交付。(2)向A发送确认。不能认为已经      发送过确认就不在发送,因为A之所以重传M1就表示A没有收到M1的确认。

4、TCP报文段的首部格式

 

 

CP报文段首部的前20个字节是固定的,后面有4N字节是根据需要而增加的选项,因此首部的最小长度是20字节。

首部固定部分的个字段的意义如下:

1.源端口和目的端口字段

各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

2.序号字段

占4字节。TCP是面向字节流的,一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。

首部中的序号值是指本报文段所发送的数据的第一个字节的序号。

3.确认号:
4个字节,期待收到对方下一个报文段的第一个数据字节的序号。若确认号=N,表明到序号N-1为止的所有数据都已经正确收到!

4.数据偏移(即首部长度)

占4位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。 

因首部中还有长度不确定的选项字段,故数据偏移字段是必要的

而数据偏移的单位是4字节,则此字段是用来表TCP首部的长度的,最大长度是4*15,60字节,即选项长度不超过40字节.

5.保留字段:

占 6 位,保留为今后使用,但目前应置为 0。

6.紧急URG :

当 URG ==1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 而不是按原来的排队顺序传送。

当URG=1,发送进程就告诉TCP有紧急数据需传送,TCP就会将紧急数据插入到本报文段的最前面,这需要和首部中的紧急指针字段配合使用.

 

7.确认ACK(ACKnowlegment):

当ACK=1,确认号字段才有效,当ACK=0,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1.

8.推送PSH(PuSH):

当两个进程通信时,有时一端的进程希望键入一个命令后,能立即收到对方的响应,这时TCP就可以将PSH=1,

并立即创建一个报文段发送出去,接收方TCP收到PSH=1,就会尽快交付给接收端进程,而不会再等整个缓存填满后再交付。

9.复位 RST (ReSeT) 
当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接

RST置1可以用来拒绝一个非法的报文段或者拒绝打开一个连接。

10.同步SYN:
在建立连接时用来同步序号,当SYN=1&&ACK=0,表示这是一个请求连接的报文段,

若对方同意建立连接,则在响应报文段中使得SYN=1&&ACK=1。

故SYN=1:表示这是一个连接请求和连接接收报文。

11.终止FIN:

用来释放一个连接,当FIN=1,表示此报文段发送方的数据发送完毕,并要求释放连接。

12.窗口:

2个字节,从0开始,窗口指的是发送本报文段的这一方的接收窗口(而不是自己的发送窗口),窗口值作为接受方让发送方设置其发送窗口的依据。
窗口值告诉对方:从本报文段首部的确认号开始算起,
接收方目前允许(窗口值是经常动态变化的)对发送方发送的数据量。
窗口字段明确指出了现在允许对方发送的数据量。

13.检验和 

占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

14.紧急指针:

2个字节,当URG=1,紧急指针才有意义,指出本报文段中的紧急数据的字节数。

注意:当窗口值为0,也可以发送紧急数据。

15.选项:

最长为40字节,当没有选项时,TCP首部长度为20字节。