【北航计算机网络课程笔记】5. 传输层

基本定义

传输层:
实现可靠传输: 差错控制, 顺序控制, 拥塞控制
网络层实现主机之间的通信, 传输层实现应用程序之间的通信, 自下而上第一个提供端(应用程序)到端服务的层次

TCP协议(可靠传输协议, 面向连接的服务, 安全), UDP协议(不可靠传输协议, 无需建立连接, 面向报文, 效率高, 但不安全)
数据传输单位: TPDU / TCP报文段 / UDP用户数据报
为多个应用进程提高服务–>复用与分用
区分应用进程: 端口, 不用进程ID(依赖于特定操作系统, 需要与多个主机通信)
TCP/IP协议使用16位整数作为端口号
熟知端口号/系统端口号: 0-1023, HTTP服务, FTP服务等
登记端口号: 1024-49151, 须在IANA登记以防重复
客户端口号/短暂端口号: 49152-65535
cmd中命令netstat查询端口号

UDP与TCP

UDP协议:
12字节伪首部(计算校验和使用, 不传输) + 8字节头部(源端口+目的端口+长度+校验和) + 数据
IP报头protocol字段=17
Inter和网络中通常采用大端, arm中采用小端, 所以使用转换字节序的宏: htonl()即host to network long, htons(), ntohl(), htons()
校验和计算: 添加伪头部, 奇数字节需补充0字节.
若接收方的目的端口上没有应用接收数据, 则返回ICMP的"目的不可达"报文

TCP协议:
面向连接, 点对点, 可靠服务, 全双工通信, 面向字节流(数据块不一定一一对应)
IP报头protocol字段=6
根据对方给出的窗口值和当前网络拥塞程度决定一个报文段包含多少个字节.(UDP报文长度是应用进程给出的)
可能将长数据块分成几个报文发送, 或者短的合在一起发送.
连接端点是套接字(socket=<IP:>)(socket=<IP地址: 端口号>)或插口,
20字节固定头部+选填部分(这部分要是4字节的倍数)+数据
源端口, 目的端口
序号: 数据流中每一个字节有序号,本报文数据中第一个字节的序号
确认号: 期望收到对方的下一个报文数据中第一个字节的序号(接收方发出的报文中, 全双工通信一起发)
数据偏移, 保留字段, URG(紧急数据, 加快发送), ACK, PSH(不同等缓存填满就发送), RST(1=严重错误, 释放连接后重新建立连接), STN(1=连接请求), FIN(1=释放连接), 窗口大小
检验和(伪首部(和UDP一样)+首部+数据), 紧急指针(紧急数据的字节数, 都放在最前面)
以字节为单位的滑动窗口: 根据"窗口大小"确定大小, 根据"确认号"向前滑动窗口, 窗口大小变化时不向后收缩(可以向前收缩), 可用窗口(允许发送但尚未发送的字节数), 发送缓存和接受缓存
发送窗口大小小于等于接受窗口大小
可靠性: 校验和+超时重传(自适应算法计算超时重传时间RTO=RTTS(RTT)+4RTTD(RTT)RTO=RTT_S(RTT的加权平均值) + 4 * RTT_D(RTT偏差的加权平均值)

TCP流量控制、拥塞控制

TCP协议
流量控制: 利用滑动窗口和持续计时器实现三种方式: 定量发送(最大报文长度MMS), 应用进程控制(需要push), 定时发送(长度达到MMS也要发送)
网络拥塞: 需求>可用资源, 由多种原因引起, 简单增加某种资源不能消除, TCP重传机制会加剧恶化
拥塞控制是全局性过程, 流量控制是点对点控制
只要没收到确认(超时), 认为拥塞.
拥塞控制: 开环控制(网络设计), 闭环控制(基于反馈环路): 四种方式
慢启动: 试探性地从小到大逐渐增大发送窗口, 发送方维持拥塞窗口cwnd, 是一个状态变量(当前窗口大小=cwnd*MMS), 传输轮次=RRT+确认收到, 收到一个确认cwnd+1(即一个传输轮次cwnd加倍). 有一个限制慢启动门限ssthresh.
拥塞避免: cwnd>=ssthresh时, 一个传输轮次cwnd+1, 发生拥塞时, ssthresh改为发送窗口值的一半, cwnd重新设为1
快重传: 接收方收到一个失序的报文段, 发出重复确认(最新的ACK), 发送方收到三个重复确认就立即重传
快恢复: 发送方收到三个重复确认时, ssthresh改为发送窗口值的一半, cwnd重新设为ssthresh, 开始拥塞避免(一个传输轮次cwnd+1)
综合流量控制和拥塞控制, 发送窗口=min(cwnd, 接收窗口)

TCP连接管理

TCP连接管理:
客户(主动发起连接建立的应用进程)/服务器(被动)方式

连接建立
客户端发起
三次握手(A->B:SYN=1; B->A:SYN=1,ACK=1; A->B:ACK=1), 三次可以防止失效的连接请求占用服务器端资源
三次握手导致TCP SYN Flooding攻击: 发送大量第一个报文却不响应, 使服务器内部数据结构满,不能正常应答TCP连接请求.
linux内核应对, SYN_Cookies机制: 收到第一个报文不分配资源

连接释放
任一方发起
两个来回, 发起方申请释放+收到回复–>中断单方向连接, 接受方发送完所有数据, 确认释放+收到回复–>中断双方向连接, 接收方立即关闭进程, 发起方收到确认释放后等待2MSL关闭进程(防止有数据滞留)
MSL报文段最大存活时间, 建议2分钟

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章