计算机网络-运输层
-
网络层与运输层的区别: 网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。 -
UDP:用户数据报协议。 1、特点 (1) 在传输数据前,不需要先建立连接; (2)不保证可靠交付; (3)面向报文。即应用层交给UDP的报文,不做任何修改,直接添加UDP的首部,交付给IP层。因此,应用层需要选择合适大小的报文。 (4)支持一对一、一对多、多对一和多对多的交互通信; (5)首部开销小,只有8个字节,小于TCP(20字节); 2、UDP组成:数据字段和首部字段,如下图所示。 (1)首部字段: 源端口:在需要对方回信时使用,不需要时可全选0; 目的端口:在终点交付报文时必须使用; 长度:最小值是8位 检验和:检验UDP用户数据报在传输中是否有错,有错则丢弃。 -
TCP:传输控制协议。 1、特点 (1)面向连接的运输层协议,在使用前,必须先建立连接;传输结束后要释放连接,类似于打电话,拨号(建立连接)与挂机(释放连接); (2)每一条TCP只能连接两个端点,只能是点对点的(一对一),就像打电话,一个手机号只能同时跟一个手机号通话; (3)提供可靠交付:传输的数据无差错、不丢失、不重复、并且按序到达; (4)全双工通信:通信双方在任何时候都能发送数据; (5)面向字节流:发送方应用程序交给发送方的TCP共10个数据块,可能接收方的TCP只用了4个数据块就把收到的字节流交付上层的应用程序。也就是TCP仅把应用程序交付的数据块看成字节流,不管发送方发送的数据块和接收方接收的数据块是否存在对应关系。 2、TCP的连接 TCP的端点:套接字/插口。端口号拼接到IP地址就构成了套接字,表示方法:点分十进制的IP地址后面写上端口号,中间用逗号或冒号隔开。eg:192.3.4.5:80,ip地址是192.3.4.5,端口号是80。每一条TCP连接唯一地被通信两端的两个套接字所确定。 3、TCP的连接建立 (1)连接建立的过程:握手。(三次握手) ACK:TCP首部的确认号,只有当ACK=1时,确认号字段才生效。 SYN:位于TCP首部,在连接建立时用来同步序号。SYN置1,表示这是一个连接请求或者连接接收报文。只有SYN=1,ACK=1时,表明对方同意建立连接。 如下图所示: 1)A向B发出请求报文段,SYN=1,初始序号seq=x,SYN报文段不携带数据,但要消耗一个序号。 2)B收到连接请求报文后,若同意建立连接,则向A发送确认。ACK=1,SYN=1,确认号是ack=x+1,序号seq=y。此时的报文段不携带数据,但要消耗一个序号。(tcp服务器进程进入SYN-RCVD即同步收到状态)。 3)A收到B的确认后,需要向B给出确认。ACK=1.确认号ack=y+1,序号seq=x+1。ACK可携带数据,不携带数据就不消耗序号,在这个前提下,下一个报文段的序号仍是x+1。此时TCP建立完成,A进入ESTABLISHED状态。 (发送确认的原因:防止已实效的连接报文段突然又传送到B,产生错误):a发送请求给b,由于请求报文丢失而未收到确认。于是又发送了一次,后来收到b的确认,建立了连接。假如,a发送的请求报文因为再某些网络结点长时间滞留了,以至于延误了一段时间到达b,b收到后就确认了,就一直等待a发送数据,但a不知道啊,就不理睬b。这样就导致b的资源被浪费了。 三次握手的过程:类似于两座山的山大王(a,b),相约攻打山下的官兵。需要相互之间进行确认,否则可能会被山下的官兵团灭。
四次握手 将第二次握手拆分成2个报文段,变成了四次握手,效果一样。拆分:先发送一个确认报文段(ACK=1,确认号ack=x+1),然后再发一个同步报文段(SYN=1,seq=y)。
4、四次挥手 FIN:终止,用于释放一个连接,FIN=1,表示发送方的数据已发送完毕,并要求释放运输连接。 MSL:最长报文段寿命。 1)a的应用程序向其TCP发出释放报文段,并停止再发送数据,主动关闭TCP连接。FIN=1,序号seq=u(u=u前面已传输过的数据的最后一个字节的序号+1),等待b的确认。a进入FIN-WAIT-1(终止等待1)状态;(FIN即使不携带数据也会消耗掉一个序号) 2)b收到连接释放报文后发出确认,确认号是ack=u+1,seq=v(v=v前面已传输过的数据的最后一个字节的序号+1),b进入CLOSE-WAIT(关闭等待)状态。此时TCP连接处于半关闭状态,TCP服务器应通知高层应用程序,a->b的连接已经释放,但b->a的连接还可以发送数据,a是要接收的。a收到b的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待b发出的连接释放报告文。 3)b向a发送释放连接报告文,FIN=1。假定b的序号是w(在半关闭状态可能发送了一些数据),b必须重复上次已经发送过的确认号ack=u+1,此时b浸入LAST-ACK(最后确认)状态,等待a的确认。b进入LAST-ACK状态。 4)a收到b的释放报文后发出确认,ACK=1,ack=w+1,seq=u+1(FIN报文段需要消耗序号)。然后a进入TIME-WAIT(时间等待)状态,现在的TCP连接还没有释放掉。必须等待时间等待计时器设置的时间2MSL后,a才进入CLOSED状态。b只要收到a的确认,就进入CLOSED状态,因此b结束TCP连接的时间要比a早一些。
注意:a在TIME-WAIT(时间等待)状态等待2MSL的原因: 1)保证a发送的最后一个ACK报文段能够到达b;ack报文段可能会丢失,使得处于LAST-ACK状态的b收不到a发送的FIN+ACK报文段的确认。b就会超时重传这儿FIN+ACK报文段,就需要a在2MSL时间段内收到FIN+ACK报文段。此时,a重传一次确认,并重新启动2MSL计时器。最后a、b都正常的进入CLOSED状态。 2)防止“已实效的连接请求报文段”重新出现在本连接中。a发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络消失。
|