传输层是整个网络体系结构中的关键层次之一,传输层的作用:点到点之间的数据传输,不考虑传输的中间过程。
识别一个通信:源IP地址、目标IP地址、协议号、源端口号、目的端口号
1.传输层协议概述:
1.1进程之间的通信:
从通信和信息处理的角度看,传输层向它的上面的应用层提供通信服务,它属于面向通信部分的最高层,同时又是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器再转发分组时都只用到下三层的功能。
真正通信的实体是在主机中的进程,是这个主机中的一个进程和另一个主机中的一个进程在交换数据(即通信)。
IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付给主机中的应用进程。从传输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
传输层有一个很重要的功能——复用和分用。
复用:在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然还需加上适当的首部)
分用:指接收方的运输层在剥去报文的首部之后能够把这些数据正确交付到目的应用进程。
从上图可以看出:传输层提供应用进程间的逻辑通信。所谓“逻辑通信”:运输层之间的通信好像是沿水平方向传送数据。但实际上两个运输层之间并没有一条水平方向的物理连接。要传送的数据是沿着图中的两边的线传送的。
1.2.端口号
通过源IP地址,目标IP地址,协议号、源端口号、目标端口号识别一个通信。
端口号标识了一个主机上进行通信的不同的应用程序;进程的标识,把数据应该交给哪个进程处理。
协议号决定两个之间要使用传输层的哪一个协议。
端口号划分:
- 0-1023:知名端口号,HTTP,FTP,SSH这些端口号。
应用程序 | 端口号 | 所属协议 |
---|---|---|
FTP | 21 | TCP |
TELNET | 23 | TCP |
HTTP | 80 | TCP,超文本传送协议 |
HTTPS | 443 | TCP,超文本传送加密协议 |
SMTP | 25 | TCP |
DNS | 53 | UDP |
TFTP | 69 | UDP 、简答文件传送协议 |
SNMP | 162 | UDP 、网络管理 |
IGMP | 69 | 多播 |
NFS | 69 | UDP,网络文件系统 |
SSH(安全登录)、SCP(文件传输) | 默认的端口号为22/tcp | 端口号重定向 |
DHCP动态主机配置协议 | UDP67和UDP68, | 这两个端口是正常的DHCP服务端口,你可以理解为一个发送,一个接收。客户端向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。 |
- 1024-49151:登记端口号
- 49152-65535:短暂端口号,即客户端使用的端口号。
1.3.UDP协议:
- 1.3.1.UDP概述:
(1).UDP是无连接的
(2).UDP使用尽最大努力交付
(3).UDP是面向报文的(整发整收)。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这回降低IP层的效率,反之,若报文太短,UDP把它交给IP层后,会使IP层数据报的首部的相对长度太大,这也降低了IP层的效率。
(4).UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
(5).UDP支持1对1,1对多,多对1和多对多的交互通信。
(6).UDP的首部开销少,只有8个字节,比TCP的20个字节的首部要短。
虽然某些实时应用需要使用没有拥塞控制的UDP,担当很多的源主机同时向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都没办法接受。因此,不使用拥塞控制的UDP有可能会引起网络产生严重的拥塞问题。
(7).UDP是不可靠的:没有确认机制,重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。 - 1.3.2:UDP首部格式:
UDP有两个字段,数据字段和首部字段,首部字段只有8个字节,由4个字段组成,每个字段的长度都是两个字节。各字段意义如下:
(1).源端口:源端口号,在需要对方回信时选用,不需要时可用全0.
(2).目的端口:目的端口号。
(3).长度:UDP用户数据报的长度,其最小值是8(仅有首部)。
(4).检验和:检测UDP用户数据报在传输中是否有错,有错就丢掉。
当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交到最后的终点—应用程序。
如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由ICMP发送”端口不可达“差错报文给发送方。.
UDP用户数据报在计算检验和时,要在UDP用户数据报之前增加12个字节的伪首部。伪首部既不能向下传送也不向上递交。 - 1.3.3.UDP的缓冲区:
(1).UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输工作。
(2).UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致,如果缓冲区满了,再到达的UDP数据就会被丢弃。
UDP的socket既能读,也能写,这个概念叫做全双工。
1.4.TCP协议:
1.4.1:TCP的主要特点:
(1).TCP是面向连接的运输层协议。
(2).每一条TCP只能有两个端点,每一条TCP连接只能是点对点的。
(3).TCP提供可靠交付的服务,也就是说,通过TCP连接传送的数据,无查错,不丢失,不重复,并且按序到达。
(4).TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据。在发送时,应用程序把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据存入缓存,上层的应用进程再合适的时候读取缓存中的数据。
(5).面向字节流。TCP中的”流“指的是流入到进程或从进程流出的字节序列。
面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串的五结构的字节流。TCP并不知道所传送的数据块具有对应大小的关系。即是说:TCP的传送可以一字节传送,也可以多字节传送。
1.4.2.TCP协议段的格式:
- 源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号,TCP的分用功能也是通过端口实现的。
- 序号(seq):占4个字节,序号范围是【0,2^32-1】,共2^32个序号,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。
- 确认序号(ack):占4个字节,是期望受到对方下一个报文段的第一个数据字节的序号
序号与确认序号的作用:1.保证可靠性(可靠:只要经过确认,则对方一定收到,按序到达,具有重传机制)。2.具体到哪条报文在,哪条报文不在。3.保证效率提升。
4.保证数据的按序到达。5.去重效果。 - 首部长度:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,但其单位是32位字(即以4字长的字为单位)。由于4位二进制数能够表示的最大十进制数为15,因此数据偏移的最大值为60字节,这也是TCP的首部最大长度(即选项长度不能超过40字节)。
- 保留:占6位,保留为今后使用,但目前应置为0。
- 6位标志位:
a.URG:紧急指针是否有效,当URG=1时,表明紧急指针字段有效,发送应用进程就告诉发送方的TCP有紧急数据要传送,于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。
b.ACK:确认号是否有效,当ACK=1时,有效,=。TCP规定:在连接建立后所有传送的报文段都必须把ACK置1。
c.PUSH:提示接收端收到应用程序立刻从TCP缓冲区把数据读走。
d.RST(复位):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接,RST置1还可用来拒绝一个非法的报文段或拒绝打开一个连接。
e.SYN(同步):请求建立连接,当SYN=1而ACK=0时,表明这是一个连接请求的报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1.
f.FIN(终止):用来释放一个连接。当FIN=1时,表明报文段的发送方的数据已发送完毕,并要求释放运输连接。 - 16位窗口大小:指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。
伪首部图示如下: - 16位紧急指针:仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。因此紧急指针指出了紧急数据的末尾在报文段中的位置。即时窗口为0时也可发送紧急数据。
- 选项:长度可变,最大可达40字节,当没有使用选项时,TCP的首部长度时20字节。
TCP最初只规定了一种选项,即最大报文段长度MSS。MSS是每一个TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。