文章目录
- 一个主机可以有很多个进程,像QQ是一个进程,Wechat是一个进程。所有的通信是两个主机之间的通信,实际上是两个进程之间的通信。
- 从计算机网络的五层结构可以看出,传输层为应用层提供服务,但同时使用网络层的服务。只有主机有传输层,核心部分像路由器等只有下面的三层。
传输层概述
传输层的功能
- 传输层提供进程间的逻辑通信。(网络层提供主机间的逻辑通信。)
- 复用和分用。复用指的是不同的应用进程可以使用同一个传输层协议进行传输,分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付给应用进程。
- 对收到的报文进行差错检测。
端口(逻辑端口)
-
将所传输的数据报交付给目的主机的某个合适的目的端口,再由TCP/UDP协议交付给目的主机的进程。
-
端口号的长度为16bit。所以可以允许有65535个不同的端口号。(因为:2^16次方是65536,端口0被保留,所以为65535个)
-
套接字(Socket) = (主机的IP地址,端口号)
根据主机的IP地址可以找到主机,根据端口号可以找到主机中的具体进程。 -
端口号的分类
-
常用的熟知端口号如下
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
传输层的两种协议
面向连接的传输控制协议TCP
是面向连接的、可靠、时延大、适合于大文件。传输单位为报文段。
无连接的用户数据报协议 UDP
传输数据之前不需要建立连接、不可靠、时延小、适合于小文件。传输单位为用户数据报。
传输控制协议TCP
特点:
- 面向连接,使用TCP协议之前,需要先建立连接(是虚连接),在数据传送完毕后,释放已经建立的传输层连接。
- 每一条TCP连接必须是点对点的。无法应用于广播/多播的通信方式。
- TCP连接提供可靠交付的服务。通过TCP传送的数据无差错、不丢失、不重复并且按序到达。
- TCP可以提供全双工通信。TCP连接的两端都设有发送缓存和接收缓存。发送缓存中存储的是准备发送的数据和发送但还没有收到确认的数据。接收缓存中存储的是按序到达但还未被应用程序读取的数据和未按序到达的数据。
- 面向字节流。(TCP把应用程序交下来的数据看成是一连串的无结构的字节流)
TCP报文段的首部格式
- TCP报文段分为首部和数据部分,全部功能都体现在首部中的各字段。
- TCP报文段的首部格式图
- 首先有20字节的固定首部,后面有4n字节是根据需要而增加的选项。
下面分别说明各个字段的含义
- 源端口和目的端口:分别为2个字节,分别写入源端口号和目的端口号。
- 序号:为4个字节32位,所以共有2^32次方个序号,因为TCP是面向字节流的,所以对传输的每一个字节都要按照顺序进行编号。本字段表示本报文段发送数据的第一个字节的序号。
- 确认号:为4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表示到序号N-1为止的所有数据都已正确接收到。
- 数据偏移:占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处的距离。实际指出TCP报文段首部的长度。 数据偏移的最大长度为60字节。
- 保留:占6个位,目前全部置为0,保留为今后使用。
- 紧急URG:当URG=1的时候,表示紧急字段有效,告诉系统此报文段中有紧急数据,应尽快传送,与首部中的紧急指针字段配合使用。
- 确认ACK:当ACK=1时,确认号字段才有效。否则确认号字段无效。
- 推送PSH:当PSH=1时,接收方尽快交付接收应用进程,而不用等到缓存填满再进行交付。该操作很少使用。
- 复位RST:当RST=1时,表明TCP连接中出现严重差错必须释放连接,然后重新建立连接。
- 同步位SYN: 当SYN=1时,表明是一个连接请求/连接接受报文。
- 终止FIN:当FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
- 窗口:占2个字节,指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量.
- 检验和:检验数据部分和首部字段.检验时需要加上12字节的伪首部.
- 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数.
用户数据报协议UDP
UDP只在IP数据报服务之上添加了复用分用和差错检测功能。
特点:
- UDP是无连接的,减少开销和发送数据之前的时延。
- UDP使用最大努力交付,即不保证可靠交付。
- UDP是面向报文的,适合一次性传输少量数据的网络应用。(面向报文是指应用层给UDP多长的报文,UDP就照样发送,即一次发送一个完整的报文)
- UDP无拥塞控制,适合很多的实时应用。
- UDP首部开销小,为8个字节。
UDP报文段的首部格式
16位的源端口号可有可无,但一定要有目的端口号,16位的UDP长度包括首部和数据部分。
伪首部仅在计算校验和的时候出现.