文章目录
传输层
传输层 : 关注的是点对点之间的传输,只需要关注发送者和接收者就可以了,中间的传输过程,一概不管。(类似于黑盒测试)
比如:你要从北京去上海,我只关注你的起点是上海,终点是北京,不关心你驾车去,火车去,还是飞机去)
1. 传输层包含两大协议(TCP和UDP):
1.1 UDP协议
1.1.1 首先介绍一下UDP:
UDP 是一个比较简单的协议,具体简单在哪里呢?我们来看一下UDP的几个特点:
UDP的传输过程类似与寄信。
- 无连接:知道对端的IP和端口号就直接进行传输,不需要进行连接。
- 不可靠:没有确认机制,没有重传机制;如果因为网络故障,该段无法发送到对方,UDP层协议也不会给应用层返回任何错误的信息;
- 面向数据报 :不能够灵活的控制读写数据的次数和数量;
应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;
用UDP传输100个字节的数据:
如果发送端调用一次sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom,接收100个字节;而不能循环调用10次recvfrom,每次接收10个字节;
1.1.2 UDP协议端格式:
UDP使用注意事项:
这就限制了应用层协议的数据长度,那数据长度超出了UDP的表示范围,就会出现问题。
我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(16*4)(包含UDP首部).
当应用数据较长并且想要用UDP,怎么办?
可以在应用层通过代码把应用数据拆分成多个数据包,再使用多个UDP数据包来分别发送,并在接收端手动拼装。(代价是代码实现的成本大大提高了 )
1.1.3 分别介绍一下UDP协议报头的四个部分:
-
源端口号:数据发送一方(可以是客户端或服务器端)将UDP数据包通过源端口发送出去。
-
目的端口号:接收数据
-
UDP端口号:因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。
UDP端口号指定有两种方式:由管理机构指定端口和动态绑定的方式。
端口号传输层的概念,作用就是区分这个数据要交给哪个程序来处理。 -
UDP校验和:UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中受到损坏(被第三方篡改或者线路噪音等原因 ),发送方和接收方的校验计算值将不会相符&#x