向应用层提供通信服务,属于面向通信部分的最高层,也是用户功能中的最低层
(1)提供应用进程之间的逻辑通信,即端到端的通信
(2)复用和分用,复用:发送方不同的应用进程都可使用同一个传输层协议传送数据;分用:指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
网络也有复用和分用,效果类似
(3)对收到的报文进行差错检测(首部和数据部分);网络层只检查IP数据报的首部
(4)提供两种不同的传输协议,即UDP和TCP
端口的作用
应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程
端口是传输层服务访问点TSAP,标识的是主机中的应用进程
端口号
长度16比特,只具有本地意义,根据端口号的范围分为两类:
(1)服务器端使用的端口号
熟知端口号:数值为0~1023,这些端口号指派给TCP/IP最重要的一些应用程序
登记端口号:数值1024~49151,供没有熟知端口号的应用程序使用,必须在IANA登记,防止重复
(2)客户端会用的端口号
数值为49152~65535,仅在客户进程运行时才动态选择,又称短暂端口号,通信结束,用过的客户端口号就不复存在
套接字
端口号拼接到IP地址即构成套接字Socket,采用发送方和接收方的套接字来识别端点,套接字,实际上是一个通信端点,即套接字Socket=(IP地址:端口号)
唯一的表示网络中一台主机和其上的一个应用进程
TCP:文件传输协议FTP,超文本传输协议HTTP,远程登录TELNET等
UDP:小文件传送协议TFTP,DNS,SNMP和实时传输协议RTP
IP数据报在网络层要经过路由的存储转发;而UDP数据报会封装成IP数据报在网络中传输,UDP数据报的信息对路由不可见
网络层采用虚电路无法提供无连接服务,传输层采用TCP不影响网络层提供无连接服务
UDP概述
UDP仅在IP数据报服务增加了:复用和分用,以及差错检测
优点:
(1)无须建立连接,没有这方面的时延
(2)无连接状态,某些专用应用服务器使用UDP时, 一般都能支持更多的活动客户机
(3)分组首部开销小,只有8B
(4)应用层能更好的控制发送的数据和发送时间;某些实时应用要求稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,UDP正好满足
(5)UDP支持一对一,一对多,多对一和多对多的交互通信
常用于一次性传输较少数据的网络应用;UDP面向报文,应用层的报文直接添加首部后交付给IP层,一次发送一个报文,既不合并,也不拆分,因此应用程序必须选择合适大小的报文
UDP的首部格式
(1)源端口
(2)目的端口
(3)长度:数据报的长度(包括首部和数据),最小值是8
(4)检验和
如果接收方发现目的端口号不正确,丢弃报文,ICMP发送端口不可达的差错报文给发送方
计算校验和时要在UDP数据报之前增加12B伪首部,仅供计算校验和使用
IP数据报校验和检验只首部,UDP校验和检验首部和数据
发送方把全0放入校验和字段并添加伪首部,然后以16位作为子串拼接;若UDP不是偶数字节,则需要添加一个全0字节,但是不发送,仅供计算;然后按反码计算出这些16位字的和,将和的反码写入校验和字段,发送;接收方收到后加上伪首部,再按反码求和,无差错时结果全1,否则就是有错,丢弃UDP
校验出数据报是错误的,可以丢弃,也可以交付给上层,但是需要附上错误报告
这种校验方法校错能力不强,但简单,处理速度快
(1)面向连接,是一条逻辑连接
(2)每一条只能有两个断点,一对一
(3)提供全双工通信,两端设有发送缓存和接收缓存
(4)面向字节流,应用程序和TCP的交互是一个数据块,但TCP会视为一连串无结构的字节流
(5)提供可靠交付的服务,保证传送的数据无差错,不丢失,不重复且有序
且UDP报文的长度由程序决定, 但TCP会根据窗口值和网络拥塞程度来决定,过长会划分短一些,过短会积累足够再发
TCP报文段可以运载数据,可以用来建立连接,释放连接和应答;首部20B固定,最短为20,增加的部分必须是4B的整数倍
(1)序号,TCP是面向字节流,所有字节按顺序编号;例如一个报文段的序号字段为301,携带的数据共有100B,表明最后一个字节的序号是400,因此下一个报文段的序号从401开始
(2)确认号,期望收到对方下一个报文段的第一个数据字节的序号,若确认号为N,表明序号N-1之前的数据都正确接收
(3)数据偏移,表示首部的长度,4B为计算单位,因此首部最长60B
(4)紧急位URG,URG=1,表明紧急位有效,告诉系统此报文段中有紧急数据,应尽快传送,要和紧急指针字段配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据
(5)确认位ACK,ACK=1时确认号字段有效,TCP规定,连接建立后所有发送的报文ACK置1
(6)推送位PSH,收到PSH=1的报文段,尽快交付,不用等缓存满
(7)复位位RST,RST=1表明TCP连接出现严重差错,必须释放连接
(8)同步位SYN,SYN=1,ACK=0,表明这是一个连接请求报文,对方若同意连接,则应在响应报文中使用SYN=1,ACK=1
(9)终止位FIN,FIN=1,表明此报文段的发送方的数据已发送完毕,要求释放连接
(10)窗口:指出现在允许对方发送的数据量,接收方的数据缓存空间有限,因此窗口值作为接收方让发送方设置发送窗口的依据
如,确认号701,窗口值1000,表明从701算起,发送此报文段的一方还有1000B的接收缓存空间
(11)校验和,与UDP类似,只是协议字段17改为6
(12)紧急指针:指出本报文段中紧急数据共有多少字节
TCP连接的端口即为套接字或插口,每条TCP连接唯一的被通信的两个端点(即两个套接字)确定
TCP连接的建立擦爱用客户/服务器模式,主动发起连接的称为客户,被动等待的称为服务器
TCP连接的建立
常称为三次握手
第一步:客户发TCP连接请求报文,SYN=1,选一个初始序号seq=x,SYN报文段不能携带数据,但要消耗序号,然后客户进入SYN-SENT同步已发送状态
第二步:服务器若同意,发回Queen,并分配好缓存和变量,SYN=1,ACK=1,确认号ack=x+1,且自己选一个初始序号seq=y;服务器进入SYN-RCVD同步收到状态
第三步:客户收到确认后还要发送确认,并分配缓存和变量,确认报文段ACK=1,确认号ack=y+1,序号seq=x+1,该报文段可以携带数据,客户进入ESTABLISHED已建立连接状态
服务器的资源时第二次握手时分配的,客户的资源是完成第三次握手时分配的,因此服务器易于收到SYN洪泛攻击
TCP连接的释放
常称为四次握手
第一步:客户机发送连接释放报文段,并停止发送数据,主动关闭TCP连接,FIN=1,序号seq=u,TCP是全双工,发送FIN的一方不能发数据,但对方还能发
第二步:服务器收到后发出确认,然后服务器进入CLOSE-WAIT关闭等待状态,此时从客户机到服务器的连接就释放了,但服务器到客户机的连接还未关闭
第三步:若服务器没有要发送的数据,就通知TCP释放连接,此时发出FIN=1的连接释放报文段,服务器进入LAST-ACK最后确认状态
第四步:客户机收到后发出确认,ACK=1,此时TCP连接还没有释放,必须经过时间等待计时器设置的时间2MSL(最长报文段寿命后),客户机才进入CLOSED连接关闭状态
TCP使用校验,序号,确认和重传来达到可靠传输
序号
即每个字节的序号,首部的序号字段用来保证数据有序提交给应用层
确认
TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号
TCP默认使用累积确认,即TCP只确认数据流中至第一个丢失字节为止的字节,例如接收方B收到了A发送的包含字节0~2,6~7的报文段,没有收到3~5,那么B的下一个报文段确认号置为3
重传
(1)超时
TCP每发送一个报文段,就设置一次计时器,重传时间到期还没收到确认,就重传报文段
为了计算超时计时器的重传时间,TCP采用一种自适应算法,记录一个报文发出的时间到收到相应确认的时间,两个时间之差称为往返时间RTT,TCP保留了RTT的一个加权平均往返时间RTTs,会随着RTT样本值的变化而变化
超时计时器的时间略大于RTTs
(2)冗余ACK(冗余确认)
超时重传的超时周期往往太长,因此可以通过冗余ACK来检测丢包情况
如发送1,2,3,4,5,其中2号丢失,3,4,5就是失序报文段,TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号,即发送三个对1号报文段的冗余ACK,表示自己期望接收2号,TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失,那么进行重传,这种技术通常称为快速重传
消除发送方发送速率过快使接收方缓存溢出的可能性
调整TCP报文段首部的窗口的值,来限制发送方向网络注入报文的速率;接收方动态调整发送方的发送窗口大小称为接收窗口rwnd;发送方根据网络拥塞程度估计而确定的窗口值,称为拥塞窗口cwnd
实际发送窗口的大小取rwnd和cwnd中的最小值
数据链路层的窗口不能动态变化,传输层的可以动态变化
拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有主机,路由器和其他因素;流量控制仅仅只是端到端的速率问题
拥塞控制的算法:慢开始,拥塞避免,快重传,快恢复
假设接收方有足够大的缓存空间,即发送窗口由拥塞窗口决定
(1)慢开始算法
先令拥塞窗口=1,即一个最大报文段长度MSS;每经过一个传输轮次RTT,cwnd就会加倍
慢不是指增长速率慢,而是指初始值为1;当cwnd增大到一个慢开始门限ssthresh(阈值),然后该用拥塞避免算法
(2)拥塞避免算法
每经过一个RTT就把cwnd加1,而不是加倍;并不能完全避免拥塞
cwnd cwnd=ssthresh,慢开始和拥塞避免都可以 cwnd>ssthresh,拥塞避免算法 (3)网络拥塞的处理 无论在慢开始还是拥塞避免,只要出现拥塞,就把门限ssthresh设为出现拥塞时发送方的cwnd值的一半(但不能小于2),然后把cwnd置为1,重新开始执行慢开始算法 慢开始阶段,当2cwnd>ssthresh时,则下一个cwnd=ssthresh,因为cwnd不能越过ssthresh 慢开始和拥塞避免使用了乘法减小和加法增大方法 (1)快重传 快重传技术使用冗余ACK来检测丢包的发送,同样冗余ACK也用于网络拥塞的检测 发送方收到连续三个重复的ACK报文,直接重传对方未收到的报文段,不必等待计时器超时 (2)快恢复 原理:当收到三个冗余ACK,执行乘法减小,把ssthresh设置为cwnd的一半 但发送方现在认为网络没有那么拥塞,否则就不会有报文连续到达接收方,因此与慢开始不同的是它把cwnd设置为门限ssthresh改变后的数值,然后执行拥塞避免 TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复 存中…(img-1mClfeER-1690297536034)] TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复