文章目录
- 前言
- 一、运输层概述
- 二、运输层的端口与复用、分用的概念
- 三、UDP协议 和 TCP协议 对比
- 用户数据报协议 UDP💦(User Datagram Protocol)
- 传输控制协议 TCP💦(Transmission Control Protocol)
- 四、TCP协议
- 1、TCP的三次握手和四次挥手
- 2、TCP的流量控制(flow control)💦
- 3、TCP的拥塞控制💦
- 4、TCP的超时重传
- 5、TCP的可靠传输
- 本章思维导图
前言
站在巨人的肩膀上,让知识的获得更加容易!本文为学习计算机网络后,自顶向下的学习笔记;
- 学习视频来源: 计算机网络微课堂(有字幕无背景音乐版)
- 课件pdf来源:评论区up
bili_68567544
整理目录分享 - 思维导图来源:https://blog.csdn.net/weixin_45067603/article/details/107053479
- 参考文章:百度百科、知乎、掘金等文具体位置具体标注
课程相关资源(课件、PDF文档、网络仿真实验软件)稍后有时间整理分享链接到评论区自行下载(网盘或者上传csdn)
系列目录:
- 计算机网络笔记6 应用层
一、运输层概述
运输层为运行在不同主机上的应用进程提供直接的通信服务,向上层屏蔽下面的网络核心细节如(网络拓扑、路由器选择协议等),使应用进程仿佛是存在一条端到端的逻辑通信信道。
计算机网络体系中物理层、数据链路层、网络层共同实现了主机到主机之间的通信,但是真正在网络中进行通信的实体是位于通信主机中的进程,运输层就是为运行在不同主机上的应用进程提供直接的通信服务,所以,运输层协议又称为端到端协议
根据应用需求的不同,运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP,这是本章的主要内容
二、运输层的端口与复用、分用的概念
为了区分运行在计算机上的进程,使用进程标识符PID(Process ID)标志运行在计算机上的进程(不同操作系统使用不同格式的进程标识符)
为了让不同操作系统的应用进程之间能够网络通信,TCP/IP体系的运输层用统一的方法–端口号(Port ID)区分应用层不同的应用进程
端口号长度16bit,所以取值范围为0-65535,端口号划分如下:
- 熟知端口号(或系统端口号或公认端口号):数值0~1023。FTP的20/21,HTTP的80,DNS的53等
- 登记端口号(或注册端口号):数值1024-49151。为没有系统端口号的应用程序提供的。必须在IANA按照规定进行登记,以免重复。
- 客户端使用的端口号:
也叫做动态端口号,或者短暂端口号。数值为49152~65535,由于这类端口号仅在客户进程运行时才动态选择,程序结束则已使用过的端口号就被回收,以便以后供其它客户进程使用。
Windows下查看PID与端口号:使用快捷键Ctrl+Shift+Esc呼出任务管理器后点击服务可查看 或者 使用快捷键win+r后再输入cmd回车,使用
tasklist
命令查看
Linux下使用命令netstat -tunlp
查看或者ps
注意: 端口号只是用来标记本计算机中应用层的各进程,在互联网中,不同计算机的相同端口是没有联系的,常用端口号如下了解即可
寻址中的复用与分用
-
复用:应用层所有的应用进程都可以通过传输层再传输到网络层,通俗的说就是多个用户使用一个IO资源 发送消息 时,我们称之为“复用”。
-
分用:传输层从网络层收到数据后交付给指明的应用进程,通俗的说就是多个用户使用一个IO资源 接收消息 时,我们称之为 “分用” 。
在网络层
局域网内多个主机利用一个路由网关发送消息给互联网的其他主机。这也是复用技术。
同理,利用网关接收路由数据报就叫 分用技术。
在运输层
操作系统的 多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为复用
同理,接收时叫做 分用。
在应用层
操作系统的 多个线程 利用一个端口(或者叫socket,socket = IP+端口号 )发送消息称为“”复用“”(有一个技术名词“”IO多路复用“”讲着的大概就是这个意思)
同理,接收时叫分用
在网络中使用套接字Scoket唯一的标识网络中的一个主机和它上面的一个进程;(Socket = IP + PID)
三、UDP协议 和 TCP协议 对比
用户数据报协议 UDP💦(User Datagram Protocol)
- UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认。
- UDP将可靠传输的实现放到了应用层,然后类似于TCP,实现确认机制,重传机制
- UDP不属于连接型协议,因而具有消耗资源小,处理速度快等优点,所以通常音频、视频通话在传送时使用UDP比较多,因为它们即使丢失一两个数据包也不会对结果产生太大影响
- UDP传输层无法保证数据的可靠传输,只能通过应用层来实现了;实现的方式可以参考TCP可靠传输的方式,只是实现不在传输层,转移到了应用层,目前有如下开源程序利用UDP实现了可靠的数据传输;分别有RUDP, RTP, UDT
传输控制协议 TCP💦(Transmission Control Protocol)
- TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
- TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,有三次握手来建立连接,而且在数据传递时,有流量控制、拥塞控制等机制,在数据传完后,四次挥手断开连接用来节约系统资源),这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
- TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
四、TCP协议
1、TCP的三次握手和四次挥手
这点最长最复杂最重要单独开一篇文章TCP的三次握手和四次挥手
也可看小牛肉的文章TCP的三次握手和挥手
2、TCP的流量控制(flow control)💦
如果发送方数据发送太快,接收方来不及接收,就会造成数据丢失,所以使用滑动窗口机制来实现流量控制,让发送方的发送速率不要太快,接收方来得及接收。
一个案例搞懂流量控制:
假设A和B已建立TCP连接后,设一个报文段100B,报文段序列号初始值为1,接收窗口rwnd=400,B对A流量控制,A向B发送数据窗口变化过程如下:
ps:使用了一次累计确认机制ack和三次流量控制机制rwnd(发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值)
如果最后B不允许A再发送数据了后,B在处理完数据之后想要恢复窗口大小时,发送的有rwnd大小的数据报丢了怎么办?此时A有B的指令在前,发送窗口为0无法发送数据,B也在等待A回复,造成了类似死锁的现象
解决方法:使用计时器
TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。
若窗口仍然是0,那么发送方就重新设置持续计时器。
3、TCP的拥塞控制💦
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏这种情况就叫做拥塞(congestion)。
- 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
拥塞控制通过如下图所示4种算法实现,通常两两结合使用
例题:
4、TCP的超时重传
超时重传时间RTO设计短了容易有不必要的重传让网络负荷增大,长了容易造成数据丢失,而TCP协议采用自适应算法,动态的改变重传时间RTTs(加权平均往返时间),具体计算方法如下:
Tips:这里的算法推导有个非常精彩的过程,建议自行观看视频体会,这里只放最终算式便于总结和复习!
5、TCP的可靠传输
TCP基于字节为单位的滑动窗口来实现可靠传输
可靠传输这部分其实包含了很多的内容,也有和前面重合的,这部分看了不少文章还是博客园大佬靠谱儿TCP协议如何保证可靠传输?
本章思维导图
思维导图来源:https://blog.csdn.net/weixin_45067603/article/details/107053479,虽然B站王道的计网相比其他课程略微拉跨,但是这个博主总结的很不错,所以一并用了,差不多的,之后自己会自己总结啦,学的时候感觉好多好难,谢希仁的书听老师讲了一遍还是感觉好难的样子,自己理一遍才行!