参考链接: 传输层协议(TCP, UDP) https://www.jianshu.com/p/a6f9c6e67324 计算机网络传输层知识点全覆盖https://blog.csdn.net/u010425776/article/details/55006347?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159396155819195188438781%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159396155819195188438781&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v4-3-55006347.first_rank_ecpm_v3_pc_rank_v4&utm_term=%E4%BC%A0%E8%BE%93%E5%B1%82
传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)
在现实世界中,传输层承担了将子网的技术、设计和各种缺陷与上层隔离的关键作用。通过一组原语就可以访问此服务(允许建立、使用和释放连接)。套接字提供了一个通用的传输层接口。
在OSI七层参考模型中,传输层是面向通信的最高层,也是用户功能的最底层。 传输层两大重要的功能:复用 和 分用。
复用:在发送端,多个应用进程公用一个传输层。分用:在接收端,传输层会根据端口号将数据分派给不同的应用进程。和网络层的区别:
网络层为不同主机提供通信服务,而传输层为不同主机的不同应用提供通信服务。网络层只对报文头部进行差错检测,而传输层对整个报文进行差错检测。传输层提供端到端的连接(会话之间,即软件之间的通讯),网络层提供点到点的连接(节点之间,即网络节点)。为了清楚通信的双方使用的进程(软件),所以传输层使用协议端口号(通常简称为端口)用来识别终点。在协议栈层间的抽象的协议端口就是软件端口,和硬件端口不同,硬件端口常称为设备接口。软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。
在TCP/IP中,传输层使用16位(比特)来标识一个端口,所以可用的端口号有65535个端口号,但是端口只在本地有效,即QQ在你的电脑上使用的是80端口,在别人的电脑上可能使用的是8000端口。
服务器使用的端口号: 一种是系统端口号, 数值为0 ~ 1023。另一种是登记端口号,数值为1024 ~ 49151,这种端口号必须在IANA按照规定的手续登记后才能使用。维基百科:https://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8
客户端使用的端口号(短暂端口号): 数值为49152 ~ 65535. 这种端口号在客户进程运行时才会动态选择,通信结束后,该端口号就关闭,供其他的进程使用。
注:
端口是根据需求自行更改的可以通过更改端口可以让非信任用户访问不到应用如FTP的端口默认为21,修改端口为9999,让非信任用户访问不到FTP服务器UDP只在IP数据报服务的基础上增加了少量的功能:复用与分用、对整个报文的差错检测。
UDP是无连接的
通信前不需要建立连接,通信结束也无需释放连接。这样可以减少开销和发送数据之前的延时。UDP是不可靠的
它是尽力而为交付(发送方定义发多少内容就发多少内容,如电视机每秒发送30张图片,不管用户能不能接收完数据,都一直这样发送),不能确保每一个数据报都送达。UDP是面向报文的
所谓『面向报文』就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。UDP没有拥塞控制
UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。UDP支持一对一、一对多、多对多、多对一通信
如语音通话是一对一;电视的播放是一对多;多人视频通话是多对多;客户端对服务器端的UDP通讯是一对多。而TCP只支持一对一通信。UDP首部开销小,只有8字节。而TCP头部至少由20字节,相比于TCP要高效很多。
UDP报文头
源端口: 自己设备的端口。16位比特 目的端口: 接收方设备的端口。16位比特 长度:整个数据报的长度。16位比特 检验和:整个数据报的检验和。检验数据包在传输中是否有错。16位比特 数据:应用层要发送的数据。
TCP是面向连接的传输层协议
通信前需要建立连接,通信结束需要释放连接。类似于打电话,通话前要请求通话,挂断时发送结束信息。TCP的链接是点对点的链接,每一条TCP连接只有两个端点。
TCP提供可靠交付服务
所谓 可靠 指的是:TCP发送的数据无差错、无丢失、无重复、并且按顺序到达。这是比UDP可靠的原因所在。TCP提供全双工通信
允许通信双方的应用进程在任何时候都能发送数据。TCP链接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。TCP的两端既可以作为发送端,也可以作为接收端。TCP是面向字节流的
所谓面向字节流指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。流 是指 流入到进程或者从进程流出的字节序列。(有点蒙。。。)TCP连接
TCP连接是一种抽象的概念,表示通信双方数据流动的一个“线路”。每条TCP连接有且仅有两个端点(通信的双方)。且双发在任意时刻都可以作为发送者和接收者。套接字
一条TCP连接的两端(端点)就是两个套接字。套接字 = IP地址:端口号。TCP连接=(套接字1,套接字2)=(IP1:端口号1,IP2:端口号2)源端口
表示发送方(本机)发送数据的端口,一共16比特,可以表示65535个端口。目的端口
表示接收方(目标)接收数据的端口,一共16比特,可以表示65535个端口。序号
因为TCP连接需要对数据重组排序等等,所以对数据的每一个字节都进行了编号,使得数据可以排序下去。确认号
确定下一个数据的序号,表示发送方下一个要发的数据及接收方要接收的数据是什么。