0%

计网总结(三):传输层

传输层

多路复用和多路分解

定义

  • 多路复用:从源主机不同套接字中收集数据块,并为每个数据块封装首部信息从而生成报文段,将报文段传递到网络层
  • 多路分解:将传输层报文段中的数据交付到正确的套接字
  • 指定要交付的套接字的字段:源端口号和目的端口号

Socket的共用

若两个UDP报文段有不同的源IP地址和源端口号,但有相同的IP地址和目的端口号,则通过相同的套接字定向到相同的目的进程;TCP中,两个有不同源IP地址或源端口号的TCP报文段会被定向到两个不同的套接字

TCP套接字由(源IP地址、源端口号、目的IP地址、目的端口号)来标识

UDP

无连接、不可靠

优点:

  • 应用层能更好地控制要发送的数据和发送时间
  • 无需建立连接
  • 无连接状态
  • 分组首部开销小

报文段结构

  • 首部:源端口号、目的端口号、长度、检验和
  • 应用数据

UDP检验和

发送方对报文段中所有16比特字的和进行反码运算,接收方一起相加,若无差错则和全为1

可靠传输

模型 p137 3-8

构造可靠数据传输协议

p137-144

  1. rdt1.0:完全可靠信道上的传输
  2. rdt2.0:加入差错检测、接收方反馈和重传 引入序号
  3. rdt3.0:有比特交替协议 倒计数定时器

流水线

p146 3-18

  • 必须增加序号范围
  • 协议的发送方和接收方必须缓存多个分组
解决流水线差错

回退N步(GBN,滑动窗口协议)p147

选择重传(SR)p150

选择重传中,每个分组必须拥有自己的逻辑定时器,接收方和发送方的窗口总是不一致

TCP

面向连接、可靠、全双工

首部长度字段指示32比特字为单位的TCP首部长度

报文段的序号是报文段首字节的字节流编号,故TCP传输的最大文件的大小:2^32

从开始建立连接到收到一次发送的数据的总时间:2RTT,三次握手+一次数据传输

三次握手

四次挥手

为什么TCP握手不是两次或四次

三次握手分别作用:

  • 第一次握手后,S可以确认自己收报文与C发报文的功能都正常,而C呢,它什么都不能确认。
  • 第二次握手后,C可以确认自己的收发报文与S的收发报文功能都正常,也就是认为连接已建立。
  • 那么第三次呢,S也可以确认双方能够正常通信。

两次:防止失效的连接请求报文段被服务端接收,从而产生错误

如果不进行第三次握手,所以在S对C的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果C并没有收到S的回应呢?此时,C仍认为连接未建立,S会对已建立的连接保存必要的资源,如果大量的这种情况,S会崩溃。

四次:冗余

Time-wait原因

  • 为了保证客户端发送的最后1个连接释放确认报文能到达服务器,从而使得服务器能正常释放连接
  • 防止上文提到的早已失效的连接请求报文出现在本连接中
    客户端发送了最后1个连接释放请求确认报文后,再经过2MSL时间,则可使本连接持续时间内所产生的所有报文段都从网络中消失,即在下1个新的连接中就不会出现早已失效的连接请求报文

流量控制和拥塞控制的目的

流量控制:消除发送方使接收方缓存溢出的可能性

拥塞控制:减少因为网络的拥塞而丢包的可能性

拥塞控制

TCP拥塞控制过程

  • 慢启动:cwnd = 1,每一个传输的报文确认后,cwnd+=1(速率指数增长)
  • 拥塞避免:加性增,每过一个RTT,cwnd+=1(速率线性增长)
  • 快速恢复:ssthresh = cwnd/2,cwnd = sstresh

TCP快速重传为什么是三次冗余ACK:

两次duplicated ACK时很可能是乱序造成的,三次duplicated ACK时很可能是丢包造成的,四次duplicated ACK更更更可能是丢包造成的,但是这样的响应策略太慢。