导图社区 4.传输层
计算机网络思维导图传输层,整理了传输层提供的服务、UDP协议、TCP协议的内容,感兴趣的小伙伴一起来看看。
编辑于2023-03-20 10:56:21 上海传输层
传输层提供的服务
传输层只存在于通信子网以外的主机中,而路由器在转发分组时都只用到下三层的功能
传输层的功能
提供应用程序之间的逻辑通信(即端到端)
复用和分用:发送方不同应用程序可以适用同一个传输层协议传输,接收方的传输层剥去报文的首部后能把这些数据正确的交付发哦目的应用进程。网络层也有复用分用功能
对报文进行差错检测(首部和数据部分,网络层只检测首部)
提供两种不同的传输协议,即面向连接的TCP和无连接的UDP,而网络层无法同时实现两种协议
当传输层使用面向连接的TCP是,尽管下一层网络层是不可靠的(尽最大努力交付)但这种逻辑通信信道就相当于一条全双工的可靠信道;但当传输层采用无连接的UDP时,这种逻辑通信信道仍然时不可靠信道
端口
端口是用来标识主机中的应用程序的(进程)
端口号长度16bit 可表示65536个不同端口号,端口号只有本地意义
端口号分类
服务器端使用的端口号
熟知类端口号:0~1023 IANA(互联网地址指派机构)把这些派给了TCP/IP最重要的程序
没有熟知端口号:1024~49151 提供没有熟知端口号的应用使用,使用时要在IANA登记避免重复
客户使用的端口号
419152~65536 仅在客户进程运行时才动态的选择,又称短暂端口号,通信结束端口号就结束了可以分配下一个进程使用
套接字
端口号拼接到IP地址构成
套接字<IP地址:端口号>它唯一标识某台主机的某个应用
无连接服务和面向连接服务
TCP/IP面向连接服务
传输数据前先建立连接
适用可靠性更重要的场合,如文件传输协议(FTP)、超文本传输协议(HTTP)、远程登陆(TELENET)等
UDP无连接服务
它在IP之上增加了两个服务:多路复用和对数据的错误检查
远程主机收到UDP报文后不需要给出任何确认
执行速度快、实时性好;适用于小文件传输协议(TFTP)、DNS、SNMP和实时性传输协议(RTP)
UDP协议
UDP数据报
UDP仅在IP的数据报之上提供额外两个功能:复用分用、差错检测
优点
无需建立连接
无需维护连接状态
分组首部开销小 仅有8B
应用层能更好的控制要发送的数据和发送的时间
UDP支持一对一、一对多、多对一的交互通信
UDP特点
UDP不保证可靠交付但这不意味着应用层不需要可靠的数据,所维护的可靠性由应用层来保证
UDP是面向报文的,UDP把从应用层接收到的报文发送给IP层,一次发送一个报文,不合并也不拆分,UDP把来自IP层的报文交给上层应用层时,去除首部原封不动的交给应用层,一次交整个报文
UDP首部格式
两部分:UDP首部+用户数据;首部8B,由四个字段组成,每个字段2B
首部的四个字段
源端口
源端口号,需要对方回信时使用,不需要时全0
目的端口
目的端口号,在终点交付报文的时候使用
长度
UDP数据报的长度(首部+数据)最小值为8(仅有首部的时候)
校验和
检测数据报是否有错,有错丢弃也可以不丢弃交付给上层,但是要附上错误报告;该字段是可选的不使用时直接赋值全0
如果接收方发现UDP报文不正确则丢弃,由ICMP发送“端口不可达”差错报文给发送方
UDP校验
计算校验和时在UDP首部加上12B的伪首部,伪首部只在计算校验和时临时添加在UDP数据报前面的。伪首部既不向下传送也不向上提交
伪首部包括
源IP地址4B、目的IP地址4B、固定1B(全0)、数据部分使用的协议1B、UDP长度(首部8B+数据部分)
发送方校验步骤
填上伪首部
校验字段填充全0
若数据报不是偶数字节用全0填充至2B整数倍
伪首部+首部+数据采用反码求和,结果再取反,结果填入校验和字段
去掉伪首部,发送
接收方校验步骤
加上伪首部
伪首部+首部+数据部分反码求和,这里的校验和不是全0,应该是发送方得出的结果作为校验和字段的数据。得出结果全为1时表示正确,否则丢弃
TCP协议
TCP协议的特点
TCP协议是建立在IP层之上实现的可靠传输,TCP报文段整个作为IP数据报的数据部分
TCP是面向连接的传输层协议,连接是一条逻辑链接
TCP连接的是两个端点,端到端(进程对进程)
TCP提供的是可靠服务,保证传送的数据无差错、不丢失、不重复、有序
TCP提供全双工通信,双方都有接收和发送缓存,发送缓存:待发送数据+已发送未收到确认;接收缓存:按序到达且未读取+不按序到达的数据
TCP面向字节流
与UDP的小区别
UDP报文长度由应用进程决定,TCP报文长度根据接收方窗口和当前网络拥塞程度决定,若应用进程传给TCP缓存的数据太长,TCP可以把它的短一点,若很短可以累计足够的字节在构成报文段发送
TCP报文段
TCP报文段可以用来传输数据也可以用来建立连、释放连接和应答
TCP报文首部有固定20B 后面附加4B整数倍的选项不4B用0填充
各自段的含义
源端口和目的端口
各占16bit,运输层的复用和分用通过端口实现的
序号
占32bit,报文数据部分第一字节的序号
确认号
占32bit,期望对方下个报文段的第一个数据字节的序号
数据偏移(首部长度)+保留
占4bit,数据距离首部起始有多远,单位4B,后面有6bit保留字段
六个1bit字段
紧急位URG
URG=1时表明紧急字段有效,与紧急指针配合使用
确认位ACK
ACK=1时确认号字段才有效,ACK=0时确认号无效,连接建立后所有传送的报文ACK都为1
推送位PUSH
接收方接收到PUSH=1的TCP报文,表明需要赶紧交付应用层
复位位RST
RST=1时需要释放连接,重新建立连接
同步位SYN
SYN=1时表示这是一个连接请求或连接接收报文
终止位FIN
用来释放连接,表明发送方的数据已经发送完毕
窗口
占16bit,表明发送方的接收窗口,与确认号一起使用,比如确认号=701,窗口=1000,对方下次发送来的应该是701~1700序号的数据
校验和
占16bit,检验首部+数据部分,计算时和UDP一样,都需加12B的伪首部,还有首部第四个字段-协议字段的值为6
紧急指针
占16bit,URG=1时有效,值为N时表明数据1~N字节为紧急数据
选项(可变)+填充
TCP最初只规定一种选项,最大报文段长度(指数据字段最大长度),填充是为了让TCP首部时4B的整数倍
TCP连接管理
TCP连接的建立(3次握手)
ROUND1
客户机向服务器发送请求连接报文段 SYN=1;seq(序号)=随机值x;SYN报文段不能携带数据,但要消耗一个序号
ROUND2
服务器收到客户机请求,若同意建立连接,向客户发回确认并为该TCP分配缓存和变量;SYN=1;ACK=1,ack(确认号)=x+1;seq=随机值y;确认报文段不携带数据但也消耗一个序号
ROUND3
收到服务器的确认报文段后还要向服务器进行确认,并为该TCP分配缓存和变量; ACK=1;seq=x+1;ack=y+1;该报文可携带数据,若不携带数据则不消耗序号
注意,客户端的资源是在第三次握手时分配的,服务器的资源是在第二次握手时分配的
TCP连接的释放(4次握手)
ROUND1
客户机准备关闭时向服务器发送连接释放报文段,并停止发送数据,主动关闭TCP连接;FIN=1;seq=u(发送的最后一个字节+1);FIN报文段即使不携带数据也消耗一个序号 ,此时客户机不发送数据,但服务器仍可以发送数据
ROUND2
接收到客户机的请求后发送确认;确认号ACK=1;ack=u+1;seq=v(等于服务器最后发送的序号+1); 此时服务器还可以发送数据,客户机还必须接收,因为服务器到客户机的连接还没释放,只是客户机到服务器的连接断开了
ROUND3
若服务器也发送完了数据,向客户机发送TCP释放连接报文段;FIN=1;seq=w(不一定是v因为又可能在上步之后还发送了数据);ACK=1;ack=u+1
ROUND4
客户机收到连接释放报文段后,必须发出确认;ACK=1;seq=u+1;ack=w+1;此时TCP还没有释放,需要等待计时器设置的时间2MSL后,客户机才进入关闭状态
注意!,ACK建立连接后一定为1,本设备发送时seq需要看自己之前发送的最后一个序号加一,ack需要看对方发送的最后一个序号+1
TCP可靠传输
TCP使用了校验、序号、确认、重传等机制进行可靠传输的保证,其中校验与UDP基本类似,这里不在赘述
序号
序号是建立在字节流之上的而不是建立在报文段之上,每个字节上都有一个序号
确认
发送方缓存会继续存储那些发送了的但没有收到接收方确认的报文段,以便超时重传
TCP使用累计确认,即TCP只确认数据流中第一个丢失字节为止的字节,意思是若收到了后面失序的报文段时还是把确认号填写断序的那个确认号
重传
超时
发送方发送一个报文开始计时,若在重传时间内没有收到确认信息就重传
冗余ACK(冗余确认)
TCP规定,如果发送方对一个报文的三次ACK时,意思是接收方收到了三个失序的报文发了三次失序点的那个报文的确认并接收方都已经接收到,此时认为这个报文已经丢失,进行重传
TCP流量控制
接收窗口rwnd
接收方通过自己的接收窗口大小动态的调节发送发的发送窗口的大小
拥塞窗口cwnd
发送方通过当前网络拥塞程度估计而确定的窗口值大小
传输层和数据链路层流量控制的区别
传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻节点的流量控制;数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的可以动态变化
TCP拥塞控制
与流量控制的区别
拥塞控制是让网络能承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器以及降低网络传输性能有关的所有的因素,流量控制是控制的发送方发送数据的速率。相同点:都是通过控制发送方发送的速率来控制的
慢开始和拥塞避免
慢开始算法
TCP刚开始连接好开始发送TCP报文段时,另cwnd为1,在收到接收方的确认时cwnd依次为2,4,8.....指数增长,但不能超过ssthresh(阈值),如ssthresh=12,则下次cwnd不能为16,只能为12
慢开始并不是指增长速度慢,而是刚开始窗口之设置为1试探网络的拥塞情况,当达到ssthresh值时开始拥塞避免算法
拥塞避免算法
从慢开始指数增长到ssthresh时开始拥塞避免算法,每次cwnd+1,加法增大,当增加到网络拥塞时,“乘法减小”ssthresh=1/2*cwnd(拥塞时),但不能小于2,cwnd=1;
乘法减小是只无论是在慢开始还是拥塞避免阶段,只要出现超时(很可能出现网络拥塞),就让ssthresh=1/2cwnd(拥塞时),cwnd=1开始慢开始算法;加法增大就是把拥塞窗口每次增加MSS大小
拥塞避免不能完全避免拥塞
快重传和快恢复
快重传
并非取消重传计时器,而是在某些情况下更早的重传丢失的报文段
当发送方连续接受到三个重复的ACK报文时,直接重传对方未收到的报文段,而不必等待那个报文段设置的重传计时器超时
快恢复
当发送方连续收到三个冗余ACK时,执行“乘法减小算法”ssthresh设置此时cwnd的一半,然后cwnd的值也等于此时ssthresh的值进行拥塞避免算法。由于跳过了慢开始过程,所以成为快恢复
四种算法在何时使用
TCP连接建立和网络出现超时,此时使用慢开始+拥塞避免;发送方收到冗余ACK时,此时使用快重传+快恢复
注意!发送方实际发送窗口大小=Min{rwnd,cwnd}(题目同时给了rwnd和cwnd时)