简单来说,协议就是不同计算机之间进行通讯所遵循的标准,只有使用相同协议的计算机之间才可以实现网络通讯。这使得即使两台计算机之间的各种设备不同,只要使用的协议相同,就可以通讯
以两个人对话为例,协议可以理解为语言(如规定语言协议是汉语),那么只有两人都说汉语时才能进行正常的对话,对话的内容就是通讯数据
对协议进行分层可以使复杂的网络协议更加简单化,每个分层都接受由它下一层提供的特定服务,同时负责为自己的上一层提供特定的服务
OSI参考模型
OSI模型将协议分成7层(应表会传网数物)
各层作用
TCP/IP协议分层模型
TCP/IP模型是在OSI模型上演变出的,至今仍然展现着强大生命力。二者的区别在于
- OSI参考模型注重“通讯协议必要的功能是什么”
- TCP/IP强调“在计算机上实现协议应该开发哪些程序”
硬件(物理层)
顾名思义,物理层主要表现在计算机硬件的传输介质上,比如网线,光缆等
网络接口层(数据链路层)
该层可以简单理解为驱动,由于硬件安插在计算机上需要通过驱动进行交互。如显卡,主板,声卡驱动等
注,有的书中将物理层和数据链路层合并成网络通讯层,所以说TCP/IP是四层模型或者五层模型都可以
互联网层(网络层)
网络层主要采用IP协议,IP协议基于IP地址转发分包数据。该层主要包含IP,ICMP,ARP等几个协议
- IP协议用于跨越网络传输数据,由于每个主机都有区分于其他主机的ip地址,所以可以根据地址进行分发。该协议不具备重发机制,如果数据包没有顺利到达对端,也不会重新发送,是一种不可靠协议(重发机制由传输层提供)
- ICMP协议保证当数据没有成功发送到对端时,会给发送端发送异常通知。常用于网络诊断,例如ping程序(也正因为如此,ping不需要走传输层,直接和应用层通讯,所以采用原始套接字)
- ARP主要用于解析物理地址
传输层
传输层主要由TCP和UDP两种协议组成
- TCP是一种面向连接的字节流传输层协议。两端必须在确认连接建立成功后才可以正常通讯(三次握手),同样必须进行相互通知确保连接正常关闭(四次挥手)。此外,TCP是一种稳定的传输协议,提供了重传机制,并且可以根据数据序列号保证数据的有序性。常用于对稳定性有一定要求的程序
- UDP是一种面向无连接的数据报传输层协议。相比于TCP简单很多,没有过多繁琐的机制及算法,带来的好处就是省去了三次握手四次挥手这七次报文传输时间,常用于即时通讯,如视频等
由于TCP是字节流协议,分组之间没有明确的间隔,所以send和recv处理的数据个数通常都不匹配。而UDP基于数据报,分组之间间隔明确,每次处理都是以数据报为单位。当然TCP也可以实现分隔,但是需要应用层对发送和接受的数据做一些处理(比如增加前缀表示数据长度等)
TCP协议涉及到的内容比较多,如滑动窗口,拥塞队列,nagle算法,延迟ACK等
应用层
应用层包含各种应用所需要的协议,如HTTP,FTP,TELNET等协议
小结
分层模型展示了TCP/IP具体的内容,每一层都由不同协议组成。通常的应用程序最多也就同应用层和传输层交互,而网络层,数据链路层,物理层等相对底层。此外比较重点的内容在传输层的tcp和udp两种协议上,tcp涉及到tcp协议栈,只有弄清楚底层是如何工作的,才能对tcp进行优化,出现bug知道问题在哪