计算机网络学习--传输层

第一章 概述
第二章 物理层
第三章 数据链路层
第四章 网络层
第五章 传输层
第六章 应用层

第五章 传输层

5.1、传输层协议概述

运输层向它上面的应用层提供通信服务它属于面向通信部分的最高层,同时也是用户功能中的最低层

为应用进程之间提供端到端的逻辑通信

TCP/IP 的传输层有两个不同的协议:

(1) 用户数据报协议 UDP (User Datagram Protocol)

  • TCP报文段

  • 不可靠

(2) 传输控制协议 TCP (Transmission Control Protocol)

  • TCP报文用户数据报
  • 可靠
  • 不提供广播或多播服务

三类端口

  • 熟知端口,数值一般为 0~1023。

  • 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。

  • 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

5.2、用户数据报协议 UDP

UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能

特点:

  1. UDP 是无连接的,即发送数据之前不需要建立连接。

  2. UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

  3. UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。

  4. UDP 支持一对一、一对多、多对一和多对多的交互通信。

  5. UDP 的首部开销小,只有 8 个字节

5.3、传输控制协议 TCP

数据帧格式

  • 确认 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
  • 紧急 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  • 复位 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  • 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
  • 终止 FIN (FINis) —— 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

特点

  1. TCP 是面向连接的运输层协议。

  2. 每一条 TCP 连接只能是点对点。

  3. TCP 提供可靠交付的服务。

  4. TCP 提供全双工通信。

  5. 面向字节流。

注意:

  • 在发送完一个分组后,必须暂时保留已发送的分组的副本。

  • 分组和确认分组都必须进行编号。

  • 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。

通过ARQ(Automatic Repeat reQuest)协议实现自动重传

TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口

采用累积确认,即为确认当前分组的同时表明到这个分组为止的所有分组都已正确收到了

如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次

套接字 socket = (IP地址: 端口号)

每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定

5.4、TCP三次握手(重点)

  1. 发送连接请求和一些参数,申请开始连接

  2. 收到连接请求,发送自身一些参数

  3. 收到B服务器的连接确认之后,再次向B服务器发送确认请求,确认后才算连接建立成功

    为什么明明两次可以商量明白却还需要第三次

    一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

5.5、四次挥手

为什么客户端最后还要等待2MSL?

MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。

第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

猜你喜欢

转载自www.cnblogs.com/shimeath/p/13403647.html