传输层提供的服务
1、传输层的功能
2、传输层寻址与端口
3、无连接服务与面向连接服务
用户数据报协议 UDP
UDP的 主要特点:
-
面向无连接的
,发送数据前不需要建立连接,因此减小了开销和发送数据之前的时延。 -
尽最大努力交付
,不保证可靠的交付,因此主机不需要维持复杂的连接状态。 -
面向报文的
,对于发送来说,直接在应用程序交付的报文前边加一个首部(保留这些报文的边界)就向下交给ip层。对于接受方来说,ip层交上来的UDP用户数据报,去除首部后就原封不动的交付给上层的应用程序,因此应用程序必须选择合适的大小的报文,(报文太大,IP层传输时会进行分片,降低了ip层的传输效率。报文太小,ip层的首部长度相对太长,也降低了ip层的传输效率。)。 -
没有拥塞控制
,网络出现拥塞不会使源主机的发送速率降低。 -
支持一对一、一对多、多对一、多对多的交互通信
。 -
首部的开销小
,只有8个字节,比TCP的20个字节要短。
2.UDP校验
传输控制协议TCP
TCP的 主要特点:
-
面向连接的
:应用程序使用TCP前,需先建立连接。传输数据结束后,需释放已经建立的TCP连接。 -
提供可靠的交付服务
:通过TCP连接传输的数据,无差错、无丢失、不重复,并且能按序到达。 -
面向字节流
:应用程序和TCP之间的交互是一次一个数据块(大小不等),TCP仅仅把其看成无结构的字节流。TCP不保证接收方应用程序收到的数据块和发送方应用程序发送的数据块有对应的大小关系。 -
提供全双工通信
:TCP连接的两端都设有发送缓存和接受缓存。对于发送方,应用程序将数据发送给TCP的缓存后,就可以干其他事了,TCP在合适的时候再将其发送出去。对于接受方把接受的数据存到TCP的缓存中,应用程序再合适的时候读取。 -
TCP连接只能是点对点的
。
1、TCP段
TCP运输连接管理
主动发起连接的应用进程叫做客户
(A),被动等待连接建立的应用进程叫做服务器
(B)。
-
TCP的连接建立:
-
B的TCP服务器进程先创建传输控制模块,准备接受客户进程的连接请求,LISTEN状态。 A的TCP客户进程也创建传输控制模块。若打算建立TCP连接时,向B发送连接请求报文段(首部的同位段SYN=1,同时选择一个初始序列号seq = x)。
SYN报文段不能携带数据,带需要消耗一个序列号
,A进入SYN_SENT状态。 -
B收到请求后,若同意建立连接,则向A发送确认,在确认报文段中把(SYN=1,ACK=1,ack=x+1,选择一个初始的序列号seq=y),
这个报文段也不能携带数据,需要消耗一个序列号
,B进入SYN_RCVD -
A收到B的确认后,还要向B发送确认报文段(SYN=1,ACK=1,ack=y+1,seq=x+1),
ACK报文段可以携带数据,但若不携带数据则不消耗序列号
,TCP连接建立。A进入ESTABLISHED,B收到确认后进入ESTABLISHED状态。
-
-
TCP的连接释放 :
-
A, B 都处于ESTABLISHD 状态, A 的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接(A把释放报文段首部的终止控制位FIN=1,seq=u,它等于前边已传送的数据的最后一个字节的序号加1),A进入FIN-WAIT-1.
FIN报文段即使不携带数据,它也消耗掉一个序号
。 -
B收到连接释放的报文段后就发出确认,确认号ack=u+1,自己的序号seq= v,它等于B前边已传送过的数据的最后一个字节的序号加1,B进入CLOSE-WAIT.
这时的TCP连接处于半关闭状态
,即A没有数据要发送,B若发送数据,A仍要接受。A收到B的确认后,进入FIN-WAIT-2,等待B发出的连接释放的报文段。 -
若B没有要向A发送的数据,其应用进程就通知TCP释放连接。B的连接释放报文段(FIN=1,B的序列号seq= w,它在半关闭过程中可能又发送了一些数据,原来的v就可能发生了一些改变,ack=u+1),B进入LAST-ACK
-
A收到B的连接释放报文段后,必须对此发出确认报文段(ACK=1,确认号,ack=w+1,自己的序号seq=u+1),进入TIME-WAIT,经过
2MSL
后进入CLOSED状态。B结束连接的时间要比A早
。
-
3、TCP可靠传输
4、TCP流量控制与拥塞控制