1. 传输层的作用

  • TCP常用来提供可靠的通信
  • UDP常用于广播和细节控制
  • 为了能够准确的将IP包发送到应用程序中,使用端口号进行区别

TCP和UDP的区别

  • TCP用于需要在传输层提供可靠传输的情况
  • UDP用于高速传输或者实时性要求比较高的情况,如IP电话、基于多播或广播的协议–DHCP
  • TCP应该根据应用的目的,按需应用

2. 端口号

  • 用来识别同一台计算机不同的应用程序,并准确的将数据传输

  • 仅凭端口号还无法识别一个通信,例如在web浏览器打开的网页,端口都是80
  • 一般采用源IP地址目标IP地址协议号源端口号目标端口号定义一个通信

标准既定的端口号

  • 属于广为人知的固定的端口号,例如HTTP、FTP、SSH

时序分配法(动态)

  • 客户端不需要确定端口号,即可交给操作系统自动分配

端口号和协议

  • 不同的协议可以使用相同的端口号,只需要根据IP包头部的协议区别即可

3. UDP

  • UDP不提供复杂的控制机制,利用IP提供面向无连接的服务
  • 将从应用程序收到的数据直接发送到网络
  • 当网络出现拥堵,也无法进行拥塞控制;数据丢失,不负责重发;数据乱掉,也不负责纠正

UDP的应用

  • 包总量比较少的情况(DNS、SNMP)
  • 视频、音频等(即时通讯
  • 限定于LAN(局域网)等特定网络的通信
  • 广播多播

4. TCP(重点)

4.1 TCP的特点

  • 使通过IP协议实现可靠传输
  • 具有检验和序列号确认应答重发控制连接管理窗口控制

4.2 通过序列号与确认应答提高可靠性

  • 当发送端数据到达目标主机时,接收端会发送一个确认收到的消息,叫做确认应答(ACK)
  • 如果有确认应答,说明数据成功到达目标主机,反之,则可能出现数据丢失
  • 未收到确认应答也可能对方已经收到,但是确认应答丢失
  • 也可能会因为一些原因导致确认应答延迟到达
  • 对于目标主机可能因为重发机制而不断的收到相同的数据
  • 序列号的作用就是标记同一个数据包
  • 接收端可以根据序列号确认是否收到重复数据,发送端根据序列号和确认应答号确认哪个数据已经被成功接收

4.3 重发超时如果确定

  • 重发超时是指重发数据之前,等待确认应答的时间
  • 不同的网络环境时间应该不同。如在LAN中,这个时间相对较短.
  • TCP在每次发包时都会计算往返时间及其偏差。重发时间则为往返时间偏差的总和稍大一些的值。
  • 数据被重发后,重发的超时时长会以指数形式增长
  • 数据不会无限重发

4.4 连接管理

三次握手

- 客户端–发送带有SYN(请求建立连接)标志的数据包--------一次握手–服务端

  • 服务端–发送带有 SYN/ACK 标志的数据包-----二次握手–客户端
  • 客户端–发送带有带有 ACK 标志的数据包------三次握手–服务端

总结:

  • <mark>第一次握手,服务端确认自己接收正常,客户端发送正常;客户端什么都不能确认</mark>、

  • 第二次握手,服务端确认自己接收正常,客户端发送正常;<mark>客户端确认自己发送正常,接收正常,服务端发送正常,接收正常</mark>

  • 第三次握手,<mark>服务端确认自己发送正常,客户端接收正常</mark>,自己接收正常,客户端发送正常;客户端确认自己发送正常,接收正常,服务端发送正常,接收正常

  • 三次握手保证客户端和服务端都能确认自己和对方接收发送正常,保证可靠的连接

  • 两次发送SYN,代表发送端到接收端的通道正常

  • 两次ACK,代表服务端到接收端通道正常

  • 在三次握手后,会计算出一个MSS,即最大消息长度

四次挥手

  • 客户端-发送一个 FIN(请求断开连接),用来关闭客户端到服务器的数据传送
  • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
  • 服务器-关闭与客户端的连接,发送一个FIN给客户端
  • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

4.5 窗口控制与重发机制

  • 使用滑动窗口并行发送数据,可以提高网络的效率
  • 窗口大小是并行发送的数据包的数目
  • 使用了大量缓冲区保存已经发送的数据包

窗口控制的的重发机制比超时重传更高效,被称作“高速重发机制”。

  • 发送端会等待自己应该收到的序列号,当收到后,会发送一个确认应答。如果这个确认应答丢失,也可以根据下一个的确认应答序列号知道是否接收端收到数据

  • 如果数据丢失,接收端收不到自己想要接收的数据,就会连续的发送该序列号的确认应答。发送端不断的收到重复的确认应答,则知道数据丢失,重发该序列号的数据

4.6 流量控制

  • 发送端可以根据自己情况发送数据,但是接受端可能正在忙于处理其他的事情,导致无法接受数据,出现网络浪费。
  • 流控制可以让发送端根据接收端的情况发送数据

4.7 拥塞控制

  • 当网络出现拥堵时,突然发送一个较大的数据包,则可能造成网络瘫痪
  • TCP会利用慢启动的算法,控制刚开始发送的数据量
  • 在刚开始慢启动的时候,定义一个拥塞窗口,每当发送一次数据包接收到ACK时,拥塞窗口加一,并和发送端的接受端的流量控制大小进行比较,确认一个最小的窗口大小。

4.8 提高网络利用率的规范

Nagle算法

  • 当发送端剩余没有发送的数据很少时,会启动延时发送(Windows等系统会关闭该算法)

延时确认应答

  • 收到数据并不立即发送应答
  • 即使少发一些确认应答,也不会造成重发。(一般两个数据段发送一个确认应答)

5. 其他传输层协议

UDP-Lite

  • UDP的扩展。
  • 有些数据可以接受破坏而不用丢失,所以可以让应用自由的设置需要检验的部分数据

DCCP

  • 辅助UDP进行拥塞控制
  • 面向连接