传输层的核心任务:应用进程之间提供端到端的逻辑通信服务。
主机具有OSI七层模型;网络核心中的路由器、交换机、集线器等只用到OSI七层模型的下三层功能
传输层功能:(分复流拥寻差错-可靠;吩咐刘墉寻差错-可靠)
传输层寻址与端口:
端口号:传输层端口号为16位整数,可以编号65536个(2的16次方)
传输层端口号:
无连接服务与面向连接服务:
多路复用:在源主机,传输层协议从不同的套接字收集应用进程发送的数 据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层。
多路分解:在目的主机,传输层协议读取报文段中的字段,标识出接收套接字,进而通过该套接字,将传输层的报文段中的数据交付给正确的套接字。
多路复用与多路分解(复用与分解/复用与分用):支持众多应用进程共用同 一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程
无连接的多路复用与多路分解:
面向连接的多路复用与多路分解
不可靠传输信道在数据传输中可能发生的问题:
基于不可靠信道实现可靠数据传输采取的措施:
TCP要采取适当的措施,保证可靠数据传输;
自动重传请求协议(ARQ):为了实现可靠数据传输,接收方通过使用肯定确认ACK 与否定确认NAK,可以 让发送方知道哪些内容已被正确接收,哪些内容未被正确接收而需要重传。基 于这种重传机制的可靠数据传输协议称为自动重传请求协议协议;停-等协议是其最简单的一个方式
停-等协议的工作流程
停-等协议:性能差、信道利用率低;使用流水线协议可以改善
流水线协议:管道协议。允许发送方在没有收到确认前,连续发送多个分组。 最典型的流水线协议:滑动窗口协议
1、增加分组序号。
2、发送方和接收方可以缓存多个分组。
发送方的发送窗口(Ws ):发送方可以发送未被确认分组的最大数量;
接收方的接收窗口(Wr ):接收方可以缓存的正确到达的分组的最大数量;
滑动窗口协议,根据窗口的大小,可以具体分为:
============GBN协议================
发送端缓存能力高,可以在没有得到确认前发送多个分组。 接收端缓存能力很低,只能接收1个按序到达的分组,不能缓存未按序到达的分组
GBN协议:发送窗口WS≥1 ,接收窗口Wr =1。
GBN发送方响应的3类事件:
例如:发送发,发送1,2,3,4,5;接收方收到1,2,5;显然3,4没有收到确认,所以3,4,5要重新发送
==============SR协议===============
发送端缓存能力高。 接收端缓存能力高;
SR协议: 发送窗口WS>1,接收窗口Wr>1。
SR发送方响应事件:
例如:发送方,发送1,2,3,;接收方接受1,3 ;显然2发送方没有收到接收方的ack,所以发送方重新发送2;
用户数据协议(User Datagram Protocol,UDP):Internet传输层协议,提供无连接、不可靠、数据报尽力传输服务。
UDP的特点:
UDP数据报首部:UDP首部四个字段,每个字段长度都是2个字节,共8个字节
应用数据字段:应用层数据占用
UDP校验和:提供差错检测功能;UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的 数据是否发生了改变
UDP校验和计算规则:
UDP伪首部:源IP地址、目的IP地址、协议号:对应 封装UDP数据报的IP分组的字段。 UDP协议号:17
UDP校验和的步骤:
传输控制协议(Transmission Control Protocol ,TCP):Internet传输层协议。提供面向连接、可靠、有序、字节流 传输服务。
最大报文段长度(Maximum Segment Size , MSS):报文段中封装的应用层数据的最大长度。
TCP报文段首部结构:TCP段的首部长度最短是20字节 (首部报文长度=固定首部长度(20) + 可选项)
1、源端口号字段,目的端口号字段:占16位。复用和分解上层应用的数据。
2、序号字段、确认序号字段:占32位。 序号字段:TCP的序号是对每个应用层数据的每个字节进行编号; 确认序号字段:期望从对方接收数据的字节序号,即该序号对应的字节尚未收到;
3、首部长度字段:占4位。指出TCP段的首部长度,以4字节为计算单位。
4、保留字段:占6位。保留为今后使用,目前值为0。
5、URG、ACK、PSH、RST、SYN、FIN各占1位,为标志位字段,取值为0或1;
6、接收窗口字段:占16位。向对方通告我方接收窗口的大小。
7、校验和字段:占16位。 计算方法与UDP校验和的计算方法相同。TCP协议号是6。
8、紧急指针字段:占16位。 URG=1时,才有效。指出在本TCP报文段中紧急数据共有多少个字节
9、选项字段长度可变,最短为0字节,最长为40字节
10、填充字段,取值全为0,目的是为了整个首部长度是4字节的整倍数
TCP连接管理:连接建立与连接拆除。
第一次握手:客户向服务器发送连接请求段:(SYN=1,seq=x) SYN=1:建立连接请求控制段; seq=x:表示传输的报文段的第1个数据字节的序列号是x,此序列号代表整个报文段的序号; 客户端进入SYN_SEND(同步发送状态)
第二次握手:服务器相应确认报文段:(SYN=1,ACK=1,seq=y, ack_seq=x+1) SYN=1:同意建立新连接的确认段;ack_seq=x+1:表示已经收到了序列号为x的报文段,准备接收序列号为x+1的报文段; seq=y:服务器告诉客户确认报文段的序列号是y;服务器由LISTEN进入SYN_RCVD(同步收到状态)
第三次握手:客户对服务器的同意连接报文段进行确认:(ACK=1,seq=x+1,ack_seq=y+1); seq=x+1:客户此次的报文段的序列号是x+1; ack_seq=y+1:客户期望接收服务器序列号为y+1的报文段; 当客户发送ACK时,客户端进入ESTABLISHED状态;当服务收到ACK后,也迚入ESTABLISHED状态; 第三次握手可携带数据
为什么需要三次握手?
TCP连接拆除:四次挥手
第一次挥手: 客户向服务器发送释放连接报文段:(FIN=1,seq=u) FIN=1:发送端数据发送完毕,请求释放连接;seq=u:传输的第一个数据字节的序号是u; 客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)
第二次挥手:服务器向客户发送确认段:(ACK=1,seq=v,ack_seq=u+1);ACK=1:确认字号段有效; ack_seq=u+1:服务器期望接收客户数据序号为u+1;seq=v:服务器传输的数据序号是v; 服务器状态由ESTABLISHED迚入CLOSE_WAIT(关闭等待);客户端收到ACK段后,由FIN_WAIT_1迚入FIN_WAIT_2
第三次挥手: 服务器向客户发送释放连接报文段:(FIN=1,ACK=1,seq=v+1,ack_seq=u+1); FIN=1:请求释放连接;ACK=1:确认字号段有效;ack_seq=u+1:表示服务器期望接收客户数据序号为u+1;seq=v+1:表示自己传输的第一个数据字节的序号是v+1;服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)
第四次挥手: 客户向服务器収送确认段:(ACK=1,seq=u+1,ack_seq=w+1);ACK=1:确认字号段有效;ack_seq=v+1+1:表示客户期望接收服务器数据序号为v+1+1; seq=u+1:表示客户传输的数据的序号是u+1;客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态; 服务器在收到最后一次ACK后,由LAST_ACK进入CLOSED
TCP可靠数据传输:
可靠:保证接收方应用进程从缓冲区读出的字节流与发送方发出的字节流是完全一样的
TCP实现可靠数据传输服务的工作机制
1、应用层数据被分割成TCP认为最适合发送的数据块(最大报文段长度(Maximum Segment Size , MSS): 报文段中封装的应用层数据的最大长度)
2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方。(序号:一个字节占用一个序号。序号字段指的就是一个报文段第一个字节的序号)
3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据。 TCP采取累计确认。
4、查错检测,利用差错编码实现数据包传输过程中的比特查错检测(甚至纠正)。
5、重传,发送方重新发送接收方没有正确接收的数据(快速重传: TCP发送方接收到对相同序号的3次重复ACK,就说明被重复确认的报文段已丢失,这时候即便没有超时,也会重发该报文段)
6、计时器,在发送方引入计时器,解决数据丢失问题(计时器超时时间设置:TimeoutInerval=EstimatedRTT+4×DevRTT; EstimatedRTT:抽样RTT的加权移动平均值。 DevRTT:偏差RTT)
TCP生成ACK的策略:
原文:https://www.cnblogs.com/jalja365/p/12445533.html