计算机网络--传输层知识点梳理
作者:互联网
作者:多巴胺dopamine
博客地址:https://www.cnblogs.com/yourdopamine/
适合已经学过,用来梳理知识点
Transport Layer
概念
1、传输层是对网络层功能的扩充
2、segment
3进行 logical communication(process=process)
4、传输层协议仅在终端执行而不在路由器上执行
5、IP->best-effort delivery service
Multiplexing/Demultiplexing
多路复用
-
定义
- 从不同套接字收据数据块,为每个数据块添加Header,传给网络层
多路分解
-
定义
- 将传输层的报文交到正确的socket中
端口(port)
- 1、一个终端上的端口与一个socket是1对1的关系
- 2、well-know-port number:0~1023
socket的确定
-
UDP
- 目的IP和目的port
-
TCP
- 目的IP、目的port、源IP、源port
UDP
提供的服务
- 1、多路复用、多路解用
- 2、少量差错检验
-
checksum(校验和)实现
- 16bits为单位
- 加和->【有进位再加一个1】->最后取反
- 接收方以16bits单位将所有的数据加起来,最后与checksum相加,结果为0(可能没错),不为0(出错)
-
提供差错检测的原因
- 1、
- 2、
-
端到端原则
-
优点
- 1、把更加精心的操作留给应用层-应用层更加自由
- 2、无连接、块
- 3、无状态
- 4、手部开销小
UDP Segment Structure
- Source port Dest.port
- Length Checksum
- 应用层数据
应用层做一些操作可以在UDP上实现可靠传输
TCP
面向连接
-
连接两端的终端保存state,而不是建立一条电路或者让中间的交换机保存状态
-
MSS(maximum segment size)
- 不包括TCP的头部
-
MTU
TCP Segment Structure
-
source port Dest port
- 用于实现多路复用和多路分解
-
Sequence number
- TCP的序号是字节流设置的、采用累计确认
-
Acknowledgment number
- 期望收到的下一个报文的序号
-
Header length、URG、ACK、PSH、RST、SYN、FIN、Receive window
- Receive window实现流量控制
-
OPTIONS
-
DATA
提供的服务
-
可靠数据传输
-
采用累计确认、但是重传类似SR,仅重传导致超时的那个报文
-
超时处理
- 超时时间发生 timer设置时间翻倍,而不是使用 TimeoutInterval
- 收到上层数据且重新启动timer时/收到正确ACK重新计时,timer设置都为TimeoutInterval
-
快速重传
- 收到duplicate ACK(三个)
-
-
流量控制
-
变量
-
receive windows(rwnd)
- 该变量属于发送方、表示接收方有多少剩余空间
- rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)
-
RcvBuffer
-
LastByteRcvd
-
LastByteRead
-
-
-
拥塞控制
-
拥塞发生的原因和代价
-
TCP的拥塞控制
-
如何控制发送速度
- rate = cwnd / RTT
-
如何感知拥塞
- 通过超时时间最为信号。超时可能拥塞
-
控制发送速度的算法
-
Slow start
- ssthresh、慢启动的阀门、一个变量
-
Congestion Avoidance
- 当cwnd>=ssthresh进入该阶段
-
发生超时的时候
- ssthresh = cwnd /2 ; cwnd = 1
-
冗余ACK、快速重传
-
-
使用的变量
-
congestion window(cwnd)
- 确保LastByteSent - LastByteACKed <= min(cwnd , rwnd)
-
-
-
超时时间设置(TimeoutInterval)
-
SampleRTT
- 样本RTT、实际值
-
RTT
- 一个请求来回的时间
-
EstimatedRTT
- 估计值、一个加权平均
- EstimatedRTT = (1-a)* EstimatedRTT + a * SampleRTT(最近测量)a=0.125
-
DevRTT
- 实际值 与 估计值的差异
- DevRTT = (1-B)* DevRTT + B* | SampleRTT - EstimatedRTT | B=0.25
-
TimeoutInterval
- TimeoutInterval = EstimatedRTT +4 * DevRTT
full-deplex service
- 在一个连接中,接收方和发送发可以同时发送消息
连接管理
-
建立连接
- 客户端初始化序号-> 发送SYN=1
- 服务端初始化空间 -> SYN=1 ,ack序号 = client_isN+1 ; 序号= server_isn(随机的)
- 客户端初始化变量和空间 ; SYN=0 ; ACK序号为 Server_isn+1 ; 之后SYN始终等于0
-
结束连接
- 任意一方都可以提出来
- FIN *2 ACK *2
可靠传输原理
可靠的数据传输协议
-
定义
- 无bit错误、不丢包、有顺序
-
如何建立(都是停等协议)
-
rdt 1.0
-
无错误、不丢包
-
发送方
- 发送
-
接收方
- 接收
-
-
rdt 2.0
-
有错误、不丢包
-
ACK、NAK
-
发送方
- 发送
- 等待确认
-
接收方
- 接收返回确认
-
-
rdt 2.1
-
有错误、不丢包、返回的确认消息出错
-
解决办法
- 加入sequence number(0/1)
-
发送方
- 发送0
- 等待0
- 发送1
- 等待1
- NAK或者确认消息有错误,重发
-
接收方
- 接收0
- 接收1
-
-
rdt 2.2
- 在rdt2.1基础上,去掉NAK,当消息错误是,发送上一个报文的序号(通过冗余的ACK来来代替NAK)
-
rdt 3.0
- 无错误、丢包
- 计时器 countdown timer
- 收到冗余ACK,只需要等待超时重传即可
-
-
实现流水线的可靠传输(pipelined Reable Data Transfer Protocol)
-
GBN(Go-Back-N)
-
sliding-windows protocol
-
基序号base
- 最远的已发送还未确认的
-
下一个序号 nextsequm
- 下一个将要发送的
-
windosw size:N
-
cumulative acknowledgment
- 好处:接收方的缓存简单
-
使用的东西
- 序号、累计确认、差错检验、超时&重传
-
-
SR(Selective Repeat)
-
可能存在的问题
- 序号为又一轮使用是无法确定该报文是上一轮重传的还是这一轮新的
- TCP的解决办法:在一轮使用该序号、会先确定网络上已经不存在改序号的报文->等待个3分钟
-
每个发送的报文都有一个计时器
-
接收方有一个windows
-
-
标签:知识点,重传,--,ACK,发送,序号,传输层,超时,port 来源: https://www.cnblogs.com/yourdopamine/p/16196050.html