考研—计算机网络—传输层

传输层

传输层提供的服务

 

传输层的功能

  1、传输层向应用层提供通信服务,它属于面向通信的最高层,同时也是用户功能的最底层。

  2、传输层运行在进程与进程之间,提供了逻辑通信。而网络层提供的是主机到主机之间的逻辑通信。逻辑通信是指好像这个通信是水平的,是从这个主机的进程直接到另一个主机的进程。

  3、只有主机的协议栈才有传输层和应用层,路由器使用下三层的功能。

  4、复用和分用:复用是指发送方不同的应用进程都可以使用同一个传输层协议。分用是指接收方的传输层能将数据部分正确交付给目标进程。

  5、传输层要对首部和数据部分进行差错检测

  6、传输层提供两种不同的传输协议,TCP是面向连接的,是可靠的,UDP是无连接的。依旧是不可靠的。

 

传输层的寻址与端口

1、端口的作用:端口是应用层中的进程和传输层的数据通道。传输层的地址就是端口标识,端口标识就是进程的地址。就相当于数据链路层的MAC地址和网络层的IP地址。传输层的端口是软件端口,而非硬件端口。端口号只用来标示本计算机应用层的各种进程,与互联网上的其他计算机的端口号没有关系,不冲突。

2、端口号:端口号长度为16bit,能够表示65536个不同的端口号。端口号只在本地有意义。

端口号分为服务端端口号和客户端端口号:

服务端口号分为两类:熟知端口号 0——1023,这些端口号用来指派TCP/IP最重要的一些应用程序。另一类是登记端口号1024——49151 用来登记那些不是熟知的应用程序。

客户端端口号 49152——65535 这种是客户进程运行时使用的。通信结束后,这个端口号就可以为其他进程使用了。

3、套接字:用来确定互联网中唯一的进程。由【主机IP地址,端口号】可以唯一确定网络中的一个主机中的一个进程。

 

无连接服务和面向连接的服务

传输层提供了面向连接的TCP服务和无连接的UDP服务。

TCP是一条可靠的全双工的逻辑信道;UDP是一条不可靠的逻辑信道。

TCP因为面向连接不提供组播和广播功能,由于需要连接,所以首部增大很多。

UDP在IP层之上仅仅加了多路复用和数据错误检查的功能。UDP比较简单,速度就比较快。

【注意】UDP数据报和IP数据报的区别。UDP被封装在IP数据报中的数据部分,对路由不可见,UDP是端到端的逻辑信道。TCP和网络层虚电路的区别,TCP对路由器不可见,IP层若使用虚电路就不能使用IP数据报。但是TCP依旧可以使用。

 

UDP协议

 

UDP的优点:

1、不需要建立连接,速度很快。

2、不需要维护连接状态

3、首部小,只有8字节。

4、可以很好的控制发送数据和发送时间,因为没有拥塞控制。适合实时进程。

1」UDP常用于一次性传输比较少量数据的网络应用。也常用于多媒体应用。重视速度的进程。

2」UDP提供尽可能的交付,不保证可靠交付。所以使用UDP的应用需要负责可靠性。

3」UDP是面向报文的,在UDP中数据是以报文为单位的,UDP不拆解报文。

 

UDP首部格式

UDP数据报包含UDP首部和用户数据。整个UDP数据报被作为IP数据报的数据部分。

首部格式(64位):

1、源端口(16位):对方回信时使用,不需要时全为0

2、目的端口(16位):在终点交付时使用。

3、长度(16位):UDP数据报长度,包括首部和数据部分。最小值为8(仅有首部),所以长度以字节为单位,

4、检验和(16位):用来检测差错,不想用就全为0

【注意】当UDP报文中的端口号错误时,就丢弃报文,并发送ICMP端口不可达差错报文发回给发送方。

UDP校验

伪首部:在UDP校验时为了同时也校验IP数据报首部的正确性,所以临时在UDP数据报前面加一个伪首部,伪首部中包含着源ip地址、目的ip地址。只在校验的时候加上伪首部,不会发送出去,只是一个临时的。

检验方法:在发送方,把全0加入检验和字段,并且添加伪首部。把UDP数据看成若干个16位的字串,所以是奇数字节,就在数据部分尾部加上一个全为0的字节(与伪首部一样,不会发送)。将这些16位字串按照二进制反码求出总和后再取反,将取反的结果放入检验和。到接收方,再计算看是否一样,来检查错误。

 

TCP协议

TCP协议是建立在不可靠的IP层之上的可靠的数据传输协议,主要解决传输的可靠、有序、无丢失、不重复的问题。TCP是比较复杂的协议,其只要特点有:

1、面向连接的传输层的协议。

2、每一条TCP连接只能有两个端点,点对点,一对一。

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

4、全双工通信。为此TCP两端都设置发送缓存和接收缓存。

5、TCP面向字节流,TCP把应用程序交付的数据看成仅仅一连串的无结构的字节流。

TCP报文段

TCP报文段分为TCP首部和TCP数据两部分。其首部长度20字节,后面是4N字节是可选项。TCP报文段既可以用来运载数据,也可以用来建立连接、释放连接、应答。

