前言
要搞清楚运输层是干什么的,那么就必须先了解一下计算机网络体系结构。
应用层:
应用层是体系结构中的最高层。应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程就是指主机中正在运行的程序。对于不同的网络应用需要有不同的应用层协议。
运输层:
运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。所谓“通用的”,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
运输层主要使用以下两种协议:
- 传输控制协议TCP :-提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段。
- 用户数据报协议UDP:- 提供无连接 的、尽最大努力的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。.
网络层:
网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP 体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
数据链路层:
控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据结构的结构包,他不仅包含原始数据,还包含发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传达数据时,接收点检测到所传数据中有差错,那么就要采用可靠传输协议来纠正出现的差错。
物理层:
在物理层上传输的数据单位是比特,就是将以上传下来的数据转化成光电信号’0‘ ’1‘ 通过光缆等发送出去。
提示:以下是本篇文章正文内容,下面案例可供参考
一、运输层的功能
首先两个主机进行通信实际上就是两个主机中的应用进程互相通信。 应用进程之间的通信又称为端到端的通信。 运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务
运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。运输层还要对收到的报文进行差错检测。
二、运输层的两个协议
1.两协议之间的比较
面向报文:
- 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
- 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。
- 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
- 应用程序必须选择合适大小的报文。
面向字节流:
TCP中的“流”指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
怎么理解字节流呢 我们举一个例子 先拿UDP来看 画一个图方便理解。
那么看一下TCP
TCP是要连接的: 就好像两个人打电话一样,必须要建立一个连接,这边拨通,那边回复接通了,只有在这个基础上才能实现数据的通信。
UDP不需连接: 就好比发送电子邮件一样,你只管发送,至于有没有收到则不负责。
TCP可靠,UDP不可靠:
由于TCP要保证所有的数据包都可以到达,所以,需要有重传机制(快重传,快恢复,超时重传),UDP不会进行重传。
- 数据报传输中途丢失
- 接收端的ACK确认报文在传输中途丢失
- 接收端异常未响应ACK或被接收端丢弃
TCP重传机制:
- 超时重传机制;
- 快速重传机制;
- SACK 方法;
- Duplicate SACK – 重复收到数据的问题
TCP有序,UDP无序:
UDP:消息在传输过程中可能会乱序,因为他只是将应用层传下来的数据加一个头部就交给网络层了,所以不可靠,就有可能造成先发的数据后到达,后发的数据先到达。UDP不会给数据一个重新排序,只要服务端接受到了数据就直接递交给了应用层了。
TCP:会对其进行重排序,如果数据够大,发送端不能一次将数据发送过去,就会将数据拆分,并且给每一个数据段给予一个序号,然后加上头部打包发送,而接收端会将接受到的数据重新排序之后,在给应用层递交上去。
2.两协议之间的共同点
1. TCP和UDP都是在网络层,都是传输层协议,都能都是保护网络层的传输,双方的通信都需要开放端口
2.传输通信:两个协议是进程间通信,也就是说应用间的通信,那么如何在众多程序中找到自己的目的应用呢?在传输层,使用端口号来识别同一台计算机中进行通信的不同应用程序。
我们一般发送数据根据 源IP地址 源端口 目的IP地址 目的端口来进行识别一个通信,但是有一种情况就是IP地址和端口号都一样,只是使用的传输协议不一样,怎么进行区分?数据到达IP层(网络层)之后,会先检查IP头部的协议号,然后再传给相应协议的模块。
所以TCP/IP或UDP/IP通信中通常使用5个信息来识别一个通信,也叫五元组: 源IP地址 源端口 目的IP地址 目的端口 协议。
说到这里了解一下:
IP地址:
- 作用:在网络当中唯一标识一台主机,
- 本质: ipv4版本的ip地址就是一个无符号的32位的整数。uint32, _t, 推测出来范围是0~42亿+ ;通常是使用点分十进制的方式来表示IP地址,对于用".分隔的数字,每一个数字占用1个字节。
- 在网络当中,每一条数据都是需要有两个IP地址的 源IP地址:标识数据从那台主机来 目的IP地址:标识数据去往哪个主机
- 4.ipv6版本的ip地址,弥补ipv4版本的ip地址不够用的问题; 16位的整数,0~2^128 ipv6天生是不兼容ipv4版本的
端口port:
- 作用:在主机当中标识-一个进程
- 本质: uint16. t端口的范围是0-65535。0~1023是知名端口
- 在网络当中,每- -条数据都是需要有两个port的. 源端口:这条数据从哪一个进程来 目的端口:这条数据到哪一个进程去
总结
这一篇我们了解了运输层的作用以及功能,以及运输层两个协议的区别以及相同点。下一篇我们在深入一下UDP传输的实现以及校验和机制。如有错误 欢迎指正 感谢您的观看!!!
转载:https://blog.csdn.net/qq_45615577/article/details/117260949