计算机基础|计算机网络之运输层

汇总:Android小白成长之路_知识体系汇总【持续更新中…】

目录

  • 运输层概述
  • 用户数据报协议UDP
  • 传输控制协议TCP
  • 可靠传输原理
    • 停止等待协议
    • 连续ARQ协议
  • TCP报文段的首部格式
  • TCP的运输连接管理

运输层概述
  • 运输层向上面的应用层提供通信服务,从运输层的角度看,通信的端点是进程而不是主机
  • 运输层的两个主要协议:
    • TCP:传输控制协议,提供可靠的、面向连接的运输服务
    • UDP:用户数据报协议,提供高效的、无连接的运输服务
  • 进程在运输层通过复用传送到网络层,网络层通过分用发送给各个应用进程
  • 软件端口:应用层的各种协议进程与运输实体进行层间交互的一种地址
  • 端口号:TCP/IP的运输层用一个16位端口号来标识一个端口,端口号只有本地意义。是为了标志本计算机应用层中的各个进程和运输层交互时的层间接口
  • 服务端使用的端口号:
    • 【计算机基础|计算机网络之运输层】熟知端口号(系统端口号):数值为0~1023,一般用于TCP/IP最重要的一些应用程序,让所有用户都知道,常见的有以下这些
      应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS
      熟知端口号 21 23 25 53 69 80 161 162 443
    • 登记端口号:数值为1024~49151,为没有熟知端口号的应用程序使用,这类端口号必须在IANA按照规定的手续登记,以防重复
  • 客户端使用的端口号:数值为49152~65535,由于这类端口号仅在客户端进程运行时才动态选择,因此又叫做短暂端口号
用户数据报协议UDP
  • UDP只在IP的数据报服务上增加了很少的功能,例如复用、分用功能和差错检测功能
  • UDP的主要特点:
    • 无连接:发送数据前不需要建立连接,因此减少了开销和发送数据之间的时延
    • 使用尽最大努力交付:不保证可靠交付,因此主机不需要维持复杂的连接状态表
    • 面向报文:UDP对应用层交下来的报文,不合并也不拆分,而是保留报文的边界,添加首部后就交付给IP层。UDP一次交付一个完整的报文,因此应用程序应该选择合适长度的报文,使得IP层的效率达到最佳
    • 没有拥塞控制:因此网络出现拥塞也不会使源主机的发送速率降低,但会造成数据丢失
    • 支持一对一、一对多、多对一和多对多的交互通信
    • UDP的首部开销小
  • UDP的首部格式:UDP的首部字段很简单,只有8个字节,由四个字段组成
    计算机基础|计算机网络之运输层
    文章图片

    • 源端口:源端口号,需要对方回复时选用,不需要时可全0
    • 目的端口:目的端口号,在终点交付报文时必须使用
    • 长度:UDP用户数据报的长度,最小值为8,即只有首部
    • 检验和:检测UDP用户数据报在传输中是否有错,错则丢弃
    • 伪首部:用于计算校验和,并不是真正的首部
传输控制协议TCP
  • TCP的主要特点:
    • 面向连接:使用TCP协议之前必须先建立连接,并且在使用结束后需要释放已建立的连接
    • 点对点:每一条TCP连接只能有两个端点,也就是只能一对一通信
    • 提供可靠交付服务:通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到底
    • 全双工通信:TCP允许通信双方在任何时候都能互相发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据
    • 面向字节流:TCP中的流指的是流入到进程或从进程流出的字节序列计算机基础|计算机网络之运输层
      文章图片
  • 套接字:每一条TCP连接都有两个端点,这两个端点就叫做套接字
    套 接 字 s o c k e t = ( I P 地 址 : 端 口 号 ) 套接字socket = (IP地址:端口号) 套接字socket=(IP地址:端口号)
可靠传输原理 停止等待协议 计算机基础|计算机网络之运输层
文章图片

  • 停止等待:每发送完一个分组就停止发送,等待对方的确认,收到确认后再发送下一个分组
  • 超时重传:在传输过程中出现差错,B丢弃了报文,A在一段时间内没收到确认,就重传前面的分组
    • A在发送完一个分组后,必须暂时保留已发送的分组的副本,收到确认后才清除该副本
    • 分组和确认分组必须进行编号,以便于分组的收到确认
    • 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些
  • 确认丢失:假设B发送的确认丢失了,A没收到确认,重传了分组,B再次收到该分组,这时应采取两个行动计算机基础|计算机网络之运输层
    文章图片

    • 丢弃这个重复的分组
    • 向A发送确认,告知已收到分组
  • 确认迟到:传输过程没差错,但B对分组的确认迟到了,A重传了分组后收到确认,然后再次收到确认,A收到后丢弃第二次确认,B收到重复的分组也丢弃,并重传确认分组
  • 上述可靠传输协议常称为自动重传请求ARQ
