(1)根据OSI七层协议,IP协议处于中的网络层,而UDP协议和TCP协议处于传输层。七层次协议中,下层协议向上层协议提供服务,所以TCP和UDP都是基于IP协议实现的。
(2)IP协议是数据报服务的一种应用实现,面向无连接,为连接在网络上的主机提供不可靠的传输服务,只能尽最大努力交付。
(3)UDP基于IP协议的实现了无连接的数据传输,而TCP则基于IP协议创建了可靠的通信连接,实现了可靠的数据传输。
什么是数据报服务?
网络层能提供的服务类型有两种:无连接的数据包服务和面向连接的虚电路服务
无连接的网络服务——数据报服务
数据服务的特点:
(1)主机随时可发送数据
(2)每个分组独立选择路由
(3)分组不一定按顺序到达目的主机
(4)某个分组可能丢失(不可靠服务)
(5)可靠通信由用户终端中的软件(TCP) 来保证
面向连接的网络服务——虚电路服务
虚电路服务的特点:
(1)选建立电路,再通信
(2)分组都必须沿着虚电路传送,数据传送完毕后,释放虚链路
(3)通信的可靠性由网络本身来保证
两种服务的比较
(1)当报文短时,数据报既迅速又经济,虚电路太浪费网络资源
(2)在进行存储转发时,数据报需要更多开销来携带完整的地址信息,虚电路只需携带需电路号即可
(3)数据报只承担端到端的差错,而虚电路还要保证分组按顺序交付,不丢失,不重发
(4)虚电路对网络流量控制比数据报更容易。
网络层需不需要提供端到端的可靠通信?
从20世纪70年代起,关于网络层究竟应当采用数据包服务还是采用虚电路服务。在网络界一直进行着争论。问题的焦点在于网络层需不需要提供端到端的可靠通信?考虑到当时PC机价格昂贵,许多用户用的都是哑终端(无硬盘),且当时的网络信道不好,传输质量差,误码率高,所以OSI一开始就按照电信网的思路来对待网络,坚持“网络提供的服务必须是非常可靠的”这样的观点,因此OSI网络层(以及其他的各个层次)采用了虚电路服务。
但是没过ARPANET(因特网的前身)的一些专家认为,不论用什么方法设计网络,网络提供的服务并不可能做到分厂可靠,用户主机仍然要负责端到端的可靠性。所以他们认为:让网络只负责提供数据包服务就可以大大简化网络层的结构。当然网络出了差错不去处理而让两端的主机来处理肯定会延误一些时间吗,但技术的进步是的网络出错概率已经越来越小,因而让主机负责端到端的可靠性不但不给主机增加更多的负担,反而使网络能够给用户提供更多的服务。因特网能发展到金今天这样的规模,充分说明了网络层提供数据包服务是非常成功的。
注意:网络层不提供端到端的可靠通信,是指网络层不负责提供可靠通信而将这一责任交给其他层(实际上就是传输层负责)
网络层所提供服务与传输层的区别
1、网络层的主要任务是为网络上的不同主机之间提供通信(这种通信称为点到点point to point的通信)。它通过路由选择算法,为分组通过通信子网选择最适当的路径,以实现网络的互连功能。
2、传输层的主要任务是负责向主机进程提供通用的数据通信服务(这种通信称为端到端end to end的通信)。
注意:主机之间的通信只负责找到对方主机的IP地址,而不负责找到对方主机的哪一个进程。而进程之间的通信则不仅要找到对方主机的IP地址,还要找到对方主机进程使用的端口号。(即要找到插口,插口又称为套接字、套接口。插口=IP+端口)
TCP保证可靠传输的关键
有三个关键步骤:三次握手建立连接、发送确认、四次挥手断开连接。
三次握手
SYN:同步比特
ACK:确认比特
注意:
- 同步比特和确认比特是TCP报文段的一部分,占位均为1bit。这里箭头上标注SYN和ACk均表示将其对应的比特位设置为1。相应的没标注SYN、ACk则表示其对应的比特位保持为0。
第一次握手:客户端发送同步比特给服务端,客户端主动进入SYN-SEND状态,等待服务器地确认.
第二次握手:服务端收到发来的同步比特之后,发回同步比特以及确认比特,进行LISTEN状态,等待客户端确认
思考:为什么使用三次握手而不是两次握手?
如果只是两次握手,在客户端发送连接请求的过程中,考虑到传输的数据包可能因为种种原因被滞留在网络节点中,经过一段较长时间之后才发送到服务器,但由于这段时间过长,客户端因为接受不到服务器返回的确认而重新发送了连接请求。当滞留在网络节点中的数据包到达服务器的时候,服务器会以为是新的连接请求,就会再创建一个新的端口进行等待监听并返回确认。然而此时客户端只实际上有一个连接请求,这样就造成了服务器资源的浪费。
发送确认
要确保传输的可靠性就要避免丢包问题,并确保传输报文有序。TCP给出的方案是(1)给要传输的数据按字节编号(2)返回确认(即返回ACK确认比特)
在网络传输的过程中数据包到达服务端的先后顺序是不可控的,但服务器却可以在数据包接受完全之后按序号进行重组,使数据还原为原来的次序。也因为数据包到达服务器的先后不可知,所以服务器在接收到一个数据包之后并不立即返回确认,而是延迟一段设定的时间,如果在这个时间内没有后续的数据包发送过来,则返回相应的确认(在确认的同时约定了客户端下一次要发送数据的起始序号)。如果在延迟确认时间内收到后续发来的数据包,则将延迟时钟重置,重新计时。
四次挥手
四次挥手的目的是为了在不可靠的网络链路中进行可靠的断开确认.
TCP自动状态机
粗实线表示客户端状态变迁
粗虚线表示服务端状态变迁
轻实线表示其他时间触发的状态变迁
以上仅是笔者的一隅之见,有不当之处还望斧正。
参考资料:
1、《计算机网络》(第6版)谢希仁著