计算机网络(二)运输层
5.运输层
(1)运输层的基本概念
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能
在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。 这表明运输层有一个很重要的功能——复用 (multiplexing)和分用 (demultiplexing)
(2)端口的概念
从IP层来说,通信的两端是两台主机。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。端到端的通信是应用进程之间的通信。
也就是说:运输层主要是处理进程之间的通信的,而端口就代表了进程。
-
端口用一个 16 位端口号进行标志。
-
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
(3)UDP
UDP特性:
-
提供无连接服务。
-
在传送数据之前不需要先建立连接。
-
传送的数据单位协议是 UDP 报文或用户数据报。
-
对方的运输层在收到 UDP 报文后,不需要给出任何确认。
-
虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式,如广播。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。
-
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短
(4)TCP
面向字节流
-
TCP 中的“流”(stream)指的是流入或流出进程的字节序列。
-
“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
-
接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
-
提供面向连接的服务。
-
传送的数据单位协议是 TCP 报文段 (segment)。
-
TCP 不提供广播或多播服务。
-
由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
值得注意的点:
-
TCP 连接是一条虚连接而不是一条真正的物理连接。
-
TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
-
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)
--1、套接字
在TCP中,面向的既不是IP,又不是端口,它面向的是套接字。
TCP 连接的端点叫做套接字 (socket) 或插口。
-
端口号拼接到 (contatenated with) IP 地址即构成了套接字。
-
套接字 socket=(ip地址:端口)
--2、TCP三次握手协议
-
TCP 建立连接的过程叫做握手。
-
握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。
-
采用三报文握手主要是
过程:
-
A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
-
B 的 TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack = x+1,自己选择的序号 seq = y。
-
A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。A 的 TCP 通知上层应用进程,连接已经建立。
-
B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立
--3、TCP四次挥手协议
过程:
-
-
B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。从 A 到 B 这个方向的连接就释放了,TCP 连接,处于半关闭状态。B 若发送数据,A 仍要接收。
-
若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。
-
A 收到连接释放报文段后,必须发出确认。
-
在确认报文段中 ACK = 1,确认号 ack = w + 1,自己的序号 seq = u + 1
-
第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。
-
第二,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。