TCP协议
tcp协议,传输控制协议,是TCP/IP协议体系中一个复杂的协议
特点:
- 面向连接的运输层协议
- 每一个TCP连接只能有两个端点(每一条TCP连接只能是点对点的)。TCP连接的端点叫做套接字或者插口,定义:IP地址:端口号,例:(127.0.0.1:3306);每一条TCP连接唯一的被通信两端的两个套接字做确定。
- TCP提供可靠交付的服务,通过TCP连接传输的数据无差错 不丢失 不重复,并且按序到达
- TCP提供全双工通信。允许通信双方的应用进程在任何时候都能发送数据,连接的两端设有发送缓存和接受缓存,用来临时存放双向通信的数据。
- 面向字节流,‘流’指流入到进程或从进程流出的字节序列;虽然应用程序和TCP的交互是一次一个数据库块,但TCP把应用程序交付下来的数据看成是一连串的无结构字节流
注意:套接字可以表示多种不同的意思,例如:
- 允许应用程序访问联网协议的应用编程接口API,即运输层和应用层之间的一种接口,成称为socket API
- 在socket API中使用的一个函数名也叫做socket
- 调用socket函数的端点称为socket
- 调用socket函数时,,其返回值称为socket描述符,简称socket
- 操作系统内核中联网协议的Berkeley实现,称为socket实现
可靠传输原理
实现可靠的理想传输的两个特点:
- 传输信道不产生差错
- 不不管发送方以多快的速度发送数据,接受方都应该总是来得及处理收到的数据
实际的网络都不具备以上两个条件,可以通过使用可靠传输协议实现以下两个方面:
- 当出现差错时,发送方重传出现差错的数据
- 同时,在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度
这样,本身不可靠的传输信道就可以实现可靠传输了。
停止等待协议:
将传送的数据单元都称为分组,则‘停止等待’就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
优点:简单
缺点:信道利用率低
过程:
- 无差错情况:A发送分组M1,发送完暂停发送,等待B的确认。B收到了M1就像A发送确认。A在收到了对M1的确认后发送提供下一个分组M2,以此类推。
- 出现差错:B接收M1时检测出了差错,丢弃M1,其他什么都不做;A在超过一段时间时没有收到确认,就认为之前的分组丢失,重新传送,即超时重传。实现时,每发送出去一个分组就设置一个超时计时器,计时器到期之前若受到了确认,就撤销计时器。
- 确认丢失和确认迟到:若B所发送的确认丢失了,A在超时崇川时间内没有收到确认,A无法确认是自己发送的分组丢失 出错了,还是B发送的确认丢失了,这是重新传送,B在收到重传的数据后应采取以下动作:
若确认迟到,即传输过程没有差错,但确认包出现了迟到,此时丢弃重复的确认,并重传确认分组
- 丢弃重复的分组
- 向A发送确认。不能认为已经发送过确认就不再发送
连续ARQ协议和滑动窗口协议
目的:解决停止等待协议对于信道利用率低的问题。发送方不采用低效率的停止等待协议,采用流水线传输,就是发送方可连续发送多个分组,不必等待对方的确认,这样,信道上可以一直有数据不间断的在传送。
连续ARQ协议:
原理:
过程:
定义一个发送窗口,其中可包含多个分组,位于发送窗口内的分组都可以连续发送出去。而不需要等待对方的确认。
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前华滑动一个分组的位置。
接收方一般采用累积确认的方式,即接收方在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都正确收到了。这种方式的优点是:实现简单;缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
TCP报文段首部格式
TCP报文段的前20个字节的首部是固定的,也是首部的最小长度,后面的选项根据需要可增加 4n 字节,选项和固定首部共同构成TCP报文段的首部。
部分字段的意义:
- 源端口和目的端口:各占2个字节,TCP的分用功能通过端口体现
- 序列号:4字节,序号范围从0到2的32次减1整个要传送的字节流的起始序号在建立连接时设置,该字段表示本报文段所发送的数据的第一个字节的序号。
- 确认号:占4个字节,是期望收到对方下一个报文段的第一个字节数据字节的序号。
- 4位首部长度:此处应为数据偏移,占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际上指出TCP报文段的首部长度;数据偏移的单位是32位字(以4字节长的字为计算单位);由于4位二进制数最大可以表示15,所以数据偏移最大值60,即TCP首部的最大长度,选项长度不能超过40.
- URG:当URG=1时,表示紧急指针字段有效,会告诉系统,此报文段中有紧急数据应尽快传送。紧急数据会插入到报文段数据的最前面
- ACK:确认号标志位,仅当ACK=1时,确认号字段才有效;TCP规定,在建立连接后,所有传送的报文段ACK都必须置1。三次握手和四次挥手时使用。
- 推送PSH:两个应用进程进行交互式的通信时,一端的应用进程在键入一个命令希望立即收到对方的回应时使用。
- 复位RST:重置位,RST=1时,表示TCP连接出现严重差错,需要释放连接,重新建立运输链接;RST置1还用来拒绝一个非法的报文段或者拒绝打开一个连接。
- 同步SYN:连接建立时,用来同步序号,SYN=1且ACK=0时,表示该报文段是一个连接请求报文段;对方同意连接,则在响应报文段中使SYN=1且ACK=1.所以SYN置为1时,表示这是一个连接请求或者连接接受报文段。
- 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据发送完毕,并要求断开TCP连接。
- 窗口:指出现在允许对方发送的数据量,窗口值是经常在动态变化的。窗口值作为接收方让发送方设置其发送窗口的依据。