传输层
核心功能:完成“端—端的数据传输
传输层协议常用两个UDP和TCP
UDP协议
特点:
1.UDP协议无连接:知道端的IP和端口号直接传输,不需要建立连接
2.UDP协议不可靠传输:没有确认机制,没有重传机制,如果出错,不会给应用层返回任何错误信息
3.UDP协议面向数据报:不能灵活的控制数据的次数和数量,发送多少,接受多少
UDP协议段格式
16位端口号:范围:0—65535或-32768—32767
16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度,约64KB
检验和:如果数据出错,直接丢弃
UDP缓冲区
UDP没有发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议
UDP具有接收缓冲区,但不能保证收到UDP报的顺序是否和发送的一致,如果缓冲区满了,未到达的数据就会被丢弃
TCP协议
TCP(Transmission Control Protocol)传输控制协议,对数据传输要进行一个详细的控制
TCP协议段格式
源/目的端口号:表示数据从哪个进程来,到哪个进程去
4位TCP报头长度:表示TCP头部有多少个32位bit(有多少4个字节),TCP头部最大长度为15*4=60
6位标志位:
URG:紧急指针是否有效
ACK:确认号是否有效
PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
特点:
可连接:数据传输之前需要建立连接
可靠性:有重传机制,确认机制,收到数据会返回应用层信息
面向字节流:以bit(字节)的形式传输数据,可控制大小,数量
确认应答(ACK)机制
每一个ACK都带有确认序号,意思是收到哪些数据,下一次你是从那里开始发送数据(确认应答返回的编号)
超时重传机制
主机A发送数据到主机B,由于网络阻塞,数据丢包,就会重传
主机A在一定特定时间内没有收到主机B的确认应答,就会重传
由于ACK丢失引起的重传,那么主机B将会收到很多重复的数据,这时需要序列号去去重。
那么特定的时间间隔如何确定?
TCP为了保证无论在任何环境下都能比较高性能通信,因此会动态的计算这个最大超时时间
Linux中,超时以500ms为一个单位进行控制,每次判定超时的重发时间是500ms的整数倍
如果重发一次,仍然等不到应答,等待2500ms后在进行重传,如果还没有应答,等待4500ms后进行重传,以指数形式递增
累积到一定次数后,TCP会认为网络或端主机出现异常,强制关闭连接