作者:Cyndi_lidi_816 | 来源:互联网 | 2023-10-11 15:45
运输层运输层协议概述:从IP层来说,通信的俩端是俩个主机,IP数据报的首部明确的标志了俩个主机的IP地址,但严格来说两个主机之间的通信是指两个主机的进程进
运输层
运输层协议概述:
从IP层来说,通信的俩端是俩个主机,IP数据报的首部明确的标志了俩个主机的IP地址,但严格来说两个主机之间的通信是指两个主机的进程进行数据的交换。
IP协议虽然把分组送到了目的主机,但是这个分组还停留在网络层,并没有交付给主机的进程。
从运输层来说,通信的真正端点是主机的进程,即端到端的通信是应用进程的之间的通信。
网络层和运输层的通信区别:
网络层是提供主机之间的逻辑通信,而运输层是提供进程之间的通信,如下图所示:
运输层的两种协议:TCP、UDP
TCP:一条全双工的可靠的信道,面向连接
UDP:一条不可靠的信道,无连接
UDP:传送数据之前不需要先建立连接,远程主机在接收到UDP报文后,也不需要给出任何确认。
TCP:传送数据之前必须要先建立连接,数据传送结束后要释放连接,TCP不提供广播和多播服务。
端口引入的原因:
在因特网中,用计算机的进程标识符来标志进程是不够的,因为操作系统的不同具备的进程标识符的格式不一样,把进程指明为因特网上通信的最后终点也是不行的,进程是动态创建和撤销的,运输层使用的协议端口号就能很好的解决这一问题。虽然需要通信的是应用进程,但是只要把报文送到目的主机的端口就行,剩下的交由TCP协议来处理。
协议的功能都在协议报文的首部中
UDP报文的首部格式:
源端口和目的端口:
对方回信要用到;终点交付报文的时候要用到
长度:
UDP用户数据报的长度,最小值是8字节(仅有首部)
校验和:
检测UDP用户数据报在传输中是否有错,有错就丢弃
UDP端口:
当运输层从IP层收到UDP数据报时,根据首部中的目的端口,将UDP用户数据报通过目的端口交付给进程。
若接收方UDP发现收到的报文中的目的端口号不正确,丢弃报文,并用ICMP发送“端口不可达“差错报文给发送方。
UDP校验和:(TCP校验和计算和UDP一样,而IP数据报校验和只检验IP数据报的首部)
计算校验和时,需要在UDP用户数据报前面加上12个字节的伪首部。伪首部:仅仅是为了计算出校验和而临时添加的。
UDP校验和:首部和数据部分都要一起检验。
下图是UDP校验和的计算原理:
UDP接收方解码:
把收到的UDP用户数据报和伪首部,进行二进制反码求这些16bit的和,若结果全为1,表示结果无差错
图5-7中的伪首部和首部可以对照前面的图5-5
TCP报文的首部格式:要掌握TCP的工作原理必须掌握TCP首部各字段的作用
源端口和目的端口:
各占2个字节,TCP的分用也是通过端口实现的
序号:
4个字节,从0开始编序,序号编号到最后一个,下一个序号又回到0。
TCP连接中传送的字节流中的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。
首部的序号值,是指本报文段所发送的第一个字节的序号。如:一报文段的序号字段值是301,共100字节,则最后一个字节序号是400,那么下一报文段的序号值是401.
确认号:
4个字节,期待收到下一个报文段第一个字节的序号,即上例中,确认号就是401.
注意:若确认号 = N,则表示到序号N-1的所有数据都正确收到。
数据偏移:因首部中还有长度不确定的选项字段,故数据偏移字段是必要的
4个位,范围最大值是15,而数据偏移的单位是4字节,则此字段是用来表TCP首部的长度的,最大长度是4*15,60字节,即选项长度不超过40字节.
保留:
6个位,保留为今后使用,目前为0
紧急URG(URGent):
当URG=1,表示紧急指针字段有效。告诉系统此报文段中有紧急数据,即高优先级的数据,应当尽快传送,而不是按原来的排队顺序传送。
例:若发送给远程主机的一个程序,发现有问题,需要取消程序的运行,用户按下中断命令Control+C,若不使用紧急数据,那么这两个字符就会存储在TCP的缓存末尾,这样就浪费很多时间.
当URG=1,发送进程就告诉TCP有紧急数据需传送,TCP就会将紧急数据插入到本报文段的最前面,这需要和首部中的紧急指针字段配合使用.
确认ACK(ACKnowlegment):
当ACK=1,确认号字段才有效,当ACK=0,无效。但TCP规定,在连接建立后所有传送的报文段都必须把ACK置1.
推送PSH(PuSH):
当两个进程通信时,有时一端的进程希望键入一个命令后,能立即收到对方的响应,这时TCP就可以将PSH=1,并立即创建一个报文段发送出去,接收方TCP收到PSH=1,就会尽快交付给接收端进程,而不会再等整个缓存填满后再交付。
复位RST:
当RST=1,表示TCP连接出现严重错误,必须释放连接,再重新建立连接。RST置1可以用来拒绝一个非法的报文段。
(10)同步SYN:
在建立连接时用来同步序号,当SYN=1&&ACK=0,表示这是一个请求连接的报文段,若对方同意建立连接,则SYN=1&&ACK=1。故SYN=1:表示一个连接请求和连接接收报文。
(11)终止FIN:
释放一个连接,当FIN=1,表示报文段发送完毕,并要求释放连接。
(12)窗口:我告诉你我的窗口值的目的是要你知道我一次性能接收多大的数据量。
2个字节,从0开始,窗口指的是发送本报文段的这一方的接收窗口(而不是自己的发送窗口),窗口值告诉对方:从本报文段首部的确认号开始算起,接收方目前允许(窗口值是经常动态变化的)对发送方发送的数据量。
(13)检验和:
2个字节,检验首部和数据部分,和UDP一样,计算检验和时,需要在TCP的报文段前面加上12字节的伪首部,伪首部格式也与UDP的伪首部一样,把UDP伪首部的第4个字段的17改为6,把第5个字段UDP长度改为TCP长度。接收时,也仍然要加上伪首部来计算校验和,若使用IPv6,则相应的伪首部要改变。
(14)紧急指针:
2个字节,当URG=1,紧急指针才有意义,指出本报文段中的紧急数据的字节数。
注意:当窗口值为0,也可以发送紧急数据。
(15)选项:
最长为40字节,当没有选项时,TCP首部长度为20字节。
TCP首部中的MSS字段的作用:MSS只是TCP协议分组数据部分的最大长度
首先运输层的传输效率都是受IP层分片的长度影响,运输层的协议分组应当尽量接近分片的长度,但不能超过分片长度。这时候就由MSS字段值来告诉收发双方,对方能够支持什么样的长度,双方都在MSS字段写入各自支持的合适长度,然后双方都按照对方的MSS值来设定协议分组的长度。
这样就可以尽可能的高效率的利用信道,例如:AàB,MSS=600;BàA,MSS=700.若主机没有填写MSS字段,其默认值是536字节,也就是TCP的最小报文长度都是536+20=556字节,这是因特网上所有主机都应该能接受的报文段长度。