TCP报文段格式:

1、源端口和目的端口字段(各占2字段):端口号。

2、序号字段(4字节):TCP是面向字节流的(是按照一个个字节传送的),TCP连接中传送的数据流中的每一个字节都编上序号。序号字段中保存的是报文字段所发送数据的第一个字节的序号。

3、确认号字段ack(4字节):期望收到对方的下一个报文段的数据的第一个字节。确认号为N,说明确认号之前的字节都已经正确到达了。

4、数据偏移(即首部长度4位):表示TCP报文段的长度。

5、保留字段(6位),为今后使用。

6、紧急位URG 当UGR=1时,标明紧急指针字段有效,说明此报文段优先级比较高。和紧急指针配套使用,从第1字节到紧急指针指向的字节就是紧急数据。

7、确认位(ACK)确立号为1时,确认号才有效。TCP要求连接建立后确认位都置1.

8、推送位PSH 当PSH为1时的报文段,就尽快的交付接收应用进程。不再等缓存满了才向上交付。

9、复位位RST 当RST=1时表明TCP连接中出现严重错误,必须释放连接,需要重新建立连接。

10、同步位SYN SYN=1 ACK=0时表示这是一个连接请求报文。如果对方同意连接,则返回一个SYN=1 ACK=1 的连接接收报文。

11、终止位FIN  当FIN为1的时候,用来释放连接。

12、窗口字段(2字节)指出现在允许对方发送的数据量,单位为字节。因为缓存有限,所以用窗口值用来作出限制。(假如确认号为701,窗口字段为1000,则说明从701号开始算起,还可以接收1000字节)

13、检验和(占2字节)检验和字段检验的是首部和数据部分。与UDP一样要在TCP报文段前加上12字节的伪首部。

14、紧急指针字段(16位)指出本报文段中紧急数据共有多少字节(紧急数据放在报文段数据的最前面)

15、选项字段(长度可选) 其中规定了数据部分的最大长度

16、填充字段 为了使首部长度是4字节的整数倍。

 

TCP的连接管理

TCP的连接过程,所以依旧是连接建立、数据传送、连接释放。

TCP连接建立的过程中需要解决一些问题:

1、要使双方知道对方的存在

2、允许双方协商参数

3、能够对运输实体资源大小进行分配。

TCP连接的双方是套接字,即端对端的通信。

TCP连接基于客户/服务器方式,主动建立方叫做客户机,被动等待建立的叫做服务器。

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

三次握手建立连接

1、客户机向服务器发送请求连接。此报文不包含应用层数据,同步位SYN=1 随机使用一个起始序号seq=x

2、服务器收到请求报文后,同意就向客户机发回确认报文。SYN和ACK都置1的报文。确认号为x+1 并随机产生起始序号seq=y。同样也不包含应用层数据。服务器接收到此报文后会为TCP连接分配TCP缓存和变量。

3、客户机收到确认报文段后,还要向服务器给出确认。回执报文段ACK置1,序号为x+1,确认号字段ack=y+1,从这个报文段开始就可以携带数据了。不携带数据可以不消耗序号。客户机接收到此报文会让客户机分配缓存和变量。

这就是三次握手建立连接。简单讲就是一次请求,两次互相确认。这三个报文之间的起始序号和确认号段有一些联系,应该注意。

【PS】TCP连接易于受到SYN洪范攻击。

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

四次挥手过程

1、客户机向服务器发送连接释放报文段,停止数据发送,主动关闭TCP连接。此报文段FIN置为1,seq=u(u等于前面所有字节数加1,也就是最后一个字节序号加1).注意:TCP是全双工的,所以此时服务器依旧可以和客户通信。

2、服务器收到后,发出确认,确认号为ack=u+1.此报文段的序号是v,是前面已传送的数据的序号加1.发出这个确认后,客户机到服务器的连接就已经断了。TCP连接处于半关闭状态。

3、服务器发送完剩余数据后,就向客户机发送FIN=1的连接释放报文。ACK=1,序号随机生成seq=w,确认号ack=u+1 与第二次的确认号相同。

4、客户机收到报文后,需要再次发出确认。在确认报文段中,ACK=1,序号ack=u+1确认号ack=w+1,此时只要等到计时器设置的时间2MSL后,TCP真正关闭。

【简而言之】因为是全双工,一共有两条线。一个来回断一根。客户向服务器 服务器确认 断开一条。服务器向客户 客户确认 真正断开。

【分析】对于TCP的建立和释放,应该明白各个字段号是多少。接下来分析一波。

三次握手

特殊的字段:SYN同步字段 ACK确认位 seq序号字段(表示数据部分第一个字节的序号) ack确认字段(期望收到的下一个报文的数据的序号字段)

1、SYN=1,seq=x  (SYN=1 ACK=0 表示这是一个请求连接报文 seq=x是一个随机数)

2、SYN=1,ACK=1,seq=y,ack=x+1(SYN=1 ACK=1 表示这是一个确认报文 seq是随机置的 ack=x+1说明希望接收到请求连接报文后面的报文,即客户的确认)

