要了解各种协议之间的关系,首先要理解什么是协议,协议就是相互遵循的规则,中国人说普通话,就是一种人与人之间交流的规则,不然各说各的方言,都不知道相互表达的什么意思。计算机再这个方面就体现的更为直观了,两个机器之间如何通信,就需要定制各种各样的协议。如TCP/UDP协议、IP协议、域名系统的DNS协议、JOSN也是一种协议(数据结构协议)。只有按照这些定制好的协议,才能进行数据传输,计算机之间才能完成准确的通信。
Socket接口的理解
了解各个协议前,你要首先知道Socket是干嘛的,Socket也叫套字节,它独立于协议的网络编程接口,是网络通信的基石,这句话想必在很多地方看到过吧,为什么说它是基石呢?
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象说法。一个套接字就是网络上进程通信的一端(如主机A),它提供了应用层进程(如程序a)利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,Socket本质就是编程接口(API)。
通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制。Socket在各个操作系统属于类库的存在,也就是API接口,各种编程语言,在发起HTTP请求后,最后调用的都是系统的Sokcet API接口。所以说套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元
应用程序要网络通信,就得利用套接字,设置对端的 IP 地址+ 端口号( IP 和 端口就是Sokcet的基本规则),实现数据的发送与接收。 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket。 如下图,主机A要连主机B,主机A就要设置主机B的 IP + 端口:参考Sokcet通讯模型
通俗的理解,你可以把电脑想象成你家的小区, IP你可以想象成为到你家小区的地址(IP具有寻址能力),端口就是你家在这个小区的门牌号,而Socket就是到你家小区的具体公交车,网线、路由、DNS,只有按照这种规则,才能到你家。网络通信也是同样的道理。
IP协议的的理解
IP分为IP4、IP6协议,IP协议是在TCP/IP协议模型中的重要组成部分,目前我们使用最多的是IPv4协议,IPv6协议的用户量也在慢慢增加,苹果在几年之前就已经开始支持IPv6协议了。
IPv6是由IETF设计的用来替代现行的IPv4协议的一种新的IP协议。目前,IPv4协议还是主流。但IPv4协议已经使用了30年,在这30年的应用中,IPv4获得了巨大的成功的同时,随着应用范围的扩大,地址匮乏等问题越来越明显。IPv6是为了解决IPv4所存在的一些问题和不足而提出的。
IP协议详解及IPv4与IPv6协议的区别
IPv6协议原理以及跟IPv4的差别
TCP、UDP协议的理解
如果说IP协议,是找到对方的详细地址,那么TCP、UDP协议就是把东西安全的带给对方,两者相辅相成。在OSI模型(开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型)中,TCP、UDP属于传输层,TCP为字节流服务和UDP为数据报服务的。
上面也提到Sokcet是通信的基石,那TCP、UDP通俗讲就是,定义以怎样的方式去使用Socket 接口,发送数据。
按照TCP传输控制协议 +Socket,就产生了流套字节。
按照UDP数据报文协议 +Socket,就产生了数据报文套字节。
第三种就是原生的Sokcet套字节。
详细描述如下:
1.流套接字(SOCK_STREAM)
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
2.数据报套接字(SOCK_DGRAM)
数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP( User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
3.原始套接字(SOCK_RAW)
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套z字接。
TCP/UDP建立Socket流程
TCP要完成通信要经过
三次握手:请求、确认、建立连接。
四次挥手:客户端向服务端请求释放连接、服务端进入办关闭状态并向客户端发送确认、再次向客户端反馈确认准备断开连接、客户端收到确认请求后向服务端发送最后的报文。
详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
HTTP协议的理解
HTTP是一个简单的从请求到响应的一种规范,记住它真实的意义应该理解成一个规范,它是基于TCP协议在网络间进行传输,它虽然叫超文本传输协议,但是只是属于应用层,不属于传输层。HTTP定义了请求的方式、数据格式以及类型,它是信息的载体,所以在它里面会标注信息长度,信息类型,请求的方式等,它仅仅是对数据体的封装,当然你也可以自定义方式,并且你服务端也需要按照这种方式对数据解析,但是这样做的出来的服务,是无法跟其他服务通信的,因为虽然它们能接受到你的数据包,但是不知道你数据包怎么去解析,数据内容是什么。
TCP是底层通讯协议,定义的是数据传输和连接方式。
HTTP是应用层规范,定义的是传输数据的内容的规范。
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP.
HTTP协议详解
HTTP协议超级详解
OSI 与 TCP/IP协议簇
要了解TCP/IP协议簇,就要先了解一个什么OSI,OSI(Open System Interconnect)全称为开放式通信系统互联参考模型
,常叫OSI参考模型
,它规定将网络分为七层,从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
,分层将复杂的流程分解为几个功能相对单一的子过程,整个流程更加清晰,复杂问题简单化,更容易对每一层针对行的优化与管理。
分层 | 作用描述 | 常见使用场景 |
---|---|---|
应用层 | 应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系,应用层为用户提供的服务和协议:文件传输服务(FTP)、远程登录服务(ssh)、HTTP等 | 各种为用户提供服务的应用程序 |
表示层 | 对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话 层 ,主要功能是处理用户信息的表示问题,如编码、数据格式转换和加密解密等 | |
会话层 | 主要功能是建立、管理、中止会话。 组织和协调两个会话进程之间的通信,并对数据交换 进行管理。当建立会话时,用户必须提供他们想要连接的远程地址 | |
传输层 | 主要功能是定义传输数据的协议端口号,以及流控和差错校验 要任务是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输 | 常用的TCP/UDP就是传输层 |
网络层 | 主要功能是进行逻辑地址寻址,实现不同网络之间的路径选择。 主要任务是:数据链路层的数据在这一层被转换为数据包 ,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。一般情况下,数据链路层是解决同一网络(局域网)内节点之间的通信,而网络层主要解决不同子网间的通信。 | 常见的网络层设备:路由器 |
数据链路层 | 主要功能是建立逻辑连接、进行硬件地址寻址、差错校验等功能。在物理层提供的数据流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即向网络层提供可靠的通过物理介质传输数据的方法。具体工作是:接收来自物理层的位流(数据流)形式的数据,通过差错控制等方法传到网络层;同样,也将来自上层的数据,封装成数据帧转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。 | 交换机设备 |
物理层 | 主要功能是建立、维护、断开物理连接。利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。尽可能屏蔽掉具体传输介质 和物理设备的差异 | 常见的物理层设备:网卡、光纤、RJ-45接头(常用5类网线)、集线器(HUB) |
TCP/IP协议簇是一组不同层次上的多个协议的组合,尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是Internet协议族 (Internet Protocol Suite))。TCP/IP协议簇采用了4层的层级结构,每一层都呼叫它的下一层所 提供的协议来完成自己的需求,与OSI的七层模型相比,它把应用层、表示层、会话层,统称为应用层,看下图:
TCP/IP协议簇。其中比较重要的有SLIP协议、PPP协议、IP协议、ICMP协议、ARP协议、TCP协议、UDP协议、FTP协议、DNS协议、SMTP协议等。
参考:
1.百度百科:OSI参考模型
2.https://www.cnblogs.com/qishui/p/5428938.html
3.https://blog.csdn.net/yaopeng_2005/article/details/7064869
4.https://www.cnblogs.com/feng0919/p/11202604.html