精读 《计算机网络》之传输层

概要:

本文主要讲解了传输层当中比较重要的知识点 ,包括了传输层的任务,传输层中的两大协议等。  所有的知识点内容来源于本人对《计算机网络》和王道的计算机考研指导中的知识点整理。 如有不足请指出。

传输层

任务:

  1. 为应用进程间提供了逻辑通信(端到端的通信),逻辑通信的意思是:传输层之间的通信好像沿着水平方向传输数据。事实上没有一条水平的物理连接。传输层处于面向通信的最高层,用户功能的最低层。为上层应用屏蔽了底层网络核心细节
  2. 复用和分用。 复用指的是发送方不同的应用进程都可以使用同一个传输层协议传输数据。分用指的是传输层在剥去报文首部后能够把这些数据正确的交付到目的应用进程。
  3. 对报文进行差错检测(首部和数据部分)。 而网络层只检查IP数据报的首部,不校验数据部分是否出错。
  4. 提供两种不同的传输协议,upd和tcp,网络层无法同时实现这两种协议。

寻址和端口:

端口:

端口是传输层服务访问点(TSAP)。应用层数据通过端口向下交付数据给传输层, 传输层通过端口向上传输数据给应用。

硬件端口:不同硬件设备进行交互的接口。软件端口:应用层的各种协议进程与传输实体进行层间交互的一种地址。 传输层使用的是软件端口 。

端口号

应用进程通过端口号进行标识.端口号分为两类: 1、服务器端的端口号, 包括熟知端口号(0~1023)。登记端口号(1024~49151)。

2、客户端使用的端口号,(49152~65535) 仅在客户进程运行时进行动态的选择。

套接字:

在网络中采用发送方和接收方的套接字来识别端点。

Socket = (IP地址:端口号)

UDP协议:

概述:

仅在IP提供的数据报服务上增加了两个服务: 复用和分用以及差错检测。

UDP不保证可靠交付,但不意味着应用程序对数据的要求是不可靠的。可靠性的维护由应用层来完成, 应用开发者可以根据应用的需求来灵活设计自己的可靠性机制。UDP是面向报文的,报文是UDP数据报处理的最小单位。UDP对发送下来的报文不会进行处理,既不拆分,也不合并。而是保留这些报文的边界,只加上了UDP首部。之后直接交付给IP。 如果报文太长,则IP会对其进行分片,如果报文太短,UDP的头部就会相对太长,两者都会占用IP层的效率

优点:

  1. 无需建立连接
  2. 无连接状态
  3. 分组首部开销小,UDP首部只有8B
  4. 能够更好的控制发送的数据和时间,实时性好
  5. 支持一对一,一对多,多对一,多对多的交互通信

UDP首部格式

UDP首部只有8B,由4个字段组成。 每个字段的长度都是2B。

  1. 源端口,需要对方回信的时候选用,不用时全为0
  2. 目的端口
  3. 报文长度,包括首部长度和数据的长度。最小值是8(只有首部的时候)
  4. 校验和, 检测UDP数据报在传输过程中是否有误,有错就丢弃。 该字段可选, 不使用的时候该字段全部为0

UDP校验

在计算校验和的时候在UDP首部前面加上长度为12B的伪首部,伪首部只在校验的时候使用,不参与传输。

伪首部的结构为,4B的字段存放源IP地址,4B的字段存放目的IP地址,1B字段存放0,1B的字段存放17(值),2B的字段存放UDP长度。

校验步骤:

  1. 先把检验位全部设置成0,如果此时UDP的数据部分的长度不为偶数个字节的时候则在数据末尾补0(补0的部分校验完以后丢弃,不参与传输),直到数据部分的长度为偶数个。
  2. 以2B为单位,进行分割。
  3. 把分割后的字节进行二进制反码运算求和,再将得出的结果求反码。
  4. 把结果写入校验位
  5. 接收方校验,按照1-3步的方法进行运算,(此时第一步的校验位不必设置为0),如果结果是全为1 则无差错,否则就是出错,则丢弃。

TCP协议:

特点:

  1. 面向连接,TCP连接是一条逻辑连接
  2. 每条tcp连接只能是点到点(一对一)
  3. 提供可靠交付服务,保证数据无差错、不丢失、不重复且有序,
  4. 提供全双工通信。双方可以在任何时候发送数据,因此双方都有一个缓存区。 接收方缓冲区: 存放按序到达但未被读取的数据和不按序达到的数据。 发送方缓冲区:存放发送但未收到确认的数据和准备发送的数据。
  5. 面向字节流,tcp把应用层交下来的数据视为一串串无结构的字节流。
  6. tcp报文的长度由接收方的窗口值和当前网络的拥塞值来决定的。

TCP首部格式:

