计算机网络 - 运输层
来源:互联网 发布:网络mc第一红人大赛 编辑:程序博客网 时间:2024/05/22 00:16
运输层
运输层是为应用层提供服务的,也就是为主机的应用进程提供服务的。端到端的通信,网络中的路由器并没有运输层。其需要两个重要的协议:面向连接的TCP和无连接的UDP。
端口
端口是应用层的各种协议进程与运输实体进行层间交互的一种地址,在下文提及的UDP和TCP的首部都有源端口和目的端口,TCP/IP的运输层使用16位的端口号来标志端口。端口号分为了两类:
1. 服务端使用的端口号:又分为两类:
1. 熟知端口号: 0 ~ 1023
2. 登记端口号:1024 ~ 49151 这类端口号必须在IANA登记唯一性。
2. 客户端使用的端口号:49152 ~ 65535 主机进程运行时动态选择的,也叫短暂端口号。进程销毁即回收。
如:
UDP
用户数据报协议UDP是无连接,尽最大努力交付的。UDP面向报文,UDP对应用层下发的报文加入首部后就下发给网络层IP,不拆分,即一次交付一个完整报文,与TCP有很大不同。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送效率降低,即它不管网络卡不卡都按一定速率发。如 IP电话,实时视频会议。
UDP首部:
1. 源端口 :如果需要对方回信时选用,不需要时可用全0 。
2. 目的端口: 目的端口号
3. 长度:UDP数据报的长度
4. 检验和:检测UDP用户数据报在传输时是否有错,有错就丢弃。与IP协议不同,UDP校验和把首部、伪首部和数据一起都校验(TCP相同)。而IP协议仅校验首部。
5. 伪首部:既不向上递交也不下发,仅仅是用来计算校验和的。这样的检验和,既检测UDP整个数据报,也校验了IP数据报的源IP地址和目的IP地址。
TCP
传输控制协议TCP就复杂多了,TCP是面向连接、点对点、提供可靠交互、全双工通信协议。
序号:即编号,TCP传输的字节都是按顺序编号的。
确认号:期望收到的下一报文段的编号,同时表明该编号之前的报文也收到。
数据偏移:TCP报文起始处与TCP数据的距离,即TCP首部长度
保留:保留以后使用。
URG:紧急URG=1,表示该报文有紧急数据。高优先级
ACK:ACK=1 确认号才有意义,ACK=0 确认号无效
PSH:push=1 接收方接收到应立即回应,不能等缓存满才提交
RST: RST=1 表明TCP连接出错,释放连接
SYN: synchronization =1 表示这是一个请求连接或连接接受报文
FIN: FIN=1 数据发送完毕,释放连接
窗口: 告诉对方 从报文首部确认号开始,接收方目前允许对方发送的数据量
检验和:与UDP相同把首部、伪首部和数据进行校验和
紧急指针: URG = 1才有意义,表示紧急数据的字节数,紧急数据后面是普通数据
选项: 长度可变,最大报文段长度(MSS)、窗口扩大、时间戳、选择确认(SACK)
面向字节流:如下图,有个缓存,不是上层发什么他就立即发,他可能等凑够了最大长度或到了固定时间频率才发出,收到则对不按序到达的数据先放在接受窗口,等字节流中缺失的字节收到后,再交付上层。
面向字节流:
点对点:TCP连接的两端叫套接字或接口。
如图:
提供可靠交互:如下图为自动重传请求ARQ,TCP规定接受方收到报文要发送ACK确认报文,通常发送方会收到所以确定报文,如果发送方不断重传但老收不到确认信息,那它就认为网络太差,不能进行通信。根据确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
流量控制: 让发送方发送速率慢点,接收方来的急接收。TCP的窗口单位是字节,不是报文段。如下图,ACK表示首部确认位,ack表示确认字段的值。只有ACK=1,ack才有意义。连续ARQ协议: 为了不要只发一个报文就傻傻等待确认,浪费时间,TCP可以连续发出一堆报文,然后等待确认,收到一个就又发一个,这样就快许多了,如下图。这叫流水线传输,使用这种方法需要连续ARQ和滑动窗口协议。接收方可以采用累计确认的方式,即它收到6、7、8、9报文,它只发出收到9的确认,这样发送方就知道6,7,8也收到了。
滑动窗口协议:滑动窗口发送和接收方都有,发送方的窗口大小只能小于等于接收方。凡是已经发送的数据,在未收到确认都保留,以便超时重传。
发送方收到确认后,后沿前移多个单位,而前沿根据接受方返回的确认信息前移。
拥塞控制:认清一点,流量控制是为了方便两端发送和接收的速率同步,而拥塞控制是防止过多的数据注入到网络中,避免网络瘫痪。TCP提供了两对拥塞控制方法,如下:
1.慢开始和拥塞避免:慢开始要维持一个叫拥塞窗口cwnd 的状态变量和一个慢开始门限ssthresh。发送数据时,第一次发1个,收到确认发2个,再收到确认发4个,8、16、32。乘法增加,直到等于ssthresh,就开始拥塞避免加法增加。当检测到网络拥塞(发送方是否按时收到确认),就把 ssthresh 设为 cwnd 的一半,从新开始慢开始。如下图:
2. 快重传和快恢复:快重传算法要求接受方收到一个失序报文就发出它上一个没失序报文的重复确认,如果又接收到新的失序报文,则继续发出重复确认。比如接收方接收到5、7则发出5、7的确认并重复发出一个对5的确认。如果继续收到8、9则发出对8、9的确认和两次对5的重复确认。当发送方收到3个重复确认则立即重传报文 6 ,并且将ssthresh设为cwnd的一半。这样做是为了让发送方尽早重传未被确认的报文段。如下图:
随机早期检测RED:
TCP的连接建立:
TCP的连接释放:
TCP的有限状态机:
- 计算机网络运输层
- 《计算机网络 3》 运输层
- 《计算机网络》之运输层
- 《计算机网络 3》 运输层
- 计算机网络之运输层
- 计算机网络 3.运输层
- 计算机网络笔记---运输层
- 计算机网络运输层
- 计算机网络 - 运输层
- 计算机网络之运输层
- 计算机网络-运输层
- 计算机网络的运输层
- 【计算机网络】运输层
- 计算机网络--运输层
- 计算机网络 运输层
- 计算机网络-运输层
- 计算机网络-运输层
- 计算机网络–运输层
- python3用pillow生成验证码,tornado中输出图片
- div随鼠标移动
- Unity3d使用高通Vuforia发布IOS工程遇见缺少插件问题解决
- ReactiveCocoa2 源码浅析
- Android保存图片到系统图库 或者指定文件夹
- 计算机网络 - 运输层
- 【四】ODB - C++ 单表更新(V1.11)
- hdu 5534(dp)
- lightoj 1116 - Ekka Dokka 【分解因子】
- android 休眠唤醒机制分析(一) — wake_lock
- Maven的安装与使用
- 凸优化(一)——Introduction
- Hibernate之主键生成策略
- android-studio安装过程详解