导图社区 传输层
计算机网络传输层导图及其细节,包括提供的服务、UDP、TCP、连接管理、可靠传输、流量控制、拥塞控制。
编辑于2021-11-08 13:57:25六顶思考帽
传输层
提供的服务
功能
进程之间的,端到端的通信,网络层提供的是主机之间的逻辑通信
传输层复用是指各进程都可使用同一传输协议传输数据;分用指接收方传输层能将报文正确交付到目的进程
网络层复用是指不同协议数据都可封装成IP数据报;分用时指接收方网络层能将IP数据报交付给个协议
对报文进行差错检测。网络层只检测IP首部
提供TCP和UDP两种传输协议,而网络层只
寻址与端口
各进程通过端口将数据交付给传输层,或者从端口接收传输层的数据
不同于交换机路由器上的硬件端口,传输层端口是软件端口,只用来标识本计算机上的一个进程
端口号
长度16位,共65536个端口
服务端使用端口:0~1023分配给熟知的程序,1024~49151为登记端口号,要在IANA登记以防重复
客户端端口号:49152~65535,客户进程运行时动态选择
Socket
Socket=(主机IP地址,端口号),用来唯一标识网络中一台主机上的一个进程
A发送给B的报文段包含目的端
面向连接服务
通信时要先建立连接,通信过程中连接被实施监控管理,通信结束后释放连接 TCP。
主要用于FTP,HTTP,TELNE
面向无连接服务
通信时无需建立连接,通信时直接将数据发送到网络 UDP。
主要用于TFTP,DNS,SNMP,RTP
UDP
UDP数据报
只提供基本的复用,分用和差错检测。常用于一次性传输比较少量的网络应用
优点
无建立连接的延时
无连接状态管理,可支持更多的活动客户机
分组首部开销小,仅有8B
方便应用层控制发送的数据和发送时间
UDP不保证可靠交付,其可靠性由应用层完成
UDP是面向报文的,对应用层提交的报文不做任何修改,直接添加上首部后提交给网络层
UDP长度最少是8(仅有首部),UDP报文有错就丢弃。若接收方发现报文中目的端并由ICMP发送“端口不可达”的差错报文给发送方口号不正确,则丢弃报文 并由ICMP发送“端口不可达”的差错报文给发送方
UDP校验
计算校验和时,在UDP报文前面添加12B的伪首部做成临时UDP报文,对这个临时UDP报文进行校验和计算
UDP校验对首部和数据都校验,而IP校验只校验数据报的首部
计算过程
先把全0放入校验和字段,添加伪首部,此时若报文大小不是偶数个字节,则填充为偶数个字节
计算时以16位字为单位,所有16位字以反码形式相加,对和取反得到校验字段。
接收方收到UDP报文后添加伪首部,填充,按二进制反码计算16位字的和,若无差错则结果应全为
TCP
在不可靠的IP层上实现可靠的传输协议,解决传输的可靠,有序,无丢失,不重复问题
特点:面向连接的,全双工的,可靠的,面向字节流的
TCP段
TCP段包括首部和数据两部分,称为TCP报文。整个报文作为数据部分封装在IP的数据报中。 <TCP首部,数据>,<IP首部,<TCP首部,数据>(数据)>
TCP头部
源端口和目的端口
序号:数据中每个字节占一个号(非头部).如序号是301,数据100B,则尾号就是400,下个报文就从401开始
确认号:期望收到的序号。确认号为N,则表示已收到N-1号的报文
数据偏移:以4B为单位,如15表示数据在首部的60B之后。
保留字段
紧急位URG:相当于优先级高
确认位ACK:ACK=1时确认号才有效,ACK=0时确认号无效
推送位PSH:不用缓存填满请尽快交付
复位位RST:连接出错,重新连接
同步位SYN:SYN=1表示这是连接请求或连接接收报文
终止位FIN:FIN=1表示传输完毕,释放连接
窗口字段:单位字节,如序号701,窗口1000,表示可接收701-1700的报文
校验和:和UDP一样添加伪首部计算校验和
其他(了解)
连接管理
连接建立(三次握手)
客户机发送请求报文,设置初始序号,SYN=1,序号=X
服务机接受连接后,为其分配资源,发送确认报文。SYN=1,ACK=1,确认号=x+1,序号=y
客户机收到确认报文,为连接分配资源,发送确认。SYN=1,ACK=1,序号=x+1,确认号=y+1
若客户机不给出第三次的确认,服务器上分配的资源会保持一段时间,容易造成SYN洪水
连接释放(四次握手)
客户端发送释放连接报文,停止发送数据。FIN=1,序号=u
服务器接收结束报文返回确认,此时是半连接状态,ACK=1,确认号是u+1,序号是v
服务器数据传输结束后,发送结束报文,关闭连接。ACK=1,FIN=1,确认号是u+1,序号是w(不是v+1是关闭前可能又传输若干数据)
客户机收到结束报文返回确认,ACK=1,序号=u+1,确认号=w+1。等待2
可靠传输
校验:和UDP一样的校验机制
序号:首部的序号字段能保证数据有序提交给应用层
确认:首部的确认号是期望下次收到的报文的序号,使用累计确认。即若B收到了0~2和6~7,则B发的确认号还是3
重传
超时
TCP给每个报文段设置计时器,若超时还未收到确认则重传
TCP计算从发出到确认的时间差RTT,通过计算加权平均值更新RTT。设置超时时间略大于RTT
冗余ACK
超时机制问题是超时时间往往过长,发送方可通过冗余ACK检测丢包情况
冗余ACK表示再次收到已确认报文段的ACK。如A发送号1,2,3,4,5,其中2丢失。B收到3,4,5后返回的是 3个ACK=1,确认号=2的报文(已收到1,期望2,是对1号的确认)。A收到1号的冗余
流量控制
基于滑动窗口协议的流量控制
接收方根据自己接收缓存大小,动态更新发送方窗口,即窗口字段。表示接收方能接收的最大字节数。发送方根据窗口字段限制自己发送窗口大小。发送窗口实际大小取拥塞窗口中的最小值
拥塞控制
拥塞控制是控制整个网络的负荷,是全局的,涉及所有主机和路由器。流量控制是点对点的通信控制,限制发送方速率
发送方维持拥塞窗口,动态变化,只要未拥塞,窗口就增大,只要拥塞,窗口就减小
控制算法
慢开始
开始发送时令拥塞窗口=1.每收到一个对新的报文的确认就让窗口+1
窗口大小成指数增长,达到上限(阀值)后使用拥塞避免算法
拥塞避免
拥塞窗口每经过一个RTT后+1,而不是加倍,变成线性增长。当出现拥塞时,令阀值=当前窗口/2 然后设置拥塞窗口=1,再次用慢开始
当窗口<阀值时,使用慢增长。当拥塞窗口>阀值时,改用拥塞避免
快重传:即可靠传输中的冗余ACK可用于拥塞检测。检测到冗余ACK时直接快速重传
快恢复
当发送端收到连续三个冗余ACK后,就把阀值=当前窗口/2
与慢开始不同的是不是把拥塞窗口=1,而是将拥塞窗口=当前窗口/2,然后用拥塞避免算法,因而是快恢复
拥塞处理
无论是满开始还是拥塞避免阶段,只要出现拥塞就把阀值=当前拥塞窗口/2,然后把拥塞窗口=1,再执行满开始算法
可以迅速减少网络分组数,使路由将积压分组快速处理
发送窗口的实际大小由接收窗口和拥塞窗口共同控制,取其最小值
记住那个图