TCP/IP协议讲解
TCP/IP与OSI参考模型
应用层:向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、虚拟终端等。
应用层协议:两个主机的两个应用程序之间进行相互交流的数据格式。
运行在TCP协议上的协议:
1、HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
2、HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
3、FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输
…
运行在UDP协议上的协议:
1、BOOTP(Boot Protocol,启动协议),应用于无盘设备。
2、NTP(Network Time Protocol,网络时间协议),用于网络同步。
3、DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
4、DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)
…
传输层:提供应用程序间的通信。
其功能包括:格式化信息流 以及 提供可靠传输。
网络层:标记了互联网上每一台主机的地址,负责相邻计算机之间的通信。
网络接口层:底层物理通路(线路)
TCP/IP协议简介
TCP/IP协议实际上是一个协议族。
TCP/IP协议主要由网络层的IP协议 和 传输层的TCP协议组成 。
TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
TCP协议
TCP协议是传输控制协议,工作在传输层。数据传输之前,客户端与服务器之间要建立连接,才可以传输数据。并且数据传输是有序的,要对数据进行校验,数据不会丢失。
TCP的三次握手和四次挥手
三次握手
1.客户端向服务端发送⼀个SYN=1(请求建立连接),并生成一个序列号seq=j。
2.服务端接收到SYN=1后,给客户端发送⼀个SYN=1与ACK=1;并将ack置为j+1;同时生成一个序列号seq=k。
3.客户端接收到会检查ack是否为j+1与ACK是否为1,如果是,则会给服务端发送一个ACK=1与ack=k+1,以及自己的序列号seq=j=1; 服务端接收到会检查ACK是否为1与ack是否为k+1,如果是则代表连接建立成功,两者间可以传递数据。
场景下分析过程,比如两人初次见面互相介绍(同上张三=客户端,李四=服务端):
1、张三:你好,我是张三
2、李四:你好,我知道你是张三,我是李四
3、张三:你好,我知道你是李四,我是张三
四次挥手
1.客户端向服务端发送FIN=1(请求关闭连接),并生成一个序列号seq=x。
2.服务端接收FIN后,向客户端发送ACK=1,ack=x+1,并生成序列号seq=y(客户端无数据发送,但服务器端需发送完最后的数据)。
3.服务端处理完所有数据后,向客户端发送FIN=1与ACK=1,ack=x+1,并生成序列号z,表示服务端现在可以断开连接。
4.客户端收到服务端的数据包后,会向服务端发送ACK=1,seq=x=1,ack=z+1(需要等待2MSL后才可断开连接)。
为什么是三次握手而不是两次握手?
因为如果客户端第一次发送的SYN报文因为网络问题而迟迟没有到达服务端,此时客户端会因为超时而重新发送一个新的SYN报文,此时上一个SYN报文在客户端就会失效,如果这里只采用两次握手,会因为客户端第二次发送SYN后,第一次发送的SYN又成功到达服务端,这时就会建立两个连接,产生问题。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
UDP协议
用户数据报协议。传输方和接收方不需要建立连接,在传输数据之前没有明确的连接链路(即不是所有的数据都是通过一条链路传输)。因为数据的传输不是通过一条链路完成的,因此接收方接收的数据不一定按照发送数据的顺序接收,这样就可能造成数据包的丢失。
TCP与UDP比较
TCP | UDP | |
---|---|---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠 | 不可靠 |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
连接对象 | 一对一 | 一对一,一对多,多对一,多对多 |
传输速度 | 慢 | 快 |
IP协议
IP是TCP/IP协议族中最为核心的协议,它提供无连接的不可靠的连接。所有的 TCP、UDP、ICMP及IGMP数据都以I P数据报格式传输。
IP地址
P地址是32位。需要注意的是,IP地址并不指向一台主机,它是指向一个网络接口。如果一台主句在多个网络上,它就会有多个网络接口,也就是有多个IP地址。因此路由器有多个IP地址。
MQTT
Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,MQTT 最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议, MQTT 在物联网、小型设备、移动应用等方面有广泛的应用。
MQTT消息格式
每条 MQTT 命令消息的消息头都包含一个固定的报头,有些消息会携带一个可变报文头和一个负荷。
格式:固定报头|可变报头|负载(消息体)
MQTT和TCP的区别
协议位置
TCP是传输层协议。
MQTT是基于TCP的应用层协议
协议定位
TCP设计考虑的是面向连接的、可靠的、基于字节流的传输层通信协议。
MQTT则是在低带宽高延迟不可靠的网络下进行数据相对可靠传输的应用层协议
设计思想
TCP的核心思想是分组交换。
MQTT的核心思想是简单并适应物联网环境。
传输单位
TCP的传输单位是packet,当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。
MQTT的传输单位是消息,每条消息字节上限在MQTT Broker代理服务器上进行设置,可以设置超过1M大小的消息上限。这样,就可以用一条消息就发送上千条采集的数据,或者比较大的设备阴影文件。
原文地址: https://blog.csdn.net/weixin_45151960/article/details/124622991
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章