1. OSI和TCP/IP
1.1 模型对比
OSI七层 | TCP/IP五层 | TCP/IP四层 |
应用层 | 应用层 | 应用层 |
表示层 | ||
会话层 | ||
传输层 | 传输层 | 传输层 |
网络层 | 网络层 | 网络层 |
数据链路层 | 数据链路层 | 网络接口层 |
物理层 | 物理层 |
1.2 共同点和不同点
1.2.1 共同点
- OSI参考模型和TCP/IP参考模型都采用了层次结构的概念。
- 都能够提供面向连接和无连接两种通信服务机制。
1.2.2 不共同点
- 前者是七层模型,后者是四层结构
- OSI对可靠性要求不同(后者更高)
- OSI模型是在协议开发前设计的, 具有通用性.TCP/IP是先有协议集然后建立模型, 不适用于非TCP/IP网络.
- 实际市场应用不同(OSI模型只是理论上的模型,并没有成熟的产品,而TCP/IP已经成为“实际上的国际标准”)
2. OSI
OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。
3. TCP/IP
3.1 TCP/IP四层模型介绍
3.1.1 各层介绍
- 网络接口层(数据链路层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡。协议:ARP协议(地址解析协议)。
- 网络层(互联网层):处理分组在网络中的活动,比如分组的选路。协议:IP协议(网际协议)、ICMP协议(互联网控制报文协议)。
- 传输层:主要为两台主机上的应用提供端到端的通信。协议:TCP协议(传输控制协议)、UDP协议(用户数据报协议)。
- 应用层:负责处理特定的应用程序细节。协议有:HTTP协议(超文本传输协议)、NTP协议(网络时间协议)、TELNET协议(虚拟终端协议)、DNS协议(域名解析协议)、FTP协议(文件传输协议)、TFTP协议(简单文件传输协议)、SNMP协议(简单网络管理协议)、SMTP协议(简单邮件传输协议)、POP协议(邮局协议)
备注:
ping 采用的是ICMP协议(互联网控制报文协议)
发送邮件采用SMTP、接收邮件采用POP3(邮局协议版本3)
3.1.2 网络层与运输层的区别
在TCP/TP协议族中,网络层IP提供的是一种不可靠的服务。它只是尽可能快地把分组从源节点送到目的节点,但不提供任何可靠性的保证。
Tcp在不可靠的ip层上,提供了一个可靠的运输层,为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。
3.2 TCP/IP五层模型介绍
3.2.1 各层介绍
- 物理层:传送数据的单位是比特。物理层的任务就是透明地传送比特流。
- 数据链路层(链路层):将网络层交下来的 IP 数据报组装成帧,在两个相邻结点(主机和路由器,或两个路由器)之间的链路上“透明”地传送帧中的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。(透明表示无论什么样的比特组合的数据都能够通过这个数据链路层)
如发现有差错,会简单的丢弃帧。如果需要改正错误,由运输层的 TCP 来完成。 - 网络层:同上3.1.1的网络层。
- 传输层:同上3.1.1的传输层。
- 应用层:同上3.1.1的应用层。
3.3 数据封装过程
3.4 TCP 三次握手和四次挥手
TCP三次握手是TCP连接建立的过程,TCP四次挥手则是TCP连接释放的过程。
3.4.1 三次握手
3.4.1.1 流程
- 客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态
- 服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
- 客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态
所以,大概可以理解为两个看不见的人通话:
A:在吗?
B:在的。收到了吗?
A:收到了。
第二次连接A并不知道B收到了,所以是个半连接状态,B得反馈给A说:收到,可以传数据过来了
3.4.1.2 为什么需要第3步中客户端还要再进行一次确认呢?
这主要是为了防止已经失效的连接请求报文段突然又传回到服务端而产生错误的场景。
现在假定一种异常情况,即客户端发出的第一个连接请求报文段并没有丢失,只是在某些网络节点长时间滞留了,以至于延误到连接释放以后的某个时间点才到达服务端。本来这个连接请求已经失效了,但是服务端收到此失效的连接请求报文段后,就误认为这是客户端又发出了一次新的连接请求。于是服务端又向客户端发出请求报文段,同意建立连接。假定不采用三次握手,那么只要服务端发出确认,连接就建立了。
由于现在客户端并没有发出连接建立的请求,因此不会理会服务端的确认,也不会向服务端发送数据,但是服务端却以为新的传输连接已经建立了,并一直等待客户端发来数据,这样服务端的许多资源就这样白白浪费了。
采用三次握手的办法可以防止上述现象的发生。比如在上述的场景下,客户端不向服务端的发出确认请求,服务端由于收不到确认,就知道客户端并没有要求建立连接。
3.4.2 四次握手
3.4.2.1 流程
- 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
- 服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态
- 服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
可以这么理解:
A:我传完了。
B:好的。
…(这个时候,可能B还没把全部的数据传送给A,所以,B确认和断开要分两次发送)
B:我也传完了。
A:好的。
3.4 TCP 传输流程
为什么建链接要3次握手,断链接需要4次挥手?
- 对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。
- 对于4次挥手,其实你仔细看是2次,因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。下图是双方同时断连接的示意图(你同样可以对照着TCP状态机看):
3.5 TCP和UDP有什么区别?
TCP是传输控制协议,提供的是面向连接的,可靠地字节流服务。实际数据传输之前服务器和客户端要进行三次握手,会话结束后结束连接。UDP是用户数据报协议,是无连接的。因为无连接,而且没有超时重发机制,所以UDP传输速度很快。主要用于视频传输(但其实现在各大视频商都是用HTTP协议,而HTTP是基于TCP),实时视频。
TCP保证数据按序到达,提供流量控制和拥塞控制,在网络拥堵的时候会减慢发送字节数,而UDP不管网络是否拥堵。
TCP是连接的,所以服务是一对一服务,而UDP可以1对1,也可以1对多(多播),也可以多对多。
参考文章
OSI七层协议和TCP四层协议
8、计算机网络模型了解,TCP/IP模型介绍和OSI七层模型对比
OSI七层模型与TCP/IP五层模型
TCP / IP和OSI模型
TCP三次握手详解及释放连接过程
TCP/IP常见面试题