TCPUDP协议,和HTTP、FTP、SMTP,区别及应⽤场景
⼀、OSI 模型
OSI 模型主要作为⼀个通⽤模型来做理论分析,⽽TCP/IP 协议模型是互联⽹的实际通讯协议,两者⼀般做映射分析,以下不做严格区分和声明(好吧,⽐较懒);
OSI 整个模型层次⼤致可以分为3个主要层⾯来看
|.............主机...............| 操作系统和软件等应⽤、表⽰、会话
|.............⽹络...............| 互联⽹络和相关协议传输、⽹络(TCP/IP)
|.............介质...............| 物理介质相关数据链路、物理
下图模型为OSI
1,主机需要⽹络传输数据,⽹络本质上是⼀种服务,主机和⽹络之间靠传输层接⼝,就好⽐你要叫快递送东西;
2,⽹络可以提供两种服务:
1)可靠,⾯向连接;(TCP)就像靠谱的快递,每⼀步都有反馈和监控,当然价格也是呵呵...
2)不可靠,尽⼒⽽为的传输(UDP)就像某些不靠谱的快递或者听都没听过的XX快递,价格低,但是能不能到就靠运⽓了。
3,两种服务⽆所谓好坏,TCP 的可靠是需要消耗很多资源的,效率低(⼤块,重要的⽂件等)
UDP 不保证可靠性,但是效率⾼(视频,语⾳,不重要的⼩⽂件等)
4,⽽其他的“HTTP、FTP、SMTP 等所谓的“Application-layer Protocol”协议”指的是在TCP/IP 通讯协议框架下具体实现特定功能的应⽤(HTTP ⽤来实现超⽂本传输,FTP⽂件传输,SMTP处理邮件等等),两者的关系,咳咳,关系通俗的说:
TCP和UDP以及IP 协议是互联⽹络通讯的基础,就像《宪法》,⽽应⽤协议就像具体的《刑法》、《民法》、《婚姻法》、《未成年⼈保护法》......等等,在某个领域的特定应⽤和具体实现,但是最基本的⼀条:违宪⽆效。
下图模型为TCP/IP栈
⼆、TCP与HTTP的区别
TCP/IP协议是传输层协议,主要解决数据如何在⽹络中传输,⽽HTTP是应⽤层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,⽹络有⼀段⽐较容易理解的介绍:“我们在传输数据时,可以只使⽤(传输层)TCP/IP协议,但是那样的话,如果没有应⽤层,便⽆
法识别数据内容,如果想要使传输的数据有意义,则必须使⽤到应⽤层协议,应⽤层协议有很多,⽐如HTTP、FTP、TELNET等,也可以⾃⼰定义应⽤层协议。WEB使⽤HTTP协议作应⽤层协议,以封装HTTP ⽂本信息,然后使⽤TCP/IP做传输层协议将它发到⽹络上。”
  术语TCP/IP代表传输控制协议/⽹际协议,指的是⼀系列协议。“IP”代表⽹际协议,TCP和UDP使⽤该协议从⼀个⽹络传送数据包到另⼀个⽹络。把IP想像成⼀种⾼速公路,它允许其它协议在上⾯⾏驶并到到其它电脑的出⼝。TCP和UDP是⾼速公路上的“卡车”,它们携带的货物就是像HTTP,⽂件传输协议FTP这样的协议等。
你应该能理解,TCP和UDP是FTP,HTTP和SMTP之类使⽤的传输层协议。虽然TCP和UDP都是⽤来传输其他协议的,它们却有⼀个显著的不同:TCP提供有保证的数据传输,⽽UDP不提供。这意味着TCP有⼀个特殊的机制来确保数据安全的不出错的从⼀个端点传到另⼀个端点,⽽UDP不提供任何这样的保证。
HTTP(超⽂本传输协议)是利⽤TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使⽤Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
  下⾯的图表试图显⽰不同的TCP/IP和其他的协议在最初OSI模型中的位置:
7应⽤层例如、、、、、、、、、、、
6表⽰层例如、、、、
5会话层例如、、、ISO 8327 / CCITT X.225、、、、、
4传输层例如、、、、、、
3⽹络层例如、、、、、、、、、、、
2数据链路层例如、、、、、、、、
1物理层例如、、、
三、TCP,UDP区别
TCP与UDP基本区别
1.基于连接与⽆连接
2.TCP要求系统资源较多,UDP较少;
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP);
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
UDP应⽤场景:
1.⾯向数据报⽅式
2.⽹络数据⼤多为短消息
3.拥有⼤量Client
4.对数据安全性⽆特殊要求
5.⽹络负担⾮常重,但对响应速度要求⾼
具体编程时的区别
1.socket()的参数不同
  2.UDP Server不需要调⽤listen和accept
  3.UDP收发数据⽤sendto/recvfrom函数
  4.TCP:地址信息在connect/accept时确定
  5.UDP:在sendto/recvfrom函数中每次均需指定地址信息
  6.UDP:shutdown函数⽆效
编程区别
通常我们在说到⽹络编程时默认是指TCP编程,即⽤前⾯提到的socket函数创建⼀个socket⽤于TCP通讯,函数参数我们通常填为SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),这表⽰建⽴⼀个socket⽤于流式⽹络通讯。
  SOCK_STREAM这种的特点是⾯向连接的,即每次收发数据之前必须通过connect建⽴连接,也是双向的,即任何⼀⽅都可以收发数据,协议本⾝提供了⼀些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收⽅。
  ⽽SOCK_DGRAM这种是User Datagram Protocol协议的⽹络通讯,它是⽆连接的,不可靠的,因为通讯双⽅发送数据后不知道对⽅是否已经收到数据,是否正常收到数据。任何⼀⽅建⽴⼀个socket以后就可以⽤sendto发送数据,也可以⽤recvfrom接收数据。根本不关⼼对⽅是否存在,是否发送了数据。它的特点是通讯速度⽐较快。⼤家都知道TCP是要经过三次握⼿的,⽽UDP没有。
