传输层

一 传输层协议概述

1.进程之间的通信

(1)传输层的作用:从IP层来说,通信的两端是两台主机,从传输层的角度看,通信的真正端点并不是主机而是主机中的进程。
(2)传输层协议和网络层协议的主要区别
    IP协议:为主机之间提供逻辑通信
    TCP和UDP:为应用进程之间提供端到端的逻辑通信
(3)作用
传输层为相互通信的应用进程提供了逻辑通信
传输层还要对收到的报文进行差错检测
传输层提供面向连接和无连接的服务

2.两种不同的运输协议

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
TCP 传送的数据单位协议是 TCP 报文段(segment)。 UDP 传送的数据单位协议是 UDP 报文或用户数据报
(1)用户数据报协议 UDP (User Datagram Protocol):一个数据包就能完成任务,不需要分段,不需要建立会话,不需要流量控制,不可靠传输。  多播,广播
提供无连接服务。
在传送数据之前不需要先建立连接。
传送的数据单位协议是 UDP 报文或用户数据报。
对方的运输层在收到 UDP 报文后,不需要给出任何确认。
虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。

(2)传输控制协议 TCP (Transmission Control Protocol):需要把要传输的文件分段,客户端和服务器要保持一个会话,建立可靠的传输,流量控制,防止丢包等等的现象。
提供面向连接的服务。
传送的数据单位协议是 TCP 报文段 (segment)。
TCP 不提供广播或多播服务。
由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。


3.传输层的端口 

运行在计算机中的进程是用进程标识符来标志的。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志
(1)端口号:端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号没有联系。虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。
(2)软件端口与硬件端口
   两个不同的概念。
   在协议栈层间的抽象的协议端口是软件端口。
   路由器或交换机上的端口是硬件端口。
   硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。 
(3)三类端口
1)熟知端口(0~1023)
  FTP:21
  TELNET:23
  SMTP:25
  DNS:53
  HTTP:80
  HTTPS:443
  RDP:3389
2)登记端口号(1024~49151)RDP:3389
3)客户端口号(49152~65535)留给客户进程选择暂时使用
【由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。】
(4)常见的应用层协议使用的端口
  http =TCP + 80
  https = TCP + 443
  RDP = TCP + 3389
  ftp = TCP + 21
  共享文件 = TCP + 445
  SMTP =TCP + 25
  POP3 =TCP + 110
  telnet = TCP + 23
  SQL = TCP + 1433
  DNS = UDP + 53
(5)服务和应用层协议之间的关系
   1)服务使用 TCP 或 UDP 的端口侦听客户端的请求
   2)客户端使用IP地址定位服务器,使用目标端口定位服务
   3)可以在服务器网卡上设置必要的端口,实现服务器网络安全
(6)补充
查看会话: netstat -n (-a,-an)
查看建立会话的进程: netstat -nb
测试远程计算机某个端口是否打开 talent XXXXX 3389
更改服务器使用默认端口,迷惑入侵者,使系统更加安全。

二 用户数据报协议 UDP

1.UDP 概述

UDP 只在 IP 的数据报服务之上增加了很少一点的功能:复用和分用的功能。差错检测的功能。
(1)UDP的主要特点
  是无连接的,即发送数据之前不需要建立连接
  使用最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
  是面向报文的,UDP没有拥塞控制,很适合多媒体通信的要求
  支持一对一,一对一多,多对一,多对多的交互通信
  首部开销小,只有8个字节

2.UDP 的首部格式

用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有 8 个字节。

伪首部:在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。

三 传输控制协议 TCP 概述

1.TCP 最主要的特点

TCP 是面向连接的运输层协议。
每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。 
TCP 提供可靠交付的服务。
TCP 提供全双工通信。
面向字节流(虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。)
(1)TCP 面向流的概念 
TCP 不关心应用进程一次把多长的报文发送到 TCP 缓存。
TCP 对连续的字节流进行分段,形成 TCP 报文段。

2.TCP 的连接

(1)概念
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。
端口号拼接到 (contatenated with) IP 地址即构成了套接字。   
(2)套接字 (socket)

四 可靠传输的工作原理

1.停止等待协议——可靠传输的工作原理

(1)概念
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
(2)解决出现差错的方法:超时重传。确认丢失。确认迟到。
停止等待协议的优点是简单,缺点是信道利用率太低。
(3)补充
自动重传请求 ARQ  (Automatic Repeat reQuest):意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组
在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发。
分组和确认分组都必须进行编号。
超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。 
(4)停止等待协议
(5)流水线传输
(1)概念
流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送。

2.连续 ARQ 协议

发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。ARQ表明重传的请求的自动的。接收方不需要请求发送方重传某个出错的分组

优点:容易实现,信道利用率高
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息

五 TCP 报文段的首部格式

1.概念

TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。
一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。
TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。

2.首部结构


1)源端口和目的端口字段:各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。  
2)序号字段:占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 
3)确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 
4)数据偏移(即首部长度):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。  
5)保留字段——占 6 位,保留为今后使用,但目前应置为 0。 
7)紧急 URG —— 当 URG  1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 
8)确认 ACK —— 只有当 ACK  1 时确认号字段才有效。当 ACK  0 时,确认号无效。 
9)推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。  
10)复位 RST (ReSeT) —— 当 RST  1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 
11)同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。 
12)终止 FIN (FINish) —— 用来释放一个连接。FIN  1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 
13)窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
14)检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
15)紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。  
16)选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 最佳的 MSS 是很难确定的。
17)填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。 

利用TCP建立会话可以进行攻击。

六 TCP 可靠传输的实现

1.以字节为单位的滑动窗口技术
2.超时重传时间的选择

  TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。    

3.选择确认 SACK 

  若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么可以只传送缺少的数据而不重传已经正确到达接收方的数据。

七 TCP 的流量控制

  就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
  利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制

八 TCP 的拥塞控制

1.概念

  在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞。
拥塞控制与流量控制的区别 
  拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。 
  流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收

2.出现拥塞的原因:

   ∑对资源需求  > 可用资源                 

3.拥塞控制的作用


4.TCP 的拥塞控制方法

(1)概念
  TCP 采用基于窗口的方法进行拥塞控制。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。所以,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
真正的发送窗口值 = Min(公告窗口值,拥塞窗口值)
(2)控制拥塞窗口的原则
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞
(3)拥塞的判断
1)重传定时器超时
  只要出现了超时,就可以猜想网络可能出现了拥塞。
2)收到三个相同(重复)的 ACK
  个别报文段会在网络中丢失,预示可能会出现拥塞(实际未发生拥塞),因此可以尽快采取控制措施,避免拥塞。
(4)TCP拥塞控制算法

1)慢开始 (slow-start)


2)拥塞避免 (congestion avoidance)
3)快重传 (fast retransmit)
4)快恢复 (fast recovery)

九 TCP 的运输连接管理

概念

  TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client),被动等待连接建立的应用进程叫做服务器(server)。

1. TCP 的连接建立

握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。

(1)A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
(2)B 的 TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack = x + 1,自己选择的序号 seq = y,A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。
(3)A 的 TCP 通知上层应用进程,连接已经建立。   
B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。


2. TCP 的连接释放

TCP 连接释放过程是四报文握手。

现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
(1)A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。
(2)B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
(3)若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。 
(4)A 收到连接释放报文段后,必须发出确认。 在确认报文段中 ACK = 1,确认号 ack = w + 1,自己的序号 seq = u + 1。 
TCP 连接必须经过时间 2MSL 后才真正释放掉。 

3. TCP 的有限状态机