《计算机网络》第6章 传输层

来源:互联网 发布:软件产品认证管理办法 编辑:程序博客网 时间:2024/05/05 14:15

1.传输层的主要功能

  • 传输层是整个协议栈(TCP/IP)的核心
  • 传输层的任务是提供可靠的、高效的数据传输
  • 在该层还需对字节流进行数据分段(块)和重组
  • 保证数据可靠传输和进行流量控制
  • 建立端到端的操作;
  • 从一端主机向另一端主机发送数据段
  • 传输层使整个报文到达了该计算机上正确的进程
  • 传输层的最终目标是向它的用户(应用层)提供高效、可靠和性价比高的服务

 

简单的传输层服务原语:


 

2.掌握传输层协议UDP和TCP

UDP

  • UDP 是一个无连接的(connectionless)的传输层协议
  • 提供端点标识,端到端的数据传输
  • 不提供差错检测和可靠传输。但简洁高效

端口(port)定义

16 位,共有 216个端口

端口范围:0~65535

  • <1023 : 用于公共应用(保留,全局分配,用于标准服务器),IANA分配;
  • 1024~49151 :用户端口,注册端口;
  • >49152 : 动态端口,私人端口。

TCP

传输控制协议

  • TCP (Transmission Control Protocol) 是专门为了在不可靠的互联网络上提供可靠的端到端字节流而设计的
  • TCP必须动态地适应不同的拓扑、带宽、延迟、分组大小和其它的参数,并且当有错误的时候,能够足够健壮

TCP服务模型:

  • 要想获得TCP服务,发送方和接收方必须创建一种称为套接字( sockets )的端点( end points)
  • 每个套接字是包含一个IP地址和一个16位的端口( port )
  • 通信进程的全球唯一标识
    • 三元组:协议、本地地址、本地端口号
    • 五元组:协议、本地地址、本地端口号、远端地址、远端端口号
  • 所有的 TCP 连接是全双工的(同时双向传输)和端到端的(每条连接只有两个端点)
  • TCP 不支持组播和广播
  • TCP连接是字节流而不是消息流

TCP数据段头:


源端口目的端口 字段标明了一个连接的两个端点

序列号 – 字节号 (32 位)

确认号 – 期望接收的字节号(32位)

TCP 段头长度 – TCP段头长度,单位32位

保留域/字段

PSH 表示这是带有PUSH标志的数据(接收方收到这样的数据,应该立刻送到上层,而不需要缓存它)

RST 被用来重置一个已经混乱的连接

SYN 用在连接建立的过程

当SYN=1,ACK=0, 连接请求

当SYN=1,ACK=1, 连接接受

FIN 被用来释放连接,它表示发送方已经没有数据要传输了,但是可以继续接收数据.

Windowsize – 告诉对方可以发送的数据字节数(从确认字节号开始(决定于接收方)

Checksum–提供额外的可靠性校验的范围包括头部、数据和概念性的伪头部


三次握手

  • 一方(server)被动地等待一个进来的连接请求
  • 另一方(the client)通过发送连接请求,设置一些参数
  • 服务器方回发确认应答
  • 应答到达请求方,请求方最后确认,连接建立


正常情况下,发送TCP端顺序如a所示

两主机同时企图在一对套接字之间建立连接,结果恰好只建立了一个连接,表项为(x,y)

SYN泛洪

恶意发送SYN段请求服务器的连接,但又故意不完成连接建立的后续服务,以此消耗一台主机的资源。

TCP 连接释放(四次挥手)

释放连接

  • 任何一方在没有数据要传送的时候,都可以发送一个FIN置位了的 TCP 数据段
  • 当FIN被确认的时候,该方向的连接被关闭
  • 当双向连接都关闭了的时候,连接释放

为了避免两军队(two-army)问题,使用定时器

  • 如果一方发送了FIN数据段出去却在一个设定的时间没有收到应答,释放连接
  • 另一方最终会注意到连接的对方已经不在了,超时后连接释放

半开放连接(half- open)

  • 发送者将放弃发送且释放连接,但是,另外一端却不知道这些情况,仍然处于活跃的状态
  • 杀死半开放连接的方式:如果在一定的时间内,没有TPDUs 到达的话,连接自动释放

TCP窗口管理


窗口尺寸受制于接受方

TCP 传输策略

发送方(Nagle’salgorithm)

  • 尽量不发送数据含量小的数据段
  • 缓存应用层的数据,达到一定量再发送

接收方(Clark’ssolution)

  • 不请求对方发送短数据段(window size)
  • 延迟窗口变更信息,使接收缓冲区足够大

TCP拥塞控制

分组守恒:当有一个老的分组离开之后才允许新的分组注入网络

TCP希望通过动态维护窗口大小来实现这个目标

拥塞检测Congestiondetection

所有的互联网TCP算法都假定超时是由拥塞引起的,并且通过监视超时的情况来判断是否出现问题

拥塞控制Congestionprevention

当一个连接建立的时候,双方选择一个合适的窗口大小,接收方根据自己的缓冲区大小来指定窗口的大小。

如果发送者遵守此窗口大小的限制,则接收端不会出现缓冲区溢出的问题,但可能由于网络内部的拥塞而发生问题


决定拥塞窗口大小的算法:

慢启动算法(Slow Start) (尝试的过程):

  • 当连接建立的时候,发送者用当前使用的最大数据段长度初始化拥塞窗口,然后发送一个最大的数据段
  • 如果在定时器超期之前收到确认,则将拥塞窗口翻倍,然后发送两个数据段。。。。。直至超时(或达到接收方窗口的大小)
  • 确定出拥塞窗口的大小

如:如果试图发送 4096 字节没有问题,但是发送8192字节的时候,超时没有收到应答,则拥塞窗口设为4096个字节


定时器的作用

最重要的定时器是重传定时器

持续定时器(persistence timer),用来避免如下的死锁( deadlock )发生

  • 接收方发送了一个窗口数为零的确认(窗口更新),告诉发送方等待
  • 稍后,接收方空出了缓冲,发送更新窗口的数据段,但是,很不幸,该分组丢失啦!
  • 现在,收发双方都在等待对方发送数据段过来,但永远等不到!死锁产生

保活定时器(keep-alive timer)用来检查连接是否存活,当一个连接空闲的时间超过保活定时器的时间,该连接将被杀掉

最后一个定时器是在关闭时刻处于TIMED WAIT 状态中使用的定时器,它运行两倍的最大分组生存时间,以确保连接关闭之后,该连接上的所有分组都完全消失


比较 TCP 和 UDP

TCP

  • 可靠传输方式
  • 可让应用程序简单化,程序员可以不必进行错误检查、修正等工作

UDP

  • 为了降低对计算机资源的需求,如DNS
  • 应用程序本身已提供数据完整性的检查机制,勿须依赖传输层的协议来保证
  • 应用程序传输的并非关键性的数据,如路由器周期性的路由信息交换
  • 一对多方式,必须使用UDP(TCP限于一对一的传送),如视频传播

 


应用举例:

    应用                         

应用层协议

运输层协议

名字转换                                  

DNS

UDP

文件传送                              

TFTP   

UDP

路由选择协议

RIP

UDP

IP地址配置

BOOTP,DHCP

UDP

网络管理

SNMP

UDP

远程文件服务器

NFS

UDP

IP电话

专用协议

UDP

流式多媒体通信

专用协议

UDP

多播

IGMP

UDP

电子邮件

SMTP

TCP

远程终端输入

TELNET

TCP

万维网

HTTP

TCP

文件传送

FTP

TCP

 

0 0