基于上述不同,UDP和TCP编程步骤也有些不同,如下:
TCP:
TCP编程的服务器端⼀般步骤是:
  1、创建⼀个socket,⽤函数socket();
  2、设置socket属性,⽤函数setsockopt(); * 可选
  3、绑定IP地址、端⼝等信息到socket上,⽤函数bind();
  4、开启监听,⽤函数listen();
  5、接收客户端上来的连接,⽤函数accept();
  6、收发数据,⽤函数send()和recv(),或者read()和write();
  7、关闭⽹络连接;
  8、关闭监听;
TCP编程的客户端⼀般步骤是:
  1、创建⼀个socket,⽤函数socket();
  2、设置socket属性,⽤函数setsockopt();* 可选
  3、绑定IP地址、端⼝等信息到socket上,⽤函数bind();* 可选
  4、设置要连接的对⽅的IP地址和端⼝等属性;
  5、连接服务器,⽤函数connect();
  6、收发数据,⽤函数send()和recv(),或者read()和write();
  7、关闭⽹络连接;
recv函数
UDP:
与之对应的UDP编程步骤要简单许多,分别如下:
  UDP编程的服务器端⼀般步骤是:
  1、创建⼀个socket,⽤函数socket();
  2、设置socket属性,⽤函数setsockopt();* 可选
  3、绑定IP地址、端⼝等信息到socket上,⽤函数bind();
  4、循环接收数据,⽤函数recvfrom();
  5、关闭⽹络连接;
UDP编程的客户端⼀般步骤是:
  1、创建⼀个socket,⽤函数socket();
  2、设置socket属性,⽤函数setsockopt();* 可选
  3、绑定IP地址、端⼝等信息到socket上,⽤函数bind();* 可选
  4、设置对⽅的IP地址和端⼝等属性;
  5、发送数据,⽤函数sendto();
  6、关闭⽹络连接;
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,⽽UDP则常被⽤于让⼴播和细节控制交给应⽤的通信传输。UDP补充:
UDP不提供复杂的控制机制,利⽤IP提供⾯向⽆连接的通信服务。并且它是将应⽤程序发来的数据在收到的那⼀刻,⽴刻按照原样发送到⽹络上的⼀种机制。即使是出现⽹络拥堵的情况下,UDP也⽆法进⾏流量控制等避免⽹络拥塞的⾏为。此外,传输途中如果出现了丢
包,UDO也不负责重发。甚⾄当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采⽤UDO的应⽤程序去处理。换句话说,UDP将部分控制转移到应⽤程序去处理,⾃⼰却只提供作为传输层协议的最基本功能。UDP有点类似于⽤户说什么听什么的机制,但是需要⽤户充分考虑好上层协议类型并制作相应的应⽤程序。
TCP补充:
TCP充分实现了数据传输时各种控制功能,可以进⾏丢包的重发控制,还可以对次序乱掉的分包进⾏顺序控制。⽽这些在UDP中都没有。此外,TCP作为⼀种⾯向有连接的协议,只有在确认通信对端存在时才会发送数据,从⽽可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗⼝控制等机制实现可靠性传输。
TCP与UDP区别总结:
1、TCP⾯向连接(如打电话要先拨号建⽴连接);UDP是⽆连接的,即发送数据之前不需要建⽴连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,⽆差错,不丢失,不重复,且按序到达;UDP尽最⼤努⼒交付,即不保证可靠交付
3、TCP⾯向字节流,实际上是TCP把数据看成⼀连串⽆结构的字节流;UDP是⾯向报⽂的
UDP没有拥塞控制,因此⽹络出现拥塞不会使源主机的发送速率降低(对实时应⽤很有⽤,如IP电话,实时视频会议等)
4、每⼀条TCP连接只能是点到点的;UDP⽀持⼀对⼀,⼀对多,多对⼀和多对多的交互通信
5、TCP⾸部开销20字节;UDP的⾸部开销⼩,只有8个字节
6、TCP的逻辑通信信道是全双⼯的可靠信道,UDP则是不可靠信道
四、TCP,UDP,HTTP应⽤场景
Socket实现服务器与客户端之间的物理连接,并进⾏数据传输。主要有TCP/UDP两个协议。Socket处于⽹络协议的传输层。
TCP:传输控制协议,⾯向连接的的协议,稳定可靠。当客户和服务器彼此交换数据前,必须先在双⽅之间建⽴⼀个TCP连接,之后才能传输数据。
UDP:⼴播式数据传输,UDP不提供可靠性,它只是把应⽤程序传给IP层的数据报发送出去,但是并不能保证它们能到达⽬的地。由于UDP在传输数据报前不⽤在客户和服务器之间建⽴⼀个连接,且没有超时重发等机制,故⽽传输速度很快。
优点:1.传输数据为字节级,传输数据可⾃定义,数据量⼩。相应的移动端开发,⼿机费⽤低
2.传输数据时间短,性能⾼
3.适合C/S之间信息实时交互
4.可以加密,数据安全性⾼
缺点: 1.需要对传输的数据进⾏解析,转化为应⽤级的数据
2.对开发⼈员的开发⽔平要求⾼
3.相对于Http协议传输,增加了开发量
Http请求主要有http协议,基于http协议的soap协议,常见的http数据请求⽅式有get和post,web服务优点:1.基于应⽤级的接⼝使⽤⽅便
2.要求的开发⽔平不⾼,容错性强
缺点: 1.传输速度慢,数据包⼤。
2.如实现实时交互,服务器性能压⼒⼤
3.数据传输安全性差

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。