运输层提供应用进程间的逻辑通信。
端到端的通信是应用进程之间的通信。
运输层有一个重要的功能:复用和分用。
网络层是为主机之间提供逻辑通信,运输层是为应用进程之间提供端到端的逻辑通信。
运输层还有对收到的报文进行差错检测。
硬件端口是不同设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
运输层端口号分为两大类:
1、服务器端使用的端口号:系统端口号,0~1023,在www.iana.org查到。登记端口号:数值1024~49151,使用这类端口号必须在IANA按照规定的手续登记。
FTP:21
TELNET:23
SMTP:25
DNS:53
TETP: 69
HTTP:80
SNMP:161
SNMP(trap):162
2、客户端使用的端口号:数值49152~65535,又称短暂端口号。
用户数据报协议UDP:
udp在IP的基础上增加了复用分用以及差错检测的功能。
UDP特点:
1、UDP是无连接的。
2、UDP尽最大努力交付。
3、UDP面向报文。
4、UDP没有拥塞控制
5、UDP支持一对一、一对多、多对一、多对多的交互通信。
6、UDP的首部开销小。只有8字节,比TCP20字节短。
![7898366-1591fd272584de93.jpg](https://i-blog.csdnimg.cn/blog_migrate/c5e3a2b17c885ba098574baf5931473c.jpeg)
![7898366-3374c3bfccef7e92.jpg](https://i-blog.csdnimg.cn/blog_migrate/6675a3911010bffaf12f181a066bf059.jpeg)
伪首部第四个为协议字段值,udp此协议字段值为17。
传输控制协议TCP:
特点:
1、面向连接的运输层协议。
2、点对点通信。
3、可靠交付。
4、全双工通信。
5、面向字节流。
TCP报文段的首部格式:
前20个字节固定,后4个可选,首部最小20字节。
![7898366-d0bac4435afc2f63.jpg](https://i-blog.csdnimg.cn/blog_migrate/a27bfb35c455d4542544edc15b59a5ff.jpeg)
![7898366-cc1340af28840f52.jpg](https://i-blog.csdnimg.cn/blog_migrate/ea319d021f14fdbe6ae94db4b75d34b8.jpeg)
![7898366-c1a4c7e848d15eb3.jpg](https://i-blog.csdnimg.cn/blog_migrate/f01801dcd41607a1d17e5e3701819ff9.jpeg)
![7898366-3a6306c86c24dcc7.jpg](https://i-blog.csdnimg.cn/blog_migrate/ec51306ef6600fc09e340bf8bac32a23.jpeg)
MSS:最大报文段长度:指数据段的长度。MSS值默认536字节长,整个报文长536+20(固定首部长度)=556
又陆续增加了:如:窗口扩大选项,时间戳选项,选择确认选项等。
窗口扩大选项:占3字节,其中一个字节表示移位值S,新增窗口值等于TCP首部的窗口数从16增大到(16+S)。
时间戳选项占10字节,时间戳字段(4字节)和时间戳回送回答字段(4字节)。
两个功能:
1、计算往返时间RTT。
2、用于处理TCP序号超过2的32次方的情况,防止序号绕回PAWS。
TCP连接的端点叫做套接字或插口。
套接字socket=(IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP连接 ::={socket1,socket2}={(IP1:port1),(IP2,port2)}
理想的可靠传输条件两个特点:
1、传输信道不产生差错。
2、不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
停止等待协议:
1、无差错情况。
2、出现差错。
措施:超时重传。
三点注意:
1、A发送完一个分组后,必须保留已发送的分组副本,只有收到相应的确认后才清除。
2、分组和确认分组都必须进行编号。
3、超时计时器设置重传时间应当比数据在分组传输的平均往返时间更长一些。
3、确认丢失和确认迟到(确认重传机制)
并不知道A发送的数据是出错、丢失还是B的确认丢失,采取行动:
1、B丢弃这个重复的分组,不向上交付。
2、B向A确认。
4、信道利用率
TD:分组长度除以数据率。
RTT:往返时间。
TA:假定B发送确认分组需要时间。
信道利用率U=TD/(TD+RTT+TA)
流水线传输可以提高信道利用率,每次发送多个分组,不必每发完一个分组就停下来确认。当使用流水线传输时,需要使用连续ARQ协议和滑动窗口协议。
连续ARQ协议:
发送窗口:意味着发送窗口内的多个分组可以连续的发送出去,不需要等待对方确认。这样,信道利用率提高。
接收方不需要采用累积确认的方式,对按序到达的最后一个分组发送确认。
累积确认:优点:容易实现,即确认丢失也不必重传。缺点:不能向发送方反映出接收方已经正确收到的所有分组信息。
TCP可靠性传输:
TCP滑动窗口以字节为单位。
滑动窗口的三个指针:P1,P2,P3.
小于P1的是已发送并已收到确认的部分,而大于P3是不允许发送的部分。
P3-P1= A的发送窗口。
P2-P1= 已发送但尚未确认的字节数。
P3-P2= 允许发送单尚未发送的字节数。
发送缓存用来存放:
1、发送应用程序传送给发送方TCP准备发送的数据。
2、TCP已发送出但尚未收到确认的数据。
接收缓存用来存放:
1、按序到达的、但尚未被接收应用程序读取的数据。
2、未按序到达的数据。
超时重传的选择:
TCP采用自适应算法,记录报文段发出的时间。
选择确认SACK:
TCP流量控制
利用滑动窗口实现流量控制:
流量控制:让发送速率不要太快,要让接收方来得及接收。
流量控制往往指点到点、端到端通信量的控制。
发送窗口不能超过接收方给出的接收窗口的数值。
TCP窗口单位是字节。
ACK是确认值,ack是确认字段的值,rwnd滑动窗口的值。
TCP拥塞控制
一般原理:
对资源的需求>可用资源
拥塞控制:防止过多的数据注入网络,这样可用使网络中的路由器或链路不致过载。
几种拥塞控制方法:
慢开始、拥塞避免、快重传、快恢复。
慢开始:由小到大逐渐增大发送窗口。
慢开始门限ssthresh:
当cwnd(滑动窗口)< ssthresh时,使用慢开始算法。
当cwnd(滑动窗口)> ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd(滑动窗口)= ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
拥塞避免算法:让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口加1,而不是加倍。这样cwnd按线性规律缓慢增长,比慢开始(成倍增长)缓慢的多。
若拥塞超时,则改变门限值,cwnd重新开始。
快重传规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,不必等待重传计时器到期。
接收窗口大小值rwnd,发送窗口大小cwnd。
发送窗口上限值=Min[rwnd,cwnd];
TCP运输连接管理
连接建立、数据传送和连接释放。
三个问题:
1、要使每一方能够确知对方的存在;
2、要允许双方协商一些参数;
3、能够对运输实体资源进行分配。
![7898366-f22270acf03dc9bc.jpg](https://i-blog.csdnimg.cn/blog_migrate/e668b6f528f5e8e4fddb68e2a66329ce.jpeg)
B的TCP服务器进程先创建一个传输控制块TCB。然后再监听。
A的TCP客户进程也创建一个传输控制块TCB,然后向B发送请求,SYN报文段不能携带数据,但要消耗一个序号。
同样,B返回时SYN也不能携带数据,但要消耗一个序号。
ACK报文段可以携带数据,但如果不携带则不消耗序号。
为什么发送一次确认?
防止已失效的连接请求报文段突然又传到B。
![7898366-bc03d2f138b6096e.jpg](https://i-blog.csdnimg.cn/blog_migrate/aac362111830a41e8946a69f8e85ddfa.jpeg)
FIN报文段即使不携带数据也消耗一个序号。
MSL最长报文段寿命。
为什么必须等待2MSL?
1、为了保证A发送最后一个ACK报文段能够到达B。
2、防止已失效的连接请求报文段出现在本连接中。解释:这个时间内所产生的的报文从网络中消失,这样就可以使下一个新的连接不会出现旧报文。
保活计时器:确定发送方、接收方还活着。
![7898366-76b05f2c888be46d.jpg](https://i-blog.csdnimg.cn/blog_migrate/e8811ac3ddfb85f4ce278d23e1326d0f.jpeg)