网络层,数据链路层与物理层实现了网络中主机之间的数据通信,计算机网络的本质活动是实现分布在不同地理位置的主机之间的进程通信,以实现应用层的各种网络服务功能。
1. 传输层的功能
传输层的主要功能是实现分布式进程之间的通信。利用网络层提供的服务,在源主机的应用进程与目的主机的应用进程建立“端—端”连接。
传输层之间传输的报文称为“传输协议数据单元(TPDU)”,TPDU有效载荷称为应用层的数据。
2. 端口号的基本概念
(1)网络中,端口号(Port)标识了一个主机上进行通信的不同的应用程序。
(2)IP地址+端口号标识主机上唯一的进程。
(3)端口号的数值范围在0~65535;其中0~1023表示熟知端口号,1024~49151表示注册端口号,49152~65535表示临时端口号。
(4)熟知端口号列表可以在http://www.iana.org中查询。也可以输入命令cat etc/services查看。
(5)UDP常用熟知端口号
(6)TCP常用熟知端口号
3. 协议识别
网络中的两台主机要实现进程通信,他们必须事先约定好传输层的协议类型。
在windows操作系统中,网络环境中的唯一一个进程用三元组标识:
在UNIX操作系统中,网络环境中的唯一一个进程用五元组标识:
注:一个进程可以绑定多个端口号;一个端口号只能绑定一个进程。
补充两个命令的使用:
(1)netstat是一个用来查看网络状态的重要工具。
(2)pidof命令查看服务器的进程id
4. UDP协议
UDP协议的特点
(1)UDP 协议是一种无连接 的,不可靠的传输协议。
(2)UDP协议是一种面向报文的传输层协议。
UDP缓冲区
(1)UDP没有真正意义上的发送缓冲区,调用sendto直接将数据交给内核,由内核将数据交给网络层进行后续的传输动作。
(2)UDP具有接收缓冲区,但是这个接收缓冲区不能保证数据的正确性,如果缓冲区满了,再到达的UDP数据就会丢弃。
UDP报头
(1)端口号
端口号字段包括源端口号和目的端口号,通过端口号确认将数据交给哪一个应用进程。
长度字段的长度是16位,它包括UDP报头和用户数据的总长度。用户数据报的最大长度为65535字节,最小是8字节(只有报头),UDP报文的数据最大长度为65527个字节。
(3)校验和
UDP的校验和不是必须有的,是可选的。
基于UDP的应用层协议
5. TCP协议
TCP协议的特点
(1)面向连接
(2)面向字符流
字符流就像是一个管道,从一端放入什么内容,从另一端就可以取出同样的内容,它描述了一个不出现丢失,重复和乱序的数据传输过程。
(3)可靠的
TCP协议使用确认机制检查数据是否安全和完整的到达,在发送数据丢失时,有重传机制并且提供拥塞控制功能。
TCP协议报文格式
(1)端口号
包括源端口号和目的端口号,通过端口号将数据报交给应用进程。
(2)序号
序号的范围在0~4284967295.
TCP是面向字节流的,它要为发送字节流中的每个字节进行编号。
(3)确认序号
确认号表示一个进程已经正确接收序号为N的字节,要求发送端下一个要发送的序号为N+1的字节的报文。
(4)报头长度
报头长度的长度为4位。TCP报头长度是以4字节为一个单元来计算的,TCP报头的固定长度为5个单元,选项为10个单元,所以这个字段的值在5~15之间;实际报头长度是在20~60字节。
(5)控制字段
控制字段用于TCP的连接建立和终止,流量控制,以及数据传送过程。
紧急(URG)位
将UGR置1,表示该报文的优先级高,需要插到报文的最前面,需要尽快发送。URG位一般与紧急指针字段配合使用。
确认(ACK)位
在确认报文传输正确或者同意对方请求时,ACK置1.
推送(PSH)位
在两个进程交互时,一端应用进程希望在输入一个命令之后,能够立即得到对方响应。
复位(RST)位
RST置1有两种含义:一是因主机崩溃等原因造成TCP连接出错,需要立即释放连接,然后重新建立连接。
二是拒绝一个非法TCP报文或拒绝释放一个连接。
同步(SYN)位
SYN常用于建立连接时来同步序号。
终止(FIN)位
FIN=1表示请求释放连接。
(6)窗口大小
窗口大小指接收端的接收缓冲区的大小,最大长度在0~65535字节,用来通知发送端下一次最多发送的报文的字节数。
窗口字段的值是动态变化的。
(7)选项
选项字段最多可以有10个单元,即40个字节。单字节选项包括选项结束和无操作;多字节选项包括最大报文段长度,窗口扩大因子及时间戳。
(8)校验和
TCP的校验和是必须有的,保证数据的可靠性。
TCP建立连接与释放连接
TCP的可靠性
(1)确认应答机制
(2)超时重传机制
(3)流量控制
接收端处理数据的速度是有限的,如果发送端发的太快,导致接收端的缓冲区被传满,这个时候如果继续发送,就会造成丢包,就需要重传机制启动。
因此TCP支持根据接收端的接收能力,来决定发送端的发送速度,这个机制就是流量控制(FLow Control)。
流量控制实现的原理
1.接收端将自己可以接收的缓冲区大小放入TCP首部的“窗口大小”字段,通过ACK通知发送端。
2.窗口字段值越大,说明网络的吞吐量越高。
3.接收端一旦发现自己的缓冲区快满了,将“窗口大小”设置成一个较小的值。
(4)拥塞控制
网络上有很多的计算机,可能当前的网络状态已经比较拥堵,在不清楚当前网络状态下,贸然发送大量的数据,很有可能丢失大量的报文。
拥塞控制方法
慢开始算法
将第一个往返的拥塞窗口设置为0,然后呈2的指数增长;
引入阈值ssthresh,当指数增长至阈值时,再利用线性增长,直至出现传输超时。
在出现传输超时时,将拥塞窗口将为1,再重新重复上述过程,但是此时的阈值为上次超时拥塞窗口的一半。