zoukankan      html  css  js  c++  java
  • TCP/IP协议族以及HTTP协议和Sokcet

      计算机中的协议是什么?人类科学的发展基于的就是类比和学习,这里也可以参考类比的方式,计算机类似人,协议类似语言,而不同的场景可能需要使用不同的语言,比如暗语,手语,人类语言,动物语言等等,不同的场景采用不同的语言,同样的协议也需要这样做,因地制宜是人类的光荣传统嘛。所以呼之欲出的就是TCP/IP协议族,这是一系列协议的统称。

      首先需要明白的是TCP/IP协议族是分层的,不同的层有这个层对应的协议,这个层就是实际创造协议时的一种构造思路,一大堆牛人辛苦的结晶,不必疑惑,该懂时自然懂,不该懂讲给你听你也不懂:

       为什么要分层?因地制宜和化整为零永远是解决问题最好的办法,上面的四层是粗浅的划分和七层更加细致的划分,想表达的内容是一样的,大致上看就大概知道其中的缘由,这里就不细说了,下面是TCP/IP通信数据流:

       通过调用不同的协议完成不同的分工,进而完成不同的计算机间的通信任务,这就是TCP/IP协议族的意义所在。从上图中就可以看出,每个层就代表了一种功能,如应用层的HTTP协议就是在应用层解析的协议,计算机中的应用只用去解析HTTP协议就可以完成通信的任务,而IP协议就是网络寻址的协议,这一部分协议就交给路由器来解析,而路由器也只需要解析IP协议就可以完成通信的任务,以此类推每个协议都自己的解析人,然后将HTTP协议最终交到应用的手里,应用解析HTTP协议再把最终的数据交给程序员的手里,程序员进行CRUD,然后就是呈现在我们面前美妙的互联网世界。

     所以你知道为什么HTTP协议那么重要了吗,作为一个程序员长打交道的就是HTTP协议,所以深刻明白HTTP协议的内在刻不容缓啊兄弟们。

    HyperText Transfer Protocol,缩写:HTTP

      HTTP是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP),注意HTTP协议的底层就是通过TCP来实现的。

      HTTP工作的原理:HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

      HTTP协议是无状态,无连接的协议,即HTTP协议本身对请求响应不做记录,且每次只能处理一个请求。

    HTTP协议采用TCP协议作为维持连接的协议,TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,所以HTTP协议需要完成三次握手才能进行正常通信:

       那为什么要四次挥手呢?还是因为TCP协议,TCP协议的通信方式规定是基于tcp协议的双方是全双工的,也就是说通信双方都可以向对方发送消息,也都可以独立关闭自己一方的通信通道,所以TCP协议决定了HTPP协议必须完成四次挥手才能保证数据完整的传输完成。你知道了吗?

    参考文章:https://blog.csdn.net/zeqi1991/article/details/81582675

      ok,明白了TCP/IP协议就不得不了解下Sokcet编程,我们都知道无论是BS还是CS都是通过Socket进行数据沟通的。Socket被称为套接字,起源于Linux,Socket的连接需要一对套接字。

      那Socket是什么?为什么叫Socket编程?Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

    ******************划重点

      TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。

      Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。

      socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。

    ******************

      从上面的三个知识点可以看出,TCP才是稳定数据连接的最终劳动者,而HTTP和Socket只不过是在之上又封装了一层,当然Socket也可以封装UDP:

    Socket通信的数据传输方式,常用的有两种:
      a、SOCK_STREAM:表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。
      b、SOCK_DGRAM:表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。
      例如:QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响
      
      HTTP协议借助TCP发展了自己一次连接对应一次回复,然后关闭连接的协议特色;而Socket借助了不同的TCP/IP协议也可以完成各种各样的传输任务,可以是TCP连接也可以是UDP连接,可以这么认为Socket和HTTP协议是站在一个高度的两个老板,TCP/IP协议族是员工,只不过HTTP协议这个老板只用TCP,且自己又搞了一套,还改国号为HTTP协议,而Socket玩的是土地承包制,这个老板不搞花架子,用什么员工干什么样的事,原汁原味,大自然的搬运工,其实Java中Socket就是在TCP/IP协议上抽象的接口。
    但是只要使用TCP,那么三次握手,四次挥手是跑不了的,因为TCP协议干的就是这个事。

     参考文章:https://blog.csdn.net/weixin_41648325/article/details/79412158

  • 相关阅读:
    s
    qq
    qqq
    q
    qq
    http请求报文
    qq
    q
    qqq
    java对象-String的用法
  • 原文地址:https://www.cnblogs.com/YsirSun/p/12649668.html
Copyright © 2011-2022 走看看