3、ACK=1,seq=x+1,ack=y+1(这就是服务器的确认号期望的报文,所以seq=x+1,ack=y+1说明希望得到确认报文后面的报文)

四次挥手

1、FIN=1 seq=u(客户机发起,FIN=1说明要结束申请,seq是客户发出的最后一个字节的序号+1)

2、ACK=1,seq=v,ack=u+1(ACK=1说明是确认报文,seq是服务器此时发送过的最后一个字节+1,ack是结束申请的下一个数据)

3、FIN=1,ACK=1,seq=w,ack=u+1(FIN=1 ACK=1 服务器结束报文,seq是服务器发出的最后一个字节序号+1,确认号ack是结束申请的报文,与2相同)

4、ACK=1,seq=u+1,ack=w+1(seq是刚才服务器期待的,ack是对方的序号加1)

 

TCP的可靠传输

TCP的可靠性体现在接收方从缓存区中取出的数据与发送区的数据完全相同。其通过使用校验、序号、确认、重传这些机制来保证传输的数据是完全无错的。

1)序号

序号是以字节为单位的排序,序号可以保证数据有序。

2)确认

TCP中的确认号是下一个报文的数据第一个字节的序号。TCP保证确认号之前的数据是没错的。这样可以防止中间的数据没有接收到,方便重传。

3)重传

TCP对两种报文段进行重传,超时和冗余。

1、超时:TCP发送报文段后会有一个计时器,只要计时器到设置时间前没有收到确认,就进行超时重传。但是需要注意的点是,TCP在传输层下会有很多时延,所以计算时间没有下层那么精确。TCP中通过计算机加权平均往返时间得到一个等待的时间值。

2、冗余:接收方当发现期待的序号没有收到时,就向发送方发一个冗余ACK,每收到一个不是期待的序号,就发一个冗余ACK,当发送3个冗余ACK时,说明已经丢失,则可以通过快速重传丢失的报文。

 

TCP流量控制

TCP提供流量控制服务,本质就是让发送接收双方的速度匹配。TCP使用滑动窗口实现流量控制。TCP的流量控制过程中,有两个窗口,一个窗口就是首部字段的窗口字段的值,是根据接收方的接收缓存的大小,动态的调整接收窗口rwnd的大小。防止发送方发出的量溢出了接收方的缓存。另一个窗口就是拥塞窗口cwnd,是根据当前网络拥塞程度决定的,与网络的带宽和时延密切相关。前者是防止接收缓存溢出,后者是防止网络更加拥塞。发送窗口的大小取min(rwnd,cwnd)

【区别】传输层与数据链路层的流量控制区别在于,传输层是端到端的通信,数据链路层是两个相邻结点之间的流量控制。并且传输层的窗口大小可以动态的变化

 

TCP拥塞控制

拥塞控制就是防止过多的数据注入到网络导致网络拥塞。拥塞控制和流量控制比较相似,都是通过控制发送方的发送数据。

【拥塞控制和流量控制的区别】拥塞控制是全局性的过程,涉及所有主机,所有路由器,来控制网络的负载。流量控制是点对点的通信量的控制。

传输层的拥塞控制,因特网建议标准定义了四种算法:慢开始、拥塞避免、快重传、快恢复。

在TCP拥塞控制中,同样有和流量控制的两个窗口:接收窗口rwnd和拥塞窗口cwnd

发送方应该维护这两个窗口的大小。接收窗口根据接收缓存的大小来确定,拥塞窗口根据当前的网络状态自适应调整。发送窗口的大小取这两窗口值的最小值。

TCP通过慢开始、拥塞避免、快重传、快恢复四种方式来维护拥塞窗口值。

1、慢开始

当TCP刚刚连接好后,开始发送TCP报文时,首先令cwnd=1,即一个报文。如果顺利到达,收到确认后,令cwnd=2*cwnd,指数级增长。直到增长到一个规定的阈值ssthresh后停止慢开始,转而使用拥塞规避算法。

2、拥塞避免

发送端的拥塞窗口每经过一个往返时延就增加一个报文的大小,而不像慢开始那样指数级增长。线性的加法增大,就一直加,直到遇到超时,则令慢开始的门限值ssthresh=cwnd/2.即当前拥塞窗口大小的一半。cwnd归1。

3、网络拥塞的处理

无论何时出现超时,都要把慢开始的门限降低至当前拥塞窗口大小的一半。并且将拥塞窗口大小归1

4、快重传

快重传通过使用冗余ACK来提前检测到拥塞。当发送方连续收到3个重复的冗余ACK时,直接重传,而不用等待计时器。

5、快恢复

通过冗余ACK提前检测到拥塞,当发送方连续接收到三个冗余ACK时,就视作网络拥塞,但是与网络拥塞的处理中不同的是,减半门限值后,将cwnd置为门限值,而不是1,所以称为快恢复。

【简而言之】拥塞控制有两套系统,是同时运行的,当没有收到冗余ACK时,就按照慢开始和拥塞避免的方式增加,直到真的网络超时,就减半门限 窗口归1.如果收到冗余ACK,就使用快重传和快恢复。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值