tcp首部前20B是固定的。tcp首部最短为20B,后面4N字节是根据需要增加的选项,长度为4B的整数倍。

  1. 源端口和目的端口。各占2B。
  2. 序号,占4B,tcp是面向字节流的,tcp传输的字节流中的每个字节都要按顺序编号,序号字段的值指的是本报文所发送的数据的第一个字节序号
  3. 确认号 占4B,期望收到对方下一个报文段的第一个字节的序号
  4. 数据偏移(即首部的长度),占4位,指出数据的起始处位置。 数据偏移的单位是4B,4位最大能表示15,所以tcp首部的最大长度为60B(4B*15)
  5. 保留 ,6位
  6. 紧急位
  7. 确认位
  8. 推送位
  9. 复位位
  10. 同步位
  11. 终止位
  12. 窗口 占2B ,指出允许对方发送的数据量。
  13. 校验和 ,占2B ,校验方法和UDP的校验方法一样,也有伪首部,只是把伪首部的17换成6,udp长度换成tcp长度。
  14. 紧急指针, 占2B
  15. 选项。长度可变,tcp最初只规定了一种选项,即最大报文长度选项MSS。MSS是tcp报文段的数据字段的最大长度
  16. 填充。为了使tcp头部的长度为4B的整数倍

tcp传输控制:

tcp建立连接:三次握手,(采用三次握手是为了防止历史连接的建立)

第一步,客户端发送SYN=1,同时选择一个初始序号,seq =x , SYN报文段不能携带数据,但是要消耗掉一个序号, tcp客户端进入SYN-SENT同步已发送状态

第二步,服务器收到SYN后,设置报文SYN和ACK为1,同时设置序列号为y,ack=x+1 并且设置接收缓存区, 确认报文段不能携带数据,但是要消耗掉一个序号,tcp服务器进入SYN-RCVD 同步收到状态

第三步,客户端发送ACK=1 seq=x+1,ack=y+1,给服务器发送确认,同时建立发送缓冲区 可以携带数据, 进入ESTABLISHED 以建立连接状态

tcp连接释放:

四次握手,

第一步,客户端主动发起连接释放请求,FIN=1,seq=u, u为前面以及传输过的数据的最后一个字节加一。此时tcp客户端进入等待状态1(FIN-WAIT-1) 断开tcp的发送端,即客户端不能向服务器发送请求了,但是还是可以接收数据

第二步,服务器接收到请求,设置ACK=1,seq=v,等于前面以及传输过的数据的最后一个字节加一。 ack=u+1,进入COLSE-WAIT 关闭等待状态。

第三步,如果服务器发送完数据后,向客户端发送FIN=1,seq=w序号, (后面可能发送的一些数据),发送上次发送的确认号 ack=u+1. 进入最后确认状态 LAST-ACK (最后确认状态)

第四步,客户端发送确认 ACK=1,ack=w+1 seq=u+1. 此时连接还未释放,必须等到计数器设置的时间2MSL(最长报文段寿命)后,客户端才进入CLOSE状态

tcp可靠传输

  1. 序号,序号字段的值是指本报文段所发送的数据的第一个字节序号
  2. 确认,tcp默认采用累计确认, 即只确认数据流中第一个丢失字节为止的字节,即确认号前面的字节都是接收到的, 没确认的字节以后都认为是没接收到的,即使可能后面的字节已经接收到,只是中间字节没接收到,也会认为后面字节未接收到。
  3. 重传 两种事件会导致tcp报文段进行重传,超时和冗余ACK

(1) 超时, tcp每发送一个报文段,就对该报文段设置一个定时器,当定时器到时间后,未收到该报文段的确认号,则进行重传。 定时器的时间是依据RTT(报文往返时间)时间动态确定的,tcp会保存一个RTT的一个加权平均往返时间RTTs , 超时重传时间(RTO)会略大于RTTs。

(2) 冗余ACK,当接收方发现收到的报文序列号大于当前要收到的序列号的时候,就会认为中间发生了丢失,所以就对接收方连续发送三个ACK确认,并且指明要收的序列号 ,此时发送方就会知道发送出错了,进行重传,不必等到超时才进行重传。

tcp流量控制和拥塞控制:

发送窗口的大小=min{接收窗口,拥塞窗口}

流量控制:基于滑动窗口协议来进行流量控制,解决发送方和接收方速度匹配的问题, 接收方通过自己的接收窗口rwnd大小来动态的控制发送方发送窗口的大小。

拥塞控制:防止过多的数据注入网络。 算法:慢开始,拥塞避免,快重传,快恢复。

慢开始:拥塞窗口rwnd从1,(即一个MSS大小)开始变化,第二次变成2,以2的指数次(从0开始)进行增大,

拥塞避免: 加法增大,乘法减小。 当rwnd超过阈值(sshresh)的时候,rwnd进行线性增大,即每次加一, 当发送超时的时候,进行乘法减小,即sshresh等于发送超时时rwnd大小的一半,并且设置rwnd为1 从1开始又进行慢开始。

快重传:即接收方连续发送三个重复的ACK报文,让发送方进行重传。

快恢复:即当拥塞发生后,乘法减小后,不用把rwnd设置为1,而是直接设置为阈值,并且直接使用加法增大。

以上四种算法都是同时存在的。

四种算法使用总结: 当tcp建立连接和网络出现超时的时候,使用慢开始和拥塞避免, 当发送方接收到冗余ACK时,采用快重传和快恢复

拥塞控制和流量控制的区别: 拥塞控制是全局性的过程,涉及所有的主机、路由器,以及降低网络传输性能有关的所有因素。 流量控制是点对点的通信量的控制,是端到端的问题,只是要抑制发送端的发送速率。

共同点: 通过控制发送端的发送速率来达到控制效果。

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值