计算机网络之传输层 下(TCP)

时间:2023-01-13 14:35:17

1.  TCP的特点

   特点:它是一个点到点的通信机制,只能有一个发送方和一个接收方;它提供是一个可靠的,按序的字节流机制;使用流水线机制,通过拥塞控制和流量控制的机制设置窗口尺寸;发送方和接收方都有缓存;它是一个全双工,能双向传输数据的面向连接的通信,通信双方必须在发送数据之前建立连接,连接状态只能在连接的两端维护,不能在沿途的结点维护状态。

2.  TCP的段结构

   计算机网络之传输层 下(TCP)

   源地址端口,目的端口地址;

   序号(TCP传输保证连接性,发送的每个字节都要编上号),确认号(接收方期望从对方接受的字节编号。如果报文段的接收方成功的接受了对方发过来的编号x的字节,那么返回x+1作为确认号,确认号可以和数据捎带一起发送。)  

   控制:定义了6中不同的控制位或者标志位:URG:紧急数据标志位,ACK:确认标志位,PSH:请求推送位,接收端应尽快把数据传送给应用层,RST:连接复位,通常,如果TCP收到的一个分段明显不属于该主机的任何一个连接,则向远程发送一个复位包,SYN:建立连接,让连接双方同步序列号,FIN:释放连接

   检验和:TCP的使用检验和是强制性的,UDP使用检验和是可选的。在计算检验和是报文段要附加相同的伪首部,对于TCP来说伪首部的协议字段的值是6

 

   序列号和ACK

   计算机网络之传输层 下(TCP)

3.  TCP可靠数据传输

   TCP在IP层提供的不可靠服务基础上实现的可靠数据传输,使用流水线机制,累积确认机制,单一的重传计时器。触发重传的事件:超时,收到重复的ACK。

   那么如何设置定时器的超时时间?

   计算机网络之传输层 下(TCP)计算机网络之传输层 下(TCP)

4.  TCP发送方的事件

   计算机网络之传输层 下(TCP)

5.  TCP接收方时间

   收到 一个连续的段,等待最多500ms,看有没有下一个段,否则发送ACK,

   收到乱序的段,立刻发送重复的ACK。

6.  快速重传机制

   TCP实现中,如果发生超时时间,超时时间间隔会重新设置,即将超时时间间隔加倍,导致其很大,重发丢失分组的时间会等待很久的时间。  

   可以通过重复ACK检测检测分组丢失,Sender收到同一个数据的3个ACK,则假定该数据之后的段已经丢失,即在定时器超时之前进行重传。

7.  TCP流量控制

   接收方为TCP连接分配buffer

   计算机网络之传输层 下(TCP)

   如果上层应用处理buffer中的数据较慢,发送方在这个机制下发送方不会传输的太多太快以至于淹没接收方(buffer溢出)

   实现的时候就是Received在Segment的头部字段中将RcvWindow告诉Sender,Sender限制自己发送的但还没收到ACk的数据不超过接收方的空闲RECWindow的尺寸。  

   但是如果Received告知Sender RcvWindow=0是,发送方仍然可以发送一个很少的数据段,从而更新RcvWindow的值

8.  TCP连接管理

   1.TCP的三次握手

   计算机网络之传输层 下(TCP)

   step1:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x(随机数);

   step2:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置ACK为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;

   step3:客户端收到服务器的SYN+ACK报文段。然后将ACK设置为y+1,向服务器发送ACK报文段,

   为什么需要三次握手?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

   2.TCP的四次挥手

   计算机网络之传输层 下(TCP)

   计算机网络之传输层 下(TCP)

   为什需要四次挥手?

   TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。