一、传输层提供的服务
1、传输层的功能
- 向上面的应用层提供通信服务,属于面向通信的最高层,用户功能的最低层。
- 传输层为运行在不同主机上的进程中间提供了逻辑通信,网络层提供主机之间的逻辑通信。
- 边缘部分两台主机使用网络核心部分的功能进行端到端的通信时,只有主机的协议栈才有传输层和应用层,路由器在转发分组时都只是用下三层的功能(即在通信子网中没有传输层,传输层只存在通信子网外的主机中)
-
复用与分用
复用时发送方不同的应用进程都可使用同一个传输层协议传送数据
分用指接收方的传输层在剥去报文的首部后能够把这些数据正确交付给目的应用进程
-
传输层对收到的报文进行差错检测(首部和数据部分),而网络层只检查IP数据报的首部
-
提供两种协议,面向连接的TCP和无连接的UDP。而网络层无法同时实现两种协议(面向连接(如虚电路)or 面向无连接(如数据报))
-
采用TCP,尽管下面的网络时不可靠(只提供尽最大努力的服务)。但这种逻辑通信信道就相当于一条全双工的可靠信道。采用UDP,则是不可靠信道。
2、传输层的寻址与端口
端口是传输层服务访问点(TSAP),相当于IP地址在网络层的作用或MAC地址在数据链路层的作用。
16bit 65536()
只具有本地意义
端口号
分类
①服务器端
熟知端口号 0~1023
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
21 | 23 | 25 | 53 | 69 | 80 | 161 |
- FTP:文件传输协议
- TELNET:主要用于远程登录到网络设备和服务器上
- SMTP:邮件服务器之间传递消息所使用的协议
- DNS:“域名系统”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
- TFTP:简单文件传输协议
- HTTP:超文本传输协议
- SNMP:简单网络管理协议
登记端口号 1024~49151
②客户端
(短暂端口号/临时端口号)49152~65535
套接字
套接字Socket=(IP地址:端口号),唯一地标识网络中的一台主机和其上的一个应用(进程)。
3、无连接服务与面向连接服务
TCP:连接 可靠 增加开销->确认、流量控制、计时器、连接管理->协议数据单元的头部增大很多
TCP不提供广播或组播服务
UDP:仅提供两个附加服务:多路复用和对数据的错误检查
二、UDP协议
面向报文
UDP数据报:UDP首部(8B=2B+2B+2B+2B)+用户数据
源端口:需要对方回信时选用,不需要时可用0
目的端口
长度:UDP数据报长度(包括首部和数据),最小值是8
检验和:可选,当源主机不想计算校验和,则直接令该字段为全0
如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程)就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。
UDP校验
UDP的校验和检查首部和数据部分,加入伪首部进行二进制反码求和,将此和的二进制反码写入校验和字段并发送。
接收方把收到的UDP数据报加上12B伪首部后,二进制反码求和,当无差错时结果为全1。
三、TCP协议
面向字节流
1、TCP报文段
- 源端口和目的端口
- 序号:4B 0~ TCP面向字节流,所以每个字节按顺序编号
- 确认号:4B 期望收到对方下一个报文段的第一个数据字节的序号
- 数据偏移(即首部长度)
- 保留
- 紧急位URG:=1,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送
- 确认位ACK:ACK=1时确认号字段才有效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
- 推送位PSH(Push):接收方TCP收到PSH=1的报文段就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付
- 复位位RST(Reset):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
- 同步位(SYN):当SYN=1,ACK=0,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1
- 终止位(FIN):FIN=1,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
- 窗口:2B,指出现在允许对方发送的数据量
- 校验和:2B
- 紧急指针:仅在URG=1时才有意义,它指出在本报文段中紧急数据共有多少字节
- 选项
- 填充
2、TCP连接管理
要解决的问题:
- 要使每一方能够确知对方的存在
- 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)
- 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配
TCP连接的端点是套接字(Socket)或插口,每条TCP连接唯一地被通信的两个端点确定
TCP连接的建立采用客户/服务器模式。
(1)TCP连接的建立——三次握手
!!经典中的经典
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求
同步位(SYN)连接请求报文
① 客户机TCP向服务器TCP发送连接请求报文(SYN=1,初始序号seq=x),
TCP客户进程进入SYN-SENT(同步已发送)状态
② 服务器TCP收到后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量(SYN=1,ACK=1,ack=x+1,seq=y)
TCP服务器进程进入SYN-RCVD(同步收到)状态
③ 客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。(ACK=1, ack=y+1, seq=x+1), 该报文段可以携带数据,若不携带数据则不消耗序号。
TCP客户进程进入ESTABLISHED(已建立连接)状态
(2)TCP连接的释放——四次握手
① 客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接(FIN=1,seq=u(等于前面已传送过的数据的最后一个字节的序号+1))
TCP客户进程进入FIN-WAIT-1(终止等待1)状态
② 服务器收到连接释放报文段后即发出确认(ack=u+1,seq=v)
服务器进入CLOSE-WAIT(关闭等待)状态
此时从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。服务器若发送数据,客户机仍要接收。
③ 若服务器已经没有要向客户机发送的数据,就通知TCP释放连接(FIN=1,ack=u+1,seq=w)
服务器进入LAST-ACK(最后确认)状态
④ 客户机发出确认(ACK=1,ack=w+1,seq=u+1)
经过时间等待计数器设置的时间2MSL(最长报文段寿命)后,
客户机进入CLOSED(连接关闭)状态
3、TCP可靠传输
TCP使用校验、序号、确认和重传等机制来提供可靠数据传输
(1) 序号
TCP把数据视为一个无结构但有序的字节流
(2)确认
累积确认:eg收到0~2,6~7,此时B仍在等待3,因此B到A的下一个报文段将确认号字段置为3
(3)重传
超时和冗余ACK 会导致重传
超时
报文往返时间(Round-Trip Time ,RTT):一个报文段发出的时间以及收到相应确认的时间
加权平均往返时间 : 随新测量RTT样本值的变化而变化
超时重传时间(Retransmission Time-Out,RTO)应略大于
冗余ACK
每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指向下一个期待字节的序号
快速重传
4、TCP流量控制
基于滑动窗口协议
接收窗口rwnd
拥塞窗口cwnd : 根据网络拥塞程度估计,其大小与网络的带宽和时延有关
5、TCP拥塞控制
(1)慢开始和拥塞避免
慢开始:每经过一个传输轮次(即往返时延RTT),cwnd就会加倍,增大到一个规定的满开始门限ssthresh(阈值),然后改用拥塞避免算法
拥塞避免:+1
网络拥塞的处理:
把慢开始门限ssthresh设置为出现拥塞时cwnd值的一半,然后把拥塞窗口cwnd重新设置为1,执行慢开始算法
(2) 快重传和快恢复
快恢复:把cwnd值设置为慢开始门限ssthresh改变后的数值