运输层

1.1.逻辑通信

运输层为应用进程之间提供端到端的逻辑通信。运输层之间的通信并不是真正在两个运输层之间直接传送数据。运输层向应用层屏蔽了下面的网络细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。

当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,只提供尽最大努力服务,但这种逻辑通信信道就相当于一条全双工通信的可靠信道。当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。

1.2.用户数据报协议 UDP(User Datagram Protocol)

1.2.1.UDP的主要特点

(1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延.
(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状表
(3)UDP是面向报文的.发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层,既不合并,也不拆分,而是保留这些报文的边界.在接收方的UDP,对IP层交上来的用户数据报文,在去除首部后就原封不动地交付上层的应用进程.
(4)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低.
(5)UDP支持一对一、一对多、多对一和多对多的交互通信
(6)UDP的首部开销小,只有8个字节

1.2.2.UDP的首部格式

(1)源端口号. 在需要对方回信时选用.不需要时可用全0.
(2)目的端口 目的端口号.这在终点交付报文时必须使用.
(3)长度 UDP用户数据报的长度,其最小值是8(仅有首部).
(4)检验和 检测UDP用户数据报在传输中是否有错.有错就丢弃.

1.3.传输控制协议 TCP(Transmission Control Protocol)

1.3.1.TCP主要的特点

(1)TCP是面向连接的.应用程序在使用TCP协议之前,必须先建立连接.在传送数据完毕后,必须释放已经建立的连接
(2)TCP连接是点对点的,TCP连接的端点叫套接字,套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号隔开
(3)TCP提供可靠交付的服务.通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达.
(4)TCP提供全双工通信.TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都有发送缓存和接收缓存,用来临时存放双向通信的数据
(5)TCP面向字节流.虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流.TCP并不知道所传送的字节流的含义.TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系

1.4.可靠传输的工作原理

TCP之所以提供可靠交付的服务是因为实现了ARQ协议(Automatic Repeat-reQuest 自动重传请求)

1.4.1.1.停止等待

停止等待协议能够在不可靠的传输网络上实现可靠的通信。每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。分组需要进行编号。

1.4.1.2.超时重传

超时重传是指只要超过了一段时间仍然没有收到确认,就重传前面发送过的分组
(认为刚才发送的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。

实现超时重传:
1.发送方在发送完一个分组后,必须暂时保留已发送的分组的副本,只有在收到相应的确认后才能清除暂时保留的分组副本。
2.分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
3.超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些.

1.4.1.3.确认丢失和确认迟到

接收方接收到重复的分组就丢弃,不向上层交付,但需要给发送方发出一个确认,他之所以收到重复的分组是因为发送方没有收到确认,认为分组在网络上丢失了,所以超时重传。

1.4.2.连续ARQ协议

连续ARQ协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已正确收到了。
累积确认有优点也有缺点.优点是:容易实现,即使确认丢失也不必重传.但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息.

1.5.TCP报文段的首部格式

  • 序号:TCP是面向字节流的.在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置.首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号。
    若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到
  • 确认ACK:仅当ACK=1时确认号字段才有效.TCP规定,在连接建立后所有传送的报文段都必须把ACK置1.
  • 同步SYN:在连接建立时用来同步序号.当SYN=1而ACK=0时,表明这是一个连接请求报文段.对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1.因此,SYN置为1就表示这是一个连接请求或连接接受报文。
  • 终止FIN:用来释放一个连接.当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接.
  • 窗口:窗口指的是发送本报文段的方的接收窗口(而不是自己的发送窗口).窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位).之所以要有这个限制,是因为接收方的数据缓存空间是有限的.总之,窗口值作为接收方让发送方设置其发送窗口的依据。

1.6.TCP可靠传输的实现

以字节为单位的滑动窗口
超时重传时间的选择
选择确认SACK

1.7.TCP的流量控制

利用滑动窗口实现流量控制
TCP的传输效率

1.8.TCP的运输连接管理

1.8.1.TCP的连接建立(三次握手)

(1)A向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x,然后进入SYN-SENT状态
(2)B收到连接请求报文段后,如同意建立连接,则向A发送确认.在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y.然后进入SYN-RCVD状态
(3)A收到B的确认后,还要向B给岀确认.确认报文段的ACK置为1,确认号ack=y+1,而自己的序号seq=x+1.TCP连接建立,A进入 ESTABLISHED(已建立连接)状态.
TCP的标准规定,ACK报文段可以携带数据.但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq=x+1.这时,
(4)当B收到A的确认后,也进入 ESTABLISHED( /ɪˈstæblɪʃt/ )状态.

为什么A最后还要发送一次确认呢?
主要是为了防止已失效的连接请求报文段产生错误.
什么是已失效的连接请求报文呢?
已失效的连接请求报文是说A发出的第一个连接请求报文段在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B.本来这是一个早已失效的报文段.但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求.于是就向A发出确认报文段,同意建立连接.
假定不采用三次握手,那么只要B发出确认,新的连接就建立了.由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据.但B却以为新的连接已经建立了,并一直等待A的数据.B的许多资源就这样白白浪费了.
采用三次握手,由于A并没有发送请求连接报文,所以A不会向B的确认发出确认.B由于收不到确认,就知道A并没有要求建立连接.

1.8.2.TCP的连接释放(四次挥手)

(1)A主动关闭TCP连接.A把连接释放报文段首部的终止控制位FIN置为1,其序号seq=u,(它等于前面已传送过的数据的最后一个字节的序号加1.)然后A进入 FIN-WAIT-1(终止等待1)状态,等待B的确认
(2)B收到连接释放报文段后发出确认,确认号是ack=u+1,确认报文段序号seq=ⅴ(它等于B前面已传送过的数据的最后一个字节的序号加1).然后B就进入 CLOSE WAIT(关闭等待)状态
(3)A收到来自B的确认后,就进入 FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段.
(4)若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接.这时B发出的连接释放报文段终止控制位FIN置为1.序号seq=w(在半关闭状态B可能又发送了一些数据).确认号ack=u+1.这时B就进入 LAST- ACK(最后确认)状态,等待A的确认.
(5)A在收到B的连接释放报文段后发出确认.在确认报文段中把ACK置为1,确认号ack=w+1,序号seq=u+1。然后进入到 TIME-WAIT(时间等待)状态,经过时间等待计时器( TIME- WAIT timer)设置的时间2MSL(最长报文段寿命)后,A才进入到 CLOSED状态
(6)B只要收到了A发出的确认,就进入 CLOSED状态.

为什么A在 TIME- WAIT状态必须等待2MSL的时间呢?
第一,为了保证A发送的最后一个ACK报文段能够到达B.这个ACK报文段有可能丢失,因而使处在 LAST-ACK状态的B收不到对已发送的FN+ACK报文段的确认.B会超时重传这个FN+ACK报文段,而A就能在2MSL时间内收到这个重传的FN+ACK报文段.接着A重传一次确认,重新启动2MSL计时器.最后,A和B都正常进入到CLOSED状态.如果A在 TMME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段.这样,B就无法按照正常步骤进入 CLOSED状态.
第二,防止上一节提到的"已失效的连接请求报文段"出现在本连接中.A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失.这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段B只要收到了A发出的确认,就进入 CLOSED状态.同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接.我们注意到,B结束TCP连接的时间要比A早

保活计时器
客户已主动与服务器建立了TCP连接.但后来客户端的主机突然出故障.显然,服务器以后就不能再收到客户发来的数据.因此,应当有措施使服务器不要再白白等待下去.这就是使用保活计时器.服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时.若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒钟发送一次.若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值