导图社区 计算机网络传输层
这是一篇关于传输层的思维导图,主要内容包括:TCP,UDP,传输层提供的服务。计算机网络传输层是网络体系结构中的关键层次,位于网络层之上、应用层之下,负责为不同主机上的进程提供端到端的可靠数据传输服务。
编辑于2025-04-28 14:00:10传输层
TCP
TCP的特点
是面向连接的传输层协议,是一条逻辑连接
每条TCP只能是一对一的
提供可靠交付,保证传送的数据的无差错,不丢失,不重复有序
提供全双工通信,TCP连接的两端都有发送缓存和接受缓存,用来临时存放通信的数据
发送缓存
发送应用程序传送给发送方TCP准备发送的数据
TCP发送方已经发送但是没有收到确认的数据
接受缓存
按需到达但是未被应用程序读取的数据
不按序到达的数据
TCP是面向字节流的,把应用程序交下来的数据视为一连串无结构的字节流
TCP和UDP在发送报文的时候所采用的方式不同
UDP的报文长度是由发送应用程序决定的
TCP报文长度是由接收方给出的窗口值和网络拥塞程度来决定的,若应用程序给TCP缓存的数据块太长,TCP就把他划分的再小一点来传送;若太短,TCP累积到足够的字节之后再将报文段发送出去
TCP报文段
TCP传送的数据单元叫做报文段,可以用来运载数据也可以用来建立连接,释放连接和应答
首部
首部的前20B是固定的,TCP的最短首部是20B,长度要是4B的整数倍
序号。4B,范围为0~2^32-1,TCP传送的字节流中的每个字节都要编序号,序号字段值指的的是本报文段所发数据的第一个字节的序号。
确认号。4B,期望收到对方下一个报文段的第一个字节的序号。若序号为n,则表示,前n-1为止的数据报都已经正确的接受
数据偏移(首部长度)。4位,首部最大长度是60B
紧急位URG。当为1的时候,表示当前报文段很紧急,应尽快的传送,被插入到传送数据的最前面
确认号ACK。ACK为1的时候表示确认号有效
推送位PSH。当两个应用程序通信时,发送一个命令之后想立即收到对方的回应
复位位RST。当为1的时候表示TCP连接中出现了严重的差错,主机崩溃等,必须释放连接,重新建立连接
同部位SYN。表示这是一个连接请求(ACK=0,SYN=1)或者连接接受报文(ACK=1,SYN=1)
终止位FIN。用来释放一个连接
窗口。占2B。0~2^16-1,从本报文段首部的确认号开始算起,接收方目前允许对方发送的数据量
检验和。2B。用来检验首部和数据部分,也要加伪首部
紧急指针。占2B。仅在URG=1的时候才有意义,表示紧急数据的字节数,窗口为0也可以发送紧急数据
选项。最开始只规定了最大报文段长度MSS
填充。似的首部的长度等于4B的整数倍
TCP连接管理
连接所要解决的问题
双方要感知到对方的存在
双方允许协商一些参数
能够对运输实体的资源进行分配
注意的点
每条TCP连接有两个端点,TCP连接的端口即为套接字
同一个IP地址可以有很多条不同的TCP连接
同一个端口号也可以出现在多个不同的TCP连接中
发起连接的是客户,被动等待连接建立的是应用进程
TCP连接的建立
分为三个步骤,称为三次握手,连接建立之前服务器处于LISTEN监听转态
1.客户端发起请求,SYN=1,ACK=0,初始序号seq=x(设置一个发送方开始序号),不能携带数据,但是要消耗一个序号
2.服务器收到请求之后,SYN=1,ACK=1,seq=y(设置一个接受方发送数据的报文段起始序号),ack=x+1(表示前x的字节全部收到,下一次期望从x+1开始接收数据),也不能携带数据
3.客户端收到确认报告之后,还要向服务器进行确认,ACK=1,ack=y+1同时,seq=x+1,可以携带数据,若不携带数据则不消耗序号
TCP的连接的释放
分为四个步骤,两个进程都可以终止该连接
1.客户机向服务器发送连接释放报文段,FIN=1,seq=u(为前面已经传送的数据的最后一个字节加一),FIN报文段即使不携带数据也要消耗一个序号,
2.服务器收到请求之后,发送确认报文段,ACK=1,ack=u+1,seq=v,此时从客户端到服务器的这个方向的连接就释放了,但是从服务器到客户端的连接没有结束
3.若服务器也没有数据发送,就向客户端发送释放连接报文段,FIN=1,ACK=1,seq=w(这个变化是由于,半关闭状态时服务器可能又发送了一些东西,ack=u+1
4.客户端发出确认,ack=w+1,seq=u+1,ACK=1
注意
客户进程收到挥手3的时候,进入TIME—WAIT,并启动倒计时,等待2MSL(最长报文段寿命)后,才连接关闭。这是因为,如果挥手4服务器没有收到的话,服务器会认为客户机没有收到挥手3,会重新向客户机发送挥手3
如果服务器收到挥手1的时候没有数据要发送了,则可以直接挥手2、3连续发送
服务器从收到连接释放请求之后不再发送数据了,则客户机从发送到进入断开连接最短时间为RTT+2MSL,服务器释放连接的时间为1.5RTT
TCP可靠传输
TCP在不可靠的IP层上建立一种可靠的数据传输服务。TCP提供的可靠数据传输服务保证收到的字节流与发送的字节流完全一样
序号
首部的序号字段用来保证,数据能有序提交给应用层,序号建立在传送的字节流上
确认
确认号是希望收到对方的下一个报文段数据的第一个字节的序号
发送方的缓存区会继续存储那些已发送但是没有收到确认的报文段,以方便重传
TCP默认采用累积确认,TCP只确认数据流中至第一个丢失字节为止的字节,以减少传输开销。接收方可以在自己有数据发送的时候确认(捎带确认),
重传
超时
TCP每发送一个报文段的时候就设置一个超时计时器,到期还未收到确认则会重传
TCP的下一层是IP层,由于IP层的路由变化很大,导致RTT的方差也很大,为了计算超时计时器的时间,TCP采用自适应算法,他记录RTT,TCP维护了RTT的一个加权平均往返时间RTTS,会随样本RTT的变化而变化,超时重传时间应该略微大于RTTS,大太多的话,不能及时重传
但是超时重传就是超时的周期太长
冗余ACK
发送方可在超时事件发生之前通过注意冗余ACK来较好的检测丢包状况
冗余ACK就是再次确认某个报文段的ACK,而发送方之前已经收到过该报文段的ACK了
TCP规定每当比期望序号大的失序报文段到达的时候,就会发送一个冗余的ACK
流量控制
流量控制就是让发送方的发送速率不要太快,以便让接收方来得及接受
TCP利用滑动窗口机制来实现流量控制
接收方要维持一个接收窗口rwnd,接收方根据当前接收缓存的大小,动态调整大小,反映了接收方的容量,接收方将其放在窗口字段 rwnd的单位为字节
TCP有一个持续计时器,只要收到对方的零窗口通知就会开始计时,到时间之后就会发送一个零窗口探测报文段,而对方在确认这个报文段的时候就会给出自己现在的窗口值大小。这种设置主要是防止,接受方发送的确认报文段丢失,接收方等待发送方发送,而发送方也在等待接受发发送确认报文段,所形成的死锁状态。
TCP拥塞控制
拥塞控制是防止过多的数据注入网络,保证路由器和链路不会过载。
拥塞就是对资源的需求总和大于了可用资源,拥塞表现为通信时延的增加
拥塞控制和流量控制的区别
拥塞控制是一个全局性的过程,涉及到所有的主机和路由器,以及能够降低网络传输性能的所有因素
流量控制往往是点对点的通信量控制,是一个端到端的问题,所做的是抑制发送方的发送速率
发送方还要维持一个拥塞窗口cwnd,取决于网络的拥塞状态,会动态的变化,只要未出现拥塞cwnd就会增大一点,出现了网络拥塞就把窗口减小一点,发送窗口=min(cwnd,rwnd)
使用MSS作为拥塞窗口的大小
慢开始算法
先少量发送数据探测一下,cwnd=1,然后每次增加一倍
慢开始不是增长速率慢,而是一开始像网络中注入的数据很少,没经过一个RTT,cwnd就会加倍,按照指数增长
为了防止增长过大导致的网络拥塞,还要设置一个ssthresh慢开始门限,当增大到门限之后开始使用拥塞避免的算法
拥塞避免算法
每经过一个RTT,cwnd+1,使得增长速率变缓慢
慢开始阶段,若2cwnd>ssthresh时,则下一个RTT之后cwnd=ssthresh
网络拥塞处理
开始cwnd=1,先用慢开始算法,cwnd指数增长,当达到门限之后开始使用拥塞避免算法
当网络出现超时的时候就调整ssthresh的值为超时cwnd的一半,同时cwnd=1,并执行慢开始
拥塞避免并不能完全避免网络拥塞,拥塞避免是让网络不容易出现拥塞
快重传
是让发送方尽快进行重传,而不是等到超时计时器超时了再重传
这要求接收方不要等到自己要发送数据的时候才确认,要立即确认
发送方一旦收到三给冗余ACK的时候就要重传相应的报文段
快恢复
当发送方收到3给冗余ACK的时候,把慢开始门限调整到当前cwnd的一半,同时把cwnd也调整到之前的一半,然后使用拥塞避免算法
UDP
UDP数据报
特点
无须建立连接,不会引入建立连接的时长
无连接状态,不需要维护连接状态和跟踪这些参数,因此可以支持更多的客户机
首部开销小:8B
没有拥塞控制,网络中的拥塞不会影响源主机的发送速率
支持一对一,一对多,多对一和多对多通信
常用于一次性传输较小数据的网络应用
不保证可靠交付,维护可靠性的工作可以由用户在应用层上完成
是面向报文
对于应用层上下来的数据,直接加上首部就给IP层
一次发送一个报文,不合并不拆分
报文是UDP数据报处理的最小单位
应用层必须选择合适大小的报文,若太长,则UDP交给IP层的时候会导致分片,若太短,则UDP交给IP层的时候,会因为IP数据报的首部太长而降低IP层的效率
首部格式
源端口,在需要对方回信时选用,不需要时全为0
目的端口号,目的端口号
长度,首部+数据长度,最小为8,只有首部
检验和,检测UDP是否传输有误,有错就丢弃,当不想检验的时候为0
当接收方发现目的端口号不对时,就会丢弃,并向发送方发送ICMP差错报告“端口不可达”
UDP检验
在计算检验和的时候,要加上12B的伪首部,添加到数据报前面,形成一个临时数据报
伪首部不向下传送,也不向上递交
UDP检验和要将首部和数据部分一起检验
过程
把伪首部和数据报部分看成是许多16位的子串拼接起来
如果数据报的数据部分不是偶数字节,就要在末尾添加一个全0的字节
然后按照二进制相加计算这些16位的和,再把和取反就是检验和
接收方再收到检验和的时候,将原来的16位的数据和检验和相加起来,若结果为全1则无差错
传输层提供的服务
传输层的功能
为运行在不同主机的进程提供逻辑通信
复用:发送方的不同进程可以用同一个传输层的传输协议发送数据
差错检测:TCP在发现错误的时候会要求发送方进行重新发送,UDP则会直接丢弃
提供面向连接和无连接的传输协议,TCP和UDP
寻址和端口
端口让应用层的各种进程通过端口交到传输层
端口用于标识主机中的各种应用进程
端口号
端口号的长度由16个比特组成,可以标识65536个不同的端口号
端口号只标识本计算机应用层的各种进程,不同计算机的相同端口号是没有联系的
服务器使用的端口号
熟知端口号
指派给了TCP/IP中最重要的应用程序
数值为0~1023
登记端口号
供没有熟知端口号的应用进程所使用
数值为1024~49151
客户端使用的端口号
这类端口号只有在客户进程运行时才动态的选择,也叫短暂端口号
通信结束之后,刚用过的端口号就不存在了,就可以供其他的进程使用
套接字
端口号拼接IP地址就成套接字,用来区分一台主机中的不同进程
无连接服务和有连接的服务
TCP
传输层向上面提供一条全双工的可靠逻辑信道
要先建立连接,进行可靠数据传输,释放连接
不提供广播和多播服务
为实现可靠数据传输,就要增加许多的措施,确认,流量控制,计时器等
首部会变得很大,会占用许多处理机的资源
常用于可靠性更加重要的场合
文件传输协议FTP
超文本传输协议HTTP
远程登录TELNET
简单邮件传送协议SMTP
UDP
提供的无连接的不可靠传输
接收方在收到UDP用户数据报,无须给发送方发回任何确认
UDP在IP层附加两个服务:多路复用和对数据的错误检测
速度快,实时性好