连续ARQ协议 计算机基础|计算机网络之运输层
文章图片

  • 发送窗口:位于发送窗口内的分组可以连续发送出去,不需要等待对方确认,这样就可以提高信道利用率,分组发送是按照分组序号从小到大发送的
  • 连续ARQ协议:发送方没收到一个确认,就把发送窗口向前滑动一个分组的位置,接收方一般是累积确认的,不会对每一个收到的分组逐个确认,而是收到多个分组后,对最后一个分组发送确认,表示逐个分组为止的所有分组都已经正确收到
  • Go-back-N:如果发送了前5个分组,而后面3个分组丢失了,接收方只能对前2个分组发出确认,发送方无法知道后三个分组的下落,只能把后三个分组重传一次,这就叫回退N,表示需要再退回来重传已发送的N个分组
TCP报文段的首部格式 计算机基础|计算机网络之运输层
文章图片

  • 源端口和目的端口:分别写入源端口号和目的端口号,用来实现分用功能
  • 序号:TCP面向字节流,每一个字节都按顺序编号,超过最大序号时从0开始重新编号,序号字段的值指的是本报文段所发送的数据的第一个字节的序号,例如本次序号是101,而携带的数据共有100字节,那么下一个报文段的序号就从201开始
  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号,也就是上面举例子中下一个报文段的序号
  • 数据偏移:指出TCP报文段的数据起始处举例TCP报文段的起始处有多远,实际上就是首部长度
  • 保留:保留为今后使用,目前应置为0
  • 紧急URG:当值为1时,表明紧急指针有效,告诉系统该报文段有紧急数据,应尽快传送,相当于高优先级数据,不按照原来的排队顺序来传送,例如发送终端命令,需要尽快结束
  • 确认ACK:TCP规定,在建立连接后所有传送的报文段都必须把ACK置为1
  • 推送PSH:接收方收到PSH=1的报文段,不再等到缓存填满后再向上交付,而是尽快地将数据交付到应用进程
  • 复位RST:当RST=1时,表明TCP连接中出现严重差错,如主机崩溃或其他原因,必须释放连接,然后再重新建立运输连接
  • 同步SYN:用来同步序号,当SYN=1ACK=0时,表明这是一个连接请求报文段,对方若同意连接,则应在响应的报文段中使用SYN=1ACK=1,因此SYN置1表示这是一个连接请求或连接接受报文
  • 终止FIN:用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已全部发送完毕,并要求释放运输连接
  • 窗口:指发送本报文段的一方的接收窗口值,而不是发送窗口,窗口值告诉对方,从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量,之所以有这个限制,是因为接收方的数据缓存空间有限。窗口值作为接收方让发送方设置其发送窗口的依据
  • 检验和:检验和字段检验的范围包括首部和数据这两部分。和UDP一样,也要加上伪首部
  • 紧急指针:仅在URG=1时才有意义,指出本报文段中的紧急数据的字节数,紧急数据之后是普通数据
  • 选项:长度可变,例如最大报文长度MSS(数据段的最大长度)、窗口扩大选项、时间戳选项、选择确认选项等
TCP的运输连接管理
  • TCP的连接三个阶段:连接建立、数据传送和连接释放
  • 连接建立:三次握手过程,A需要知道B正常收发数据,B也需要知道A正常收发数据,所以需要三次握手
    计算机基础|计算机网络之运输层
    文章图片

    • A向B发送连接请求报文段,此时SYN=1,并且选择一个初始序号seq=x
    • B收到连接请求报文段后,向A发送确认,此时SYN=1,并且ACK=1,自己选择一个初始序号为y,确认号为x+1
    • A收到B的确认后,也向B发送确认,此时ACK=1,初始序号为x+1,确认号为y+1,至此,连接建立
  • 连接释放:四次挥手,双方都需要知道对方已经发送完数据了才结束连接,因此需要互相确认结束
    计算机基础|计算机网络之运输层
    文章图片

    • A发送终止控制,此时FIN=1,序号为前面已发送的数据最后一个字节的序号加1,假设为u,A等待B确认
    • B收到释放报文段后发出确认,确认号为u+1,序号为自己前面已发送的数据最后一个字节的序号加1,假设为v,B开始进入等待,此时A到B这个方向的连接已释放,TCP处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。A收到B的确认后,开始等待B发出连接释放报文段
    • 若B没有数据需要发送给A了,B发出FIN=1的报文段,假设B目前序号为w,B还必须重复上次已发送过的确认号ack=u+1,这时B开始等待A的确认
      即A已经没有数据要发送了,但B若发送数据,A仍要接收。A收到B的确认后,开始等待B发出连接释放报文段
    • 若B没有数据需要发送给A了,B发出FIN=1的报文段,假设B目前序号为w,B还必须重复上次已发送过的确认号ack=u+1,这时B开始等待A的确认
    • A收到B的连接释放报文段后,对B发出确认,把ACK置1确认号ack=w+1,而自己的序号是seq=u+1,然后进入到时间等待状态,等待最后的释放,B收到确认后也开始等待最后的释放,这个释放时间通过时间等待计时器来设置

    推荐阅读