//图片取自王道,仅做交流学习
一、传输层提供的服务
物理层、数据链路层、网络层是通信子网。
传输层:它属于面向通信部分的最高层,同时也是用户功能的最低层
为应用层提供通信服务使用网络层的服务
网络层提供主机之间的逻辑通信。
1、传输层的功能:
1.传输层提供进程和进程之间的逻辑通信(即端到端通信)。网络层提供的主机到主机之间的通信
2.复用和分用
复用:发送方不同的应用进程都可以使用同一个传输层协议传输数据;
分用:接收方的传输层在剥去报文的首部之后能正确的把这些数据交付到目的进程。
3.传输层对收到的报文进行差错检测
4.传输层的两种协议
面向连接的TCP 和无连接的UDP。
面向连接的传输控制协议TCP
尽管下面的网络是不可靠的(只提供最大努力的服务),但是这种逻辑信道就相当于一条全双工的可靠信道。
传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。可靠,面向连接,时延大,适用于大文件。
无连接的用户数据报协议UDP
传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
不可靠,无连接,时延小,适用于小文件。
逻辑信道不可靠。
2、传输层的寻址与端口
端口
能让应用层各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文中的数据向上通过端口交付给应用层的进程。
它 是传输层的SAP,它在传输层的作用类似于IP地址在网络层,MAC地址在数据链路层的作用。只不过IP地址和MAC地址标识主机,而端口标识的是主机中的应用进程。
端口是传输层的SAP(服务访问点 Service Access Point)
端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。
端口号长度为16bit (2个字节),能表示65536个不同的端口号。
登记端口,比如Tomcat 8080, Mysql:3306, redis 6379,RabbitMQ 5672
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。
套接字socket= (主机IP地址,端口号)
3、无连接服务与面向连接服务
面向连接的服务就是在通信双方进行通信之前,必须先建立连接,整个连接的情况一直被实时监控和管理。通信结束之后,应该释放这个链接。
无服务链接是指两个实体之间的通信不需要先建立好连接,需要通信的时,直接将信号发送到"网络”中,让该信息的传递在网上尽力而为的往目的地传送。
TCP是面向连接的,向上提供了一条逻辑上全双工的可靠的信道,适合可靠性要求较高的场景,如FTP,HTTP,TELNET。TCP 提供确认、流量控制、计时器及连接管理等,开销较大。
UDP是无连接的非可靠传输协议,简单,速度快,实时性好。适合小文件传输 TFTP,DNS,SNMP和实时传输协议RTP都是基于DNS。
二、UDP
1、UDP数据报
UDP只在IP数据报服务之上增加了很少功能:复用分用 和 差错检测功能。
UDP的主要特点:
1.UDP是无连接的,减少开销和发送数据之前的时延。
2.UDP使用最大努力交付,即不保证可靠交付。
3.UDP是面向报文的,适合一次性传输少量数据的网络应用。
4、UDP无拥塞控制,适合很多实时应用。
5.UDP首部开销小,8B,TCP 20B。
6、UDP支持一对一,一对多,多对一,多对多的交互通信。
应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文。
UDP报文格式
UDP报文=UDP首部 + 用户数据。
UDP首部4个字段,共8个字节,每个字节的长度都是2B。
1)源端口。源端口号。在需要对方回信时选用,不需要时可用全 0。
2) 目的端口。目的端口号。这在终点交付报文时必须使用到。
3)长度。UDP 数据报的长度(包括首部和数据),其最小值是 8(仅有首部)。
4)校验和。检测 UDP 数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机
不想计算校验和时,则直接令该字段为全 0。
伪首部只有在计算检验和时才出现,不向下传送也不向上递交
17:封装UDP报文的IP数据报首部协议字段是17。
UDP长度:UDP首部8B + 数据部分长度(不包括伪首部)。
当传输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口上交给应用进程,如图。
如果接收方 UDP 发现收到的报文中的目的端口号不正确 (即不存在对应于端口号的应用进程),那么就丢弃该报文,并由 ICMP 发送“端口不可达”差错报文给发送方。
2、UDP校验
//待详细补充
二、TCP
UDP的报文长度由发送应用进程决定,而TCP的报文长度由接收方给出的窗口值和当前网络拥塞成都决定的。
1、协议特点
1.TCP是面向连接(虚连接) 的传输层协议。打call
2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
3.TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重
4.TCP提供全双工通信。
发送缓存 准备发送的数据&已发送但尚未收到确认的数据
接收缓存 按序到达但尚未被接受应用程序读取的数据&不按序到达的数据
5.TCP面向字节流 (流:流入到进程或从进程流出的字节序列。)
TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流
2、TCP报文段
TCP的数据单元称为 报文段,TCP报文段既可以运载数据,也可以建立连接、释放连接、应答。(根据控制字内容来决定)
TCP报文 = 首部 + 数据部分
整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。
其首部前20B是固定的,TCP首部 最短为20B,后面有4N个字节是根据需要增加的选项,长度为4B的整数倍。
即:
TCP头 =固定20B + N*4B选项。
UDP头 =8B
TCP首部格式
1)源端口和目的端口,各站2B。端口是传输层与应用层的服务接口,传输层的复用和分用都需要通过端口来实现。
2)序号: 占4B,范围 0 ~(2^32 )-1 在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。(TCP是面向字节流的)
3) 确认号: 4B 期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。
4) 数据偏移(首部长度): TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。 由于数据偏移 占4bit,而4个bit位所能表示的最大数字是15,所以首部长度最大为 15*4B =60B
5)保留 6位。
6)6个控制位
紧急位URG: URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1。
推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。
同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文。
终止位FIN: FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
7)窗口:占2B 范围0~2^16 -1,它指出现在允许对方发送的数据量,接收方数据缓存空间是有限的,因此窗口值作为接收方让发送方设置其发送窗口的一句。(大哥你慢点)
8)校验和。占2B。校验和字段检验的范围包括首部和数据两部分。在计算校验和时和UDP一样,要在TCP报文段前面加上12B的伪首部(只需要将UDP伪首部协议字段的17 改为 6,UDP长度字段改为TCP长度字段,其他和UDP一样)
9) 选项: 长度可变 TCP最初只规定一种选项, 即最大报文段长度(MSS)。MSS 是TCP报文段中的数据字段的最大长度(注意是数据字段)。
10)填充: 为了使得整个首部长度是4B的倍数