小编最近正在复习计算机网络基础,整理出一些我认为比较重要的知识,后续会更新~
从IP层来说,通信的两端是两个主机。IP数据报的首部明确地标志了这两个主机的IP地址。我们需要知道,真正进行通信的实体是在主机中的进程,是这个主机中的一个进程和另一个主机中的进程在交换数据(即通信)。因此严格地讲,两个主机进行通信就是两个主机中的应用进程进行通信。IP协议虽然等把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
可以这样理解逻辑通信:沿水平方向直接传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接。数据的传送是沿着图中的虚线方向(经过多个层次)传送的。
可以从上图中看出,网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。在协议栈层间的抽象的协议端口是软件端口。
TCP/IP的运输层用一个16位的端口号来标志一个端口,但需要注意的是,端口号只具有本地含义,它只是为了标志本计算机应用层中的各个进程和运输层进行交互时的层间接口,在因特网不同计算机中,相同的端口号是没有任何关联的。
接下来再介绍两类端口号:
套接字:TCP把连接作为最基本的抽象,每一条TCP连接有两个端点,TCP连接的端点就是套接字(socket)或插口。根据RFC793的顶替工艺:端口号拼接到IP地址即构成了套接字。
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定:
TCP连接 :: ={socket1,socket2}={(IP1:port1),(IP2:port2)}
远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP没提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
理想的传输条件有以下两个特点:
在这样理想传输条件下,不需要采取任何措施就能够实现可靠传输。但一般实际的网络都不具备以上两个特点。
停止等待协议:
每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组
只有收到序号正确的确认帧 ACKn 后,才更新发送状态变量 V(S)一次,并发送新的数据帧。接收端接收到数据帧时,就要将发送序号 N(S) 与本地的接收状态变量 V(R) 相比较。若二者相等就表明是新的数据帧,就收下,并发送确认。否则为重复帧,就必须丢弃。但这时仍须向发送端发送确认帧 ACKn,而接收状态变量 V(R) 和确认序号 n 都不变。连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。
发送端在发送完数据帧时,必须在其发送缓存中暂时保留这个数据帧的副本。这样才能在出差错时进行重传。只有确认对方已经收到这个数据帧时,才可以清除这个副本。
发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为ARQ(Automatic Repeat reQuest),自动请求重传。
连续ARQ协议:
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。上图表示发送方收到了对第一个分组的确认,于是就把发送窗口向前移动一个分组的位置。如果原来已经发送了前五个分组,那么现在就可以发送窗口内的第六个分组的。
接收方一般都是采用累积确认的方式。也就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组的确认,这就表示:到这个分组位置的所有分组都已正确收到了。
注:TCP和UDP后续会重点讲解,在这里就先简略介绍啦~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。