可以快速了解TCP,以及TCP与UDP的区别。

一、什么是TCP?

TCP是面向连接的可靠的基于字节流的传输层通信协议。

二、什么是TCP连接?

首先思考一下什么是连接?
RFC 793中这样来定义连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket,序列号,和窗口大小称为连接。
1、Socket:由IP地址和端口号组成。
2、序列号:用于解决乱序问题。
3、窗口大小:用来做流量控制。
所以我们可以知道,建立一个连接是需要客户端和服务端达成以上这三个信息的共识。

三、如何唯一确定一个TCP连接?

TCP四元组可以唯一的确定一个连接,四元组包括如下:

  • 源地址
  • 源端口
  • 目的地址
  • 目的端口

源地址和目的地址的字段(32位)是在IP头部中,作用是通过IP协议发送报文给目的主机。
源端口号和目的端口号的字段(16位)是在TCP头部中,作用是告诉TCP协议,应该把报文发送给哪个进程。

为什么需要TCP协议,TCP工作在哪一层?

  • IP层是不可靠的,它不保证网络包的交付,不保证网络包的按序交付,也不保证网络包中的数据完整性。
  • 如果需要保证网络数据包的可靠性,就需要由上层(传输层)的TCP协议来负责。
    何为可靠传输?我老师是这么讲的,保证发送过程无差错不重复不丢失不失序
    可靠交付呢就是说发送方发送什么,接收方就接收到什么

TCP和UDP的区别

首先瞧一瞧UDP的头部格式:
可以快速了解TCP,以及TCP与UDP的区别。_第1张图片
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。这个协议非常简单,头部只有8个字节(64位)。

  • 目标和源端口号:告诉UDP协议应该把报文发送给哪个进程。
  • 包长度:保存了UDP首部长度和数据的长度之和。
  • 校验和:为了提供可靠的UDP首部和数据而设计。

TCP的头部格式从此去

TCP和UDP的区别 TCP UDP
连接 TCP是面向连接的传输层协议传输数据前先要建立连接 UDP不需要连接,即刻传输数据。
服务对象 TCP是一对一的两点服务,即一条连接只有两个端点。 UDP支持一对一,多对多,一对多的交互通信 。
可靠性 TCP是可靠交付数据的,数据可以无差错,不丢失,不重复,不失序 UDP是尽最大努力交付的,不保证可靠交付数据。
拥塞控制,流量控制 TCP有拥塞控制和流量控制机制,保证数据传输的安全性 。 UDP则没有,即使网络部分拥堵了,也不会影响到UDP的发送速率。
首部开销 TCP的首部长度较长,会有一定的开销,首部没有使用选项字段是20字节,如果使用则会变长。 UDP首部只有8个字节,并且固定不变,开销较小 。
传输方式 TCP是流式传输,没有边界,保证数据的顺序和可靠。 UDP是一个包一个包的发送,是有边界的,可能会丢包和乱序。
分片不同 TCP数据如果大于MSS大小,就会在传输层分片,接收方在传输层组装分片。如果中途丢失分片只需要传输丢失的分片 UDP的数据如果大于MTU大小,则会在IP层进行分片,接收方在IP层组装数据,如果中途丢失分片,就需要重传所有分片(保证可靠传输的话),一般UDP报文应该小于MTU

TCP和UDP的应用场景
TCP是面向连接的,能保证数据的可靠性交付,因此常用于:

  • FTP文件传输
  • HTTP / HTTPS

由于UDP是尽最大可能交付的,它可以随时发送数据,再加上UDP本身的既简单又高效,因此常用于:

  • 包总量较少的通信,如DNS、SNMP等。
  • 视频,音频等多媒体通信。
  • 广播通信

为什么TCP有首部长度字段,而UDP头部没有呢?

  • 原因是TCP有可变长的选项字段,而UDP的头部长度是固定的。无需多一个字段去记录。

为什么UDP头部有包长度字段,而TCP头部则没有?

  • TCP数据长度 = IP总长度 - IP首部长度 - TCP首部长度。
  • ip首部长度和ip总长度,在IP首部格式是已知的。
  • 但是UDP基于IP层的话,也可以这么计算,这样看的话包长度这个字段冗余了。
  • 为了网络设备硬件设计和处理方便,首部长度必须是4字节的整数倍,去过去掉就不是了。

TCP的三次握手和四次挥手
看完TCP传输这么可靠之后是不是特别好奇TCP连接到底是怎么建立的,到这里看看吧:一篇彻底搞懂TCP的三次握手和四次挥手

阅读小林coding图解网络时做的笔记。

你可能感兴趣的:(计算机网络,网络,tcp)