考研复习Day 8 | 计网:运输层(上)
一运输层协议概述1.1 进程之间的通信核心概念层次通信类型说明网络层主机到主机提供主机之间的逻辑通信运输层进程到进程为应用进程提供端到端的逻辑通信通信的真正端点是主机中的进程而不是主机本身。应用进程之间的通信是端到端的通信。运输层的复用和分用复用发送方的不同进程通过不同的端口号使用同一个运输层协议发送数据分用接收方的运输层根据报文中的端口号把收到的数据分发给不同的进程类比就像一栋大楼主机里有多个房间进程邮递员网络层把包裹送到大楼楼内的工作人员运输层根据门牌号端口号把包裹送到具体房间。1.2 运输层的两个主要协议特性UDP用户数据报协议TCP传输控制协议连接无连接面向连接先建立后释放可靠性尽最大努力交付不可靠可靠传输无差错、不丢失、按序通信方式支持一对一、一对多、多对一、多对多点对点一对一交付方式面向报文面向字节流拥塞控制无拥塞控制有拥塞控制首部开销小8字节大20-60字节全双工—全双工通信UDP特点详解接收方收到UDP数据报后不需要发出确认无连接、尽最大努力交付、面向报文、无拥塞控制支持多种通信方式首部开销小TCP特点详解传送数据前要建立连接传送完成后要释放连接不提供广播或多播服务只支持点对点功能较多首部较长占用处理器资源总结UDP简单快速适合实时应用TCP复杂可靠适合文件传输等需要准确性的应用。我的联想UDP就像一个渣男直接向别人发出邀请无连接发出之后就不管了不可靠而且一次可以约一个或多个通信方式多样付出少首部开销小TCP更像一个控制欲很高而且需要预热的专一男人每次都需要先建立连接三次握手然后全双工通信点对点而且确保自己的消息要让对方收到且无错误差错检测流量控制拥塞控制最后断开连接时还要多次“挽留”四次挥手付出多首部开销大但靠谱可靠传输。1.3 运输层的端口端口的作用运输层使用16位2字节端口号来标志一个端口端口号用来标志本计算机应用层中的不同进程不同计算机间的端口没有关联端口号是本地概念重要这里的端口是软件端口作为进程间通信的地址使用不同于路由器上的硬件端口。端口号的分配类别范围说明熟知端口号0 ~ 1023分配给重要协议如HTTP(80)、HTTPS(443)、FTP(21)登记端口号1024 ~ 49151供普通服务器程序使用客户端端口号49152 ~ 65535客户进程临时使用通信结束后释放二用户数据报协议UDP2.1 UDP概述UDP的特点特点说明无连接发送数据前不需要建立连接尽最大努力交付不保证可靠交付面向报文应用层交下来的报文UDP直接加上首部就发送无拥塞控制网络拥塞不会降低发送速率支持多种通信方式一对一、一对多、多对一、多对多首部开销小仅8字节2.2 UDP的首部格式UDP首部结构共8字节字段长度说明源端口2字节发送方的端口号不需要时填0目的端口2字节接收方的端口号长度2字节UDP首部数据的长度最小8字节检验和2字节检验整个UDP报文的差错重要如果接收方发现报文中的目的端口号不对就丢弃报文并使用ICMP发送“端口不可达”差错报文给发送方。ICMP的应用tracert就是使用了UDP报文。关于套接字因为UDP是无连接的虽然用到端口号但不用套接字TCP必须在套接字之间建立连接UDP检验和的计算方法检验整个UDP报文首部数据计算方法对各个4字节段进行反码求和结果放入检验和字段接收方检验对数据报各个4字节段反码求和若每一位都是1则无错特点这种差错检验方法的检错能力不强但是处理速度快。这符合UDP“简单快速”的设计哲学。三传输控制协议TCP概述3.1 TCP最主要的特点特点说明面向连接使用TCP前要建立连接通信完后要释放连接点对点通信每条TCP连接只能有两个端点一对一可靠传输无差错、不丢失、无重复、按序到达全双工通信两端都设有发送缓存和接收缓存面向字节流把数据看成一串无结构的字节流关于发送/接收缓存的说明发送时应用程序把数据放到TCP的发送缓存中TCP在合适的时候把数据发送出去接收时TCP把收到的数据放入接收缓存应用程序在合适的时候读取关于面向字节流TCP把应用进程交下来的数据看成一串无结构的字节流TCP报文长度根据接收窗口和网络拥塞程度决定应用进程一次发送长数据 → TCP可能划分为多个短数据块发送应用进程一次发送一个字节 → TCP也可以等积累足够多后再发送类比TCP就像一个“智能水管”它会根据下游的接收能力和管道的拥堵程度自动调节水流的大小。3.2 TCP的连接套接字SocketIP地址 端口号 套接字套接字是TCP连接的端点重要套接字不是应用进程也不是端口套接字是应用进程通过网络通信的入口套接字格式IP地址:端口号如192.168.100.2:80结论每一条TCP连接唯一地被它两个端点的套接字所确定。即TCP连接 {socket1, socket2} {(IP1:port1), (IP2:port2)}四可靠传输的工作原理4.1 停止等待协议目的在不可靠的传输网络上实现可靠通信。基本原理每发送完一个分组就停止发送等待对方的确认收到确认后再发送下一个分组。分组需要进行编号。出现差错的情况情况发送方行为接收方行为数据丢失超时未收到确认 →重传—数据出错超时未收到确认 →重传丢弃出错报文不发确认确认丢失超时未收到确认 →重传收到重传分组 → 丢弃重复分组 → 重发确认确认迟到收到重复确认 →丢弃正常处理超时重传的关键点发送完分组后必须暂时保留副本收到确认后才能清除分组和确认分组都需要编号以明确是哪个分组超时计时器的重传时间要比平均往返时间RTT长一些问题停止等待协议的信道利用率很低因为发送方大部分时间在等待确认。提高信道利用率采用流水线传输即发送方可以连续发送多个分组不必每发一个都停下来等待确认。这需要用到连续ARQ协议和滑动窗口协议。4.2 连续ARQ协议目的提高信道利用率。核心机制机制说明发送窗口发送方维持一个发送窗口窗口内的分组可以连续发送不需要等待确认滑动窗口发送方每收到一个确认就根据确认号将发送窗口向前滑动一定距离累积确认接收方不必逐个确认只需对按序到达的最后一个分组发送确认重要连续ARQ协议是在滑动窗口上实现的。滑动窗口协议是TCP协议的精髓。累积确认的特点优点容易实现即使确认丢失也不必重传缺点不能向发送方反馈所有已收到的分组信息如果收到分组1、2、3、5只确认到3发送方不知道5是否收到可能需要重传5。五TCP报文段的首部格式5.1 概述TCP传输的数据单元是报文段一个TCP报文段 首部数据首部结构TCP首部前20字节是固定的后面有4N字节是按需增加的选项。5.2 首部各字段详解字段长度说明源端口2字节发送方的端口号目的端口2字节接收方的端口号序号4字节32位本报文段发送的数据第一个字节的序号。序号值不能超过2^32确认号4字节32位期望收到对方下一个报文段的第一个字节的序号。若确认号为N表明到N-1为止的数据都已正确收到数据偏移4位数据部分距报文起始点的偏移实际等于首部长度。首部长度在20~60字节之间保留6位保留为今后使用6个控制位6位见下表窗口2字节发送本报文段的一方的接收窗口指出从确认号算起允许对方发送的数据量字节检验和2字节检验整个数据报紧急指针2字节当URG1时有效指出紧急数据的字节数窗口为0时也可发送紧急数据选项可变≤40字节见下文5.3 6个控制位控制位名称说明URG紧急URG1时此报文段需要尽快传送优先级高ACK确认ACK1时确认号字段有效。连接建立后的所有报文段都必须令ACK1PSH推送PSH1时接收方收到报文后尽快交付应用进程而非等缓存满了再交付RST复位RST1时TCP连接中出现严重差错需要释放连接再重新建立SYN同步SYN1表示这是一个连接报文。ACK0是连接请求ACK1是连接接受FIN终止FIN1时表明发送方已发送完数据并要求释放连接5.4 常用选项选项说明最大报文段长度MSS每个TCP报文段中数据字段的最大长度不是整个TCP报文段。连接建立时双方确定默认536字节窗口扩大选项扩大窗口字段原16位最大64KB适用于高带宽、高延迟的网络如卫星网络时间戳选项包含时间戳值字段和时间戳回送回答字段用于计算RTT和防止序号绕回选择确认SACK允许接收方告知发送方哪些数据块缺失只重传缺失部分MSS说明MSS不是固定值连接双方可各自确定不同值两个传送方向可以有不同MSS。时间戳选项的两个作用计算往返时间RTT发送方把发送时间放入时间戳字段接收方在确认时复制该值发送方收到后可计算RTT防止序号绕回TCP序号只有32位可能出现相同序号的报文段时间戳可以区分六思考1. 端口号 ≈ 进程的“门牌号”网络层把数据送到主机运输层根据端口号送到具体进程。就像快递送到大楼楼内工作人员根据门牌号送到具体房间。2. UDP ≈ 寄明信片扔进邮筒就不管了不知道对方收没收到速度快但不保证。适合实时音视频、DNS查询。3. TCP ≈ 寄挂号信有回执、有编号、可以查询物流信息保证送到。适合文件下载、网页浏览。4. 滑动窗口 ≈ 流水线生产不用等上一个产品完成再开始下一个而是连续生产每完成一个就往后推一步。这是提高效率的通用思想。七今日小结今天学习了运输层的核心概念主题核心内容运输层概述进程通信、端口号、UDP/TCP对比UDP首部格式8字节、无连接、检验和TCP概述面向连接、可靠、面向字节流、套接字可靠传输原理停止等待、连续ARQ、滑动窗口TCP首部20字节固定 选项序号、确认号、控制位注以上内容参考计算机网络第8版谢希仁 编著。其中有一些个人理解仅供参考。如有错误希望各位大佬指正感谢八明日计划运输层下