美文网首页我爱编程
网络协议必知(TCP/IP、Http、Socket...)

网络协议必知(TCP/IP、Http、Socket...)

作者: 拿破仑蛋糕 | 来源:发表于2018-05-10 17:22 被阅读0次

    参考文章:
    1.网络协议详解
    2.TCP/IP、Http、Socket的区别
    3.三次握手、四次握手内容整理
    4.WebSocket(二)-WebSocket、Socket、TCP、HTTP区别
    5.WebSocket介绍,与Socket的区别

    一.网络协议

    1. 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合;
    2. 网络协议主要由三个要素组成:语义、语法及时序;语义表示要做什么,语法表示要怎么做,时序表示做的顺序;
    3. 网络协议的层次结构如下:
      (1)结构中的每一层都规定有明确的服务及接口标准。
      (2)把用户的应用程序作为最高层。
      (3)除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。
      (4)把物理通信线路作为最低层,它使用从最高层传送来的参数,是提供服务的基础。

    二.层次划分

    image.png

    层次说明:
    第七层:应用层
    为操作系统或网络应用程序提供访问网络服务的接口。
    第六层:表示层
    处理两个通信系统中交换信息的表示方式。为上层用户解决用户信息的语法问题。包括数据格式交换、数据加密与解密、数据压缩与终端类型的转换。
    第五层:会话层
    在两个节点之间建立端连接。为端系统的应用程序之间提供了对话控制机制。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
    第四层:传输层
    为会话层用户提供一个端到端的可靠、透明和优化的数据传输服务机制。
    第三层:网络层
    网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。
    第二层:数据链路层
    在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
    第一层:物理层
    物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。

    三.TCP/IP协议

    1. TCP/IP协议是利用IP进行通信时所必须用到的协议群的统称。具体点,IP或ICMP、TCP或UDP、TELENT或FTP、以及HTTP等都属于TCP/IP协议,而TCP/IP一词泛指这些协议,有时称它们为TCP/IP网际协议族或TCP/IP协议族。
    2. TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

    四.TCP协议

    TCP协议即传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

    4.1 建立TCP链接:三次握手

    第一次握手: 客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认;
    第二次握手: 服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手;
    说明:TCP三次握手的实质就是客户端以及服务端分别确认双方发送以及接收正常,然后连接建立。

    注意:未连接队列
    在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

    4.2 为什么要采用三次握手,两次不行吗?

    image.png

    4.3关闭TCP连接:四次挥手

    对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:
    第一步:当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
    第二步:主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
    第三步:主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
    第四步:主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。

    4.4为什么连接的时候是三次握手,关闭的时候却是四次握手?

    因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    TCP连接到断开的全过程.png

    五.IP协议

    1. IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体。所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输。
    2. IP提供不可靠的,无连接的数据传送服务。
      不可靠指它不能保证IP数据报能成功到达目的地。IP仅提供最好的传输服务。当发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源。任何要求的可靠性必须由上层来提供。
      无连接指IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。

    六.HTTP协议

    1. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。
    2. HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
    3. HTTP是一个无连接、无状态的协议。
    4. HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这时就成了HTTPS。
    5. HTTP的默认端口号为80,HTTPS的端口号为443。
      注意:
      1. 无连接:是指限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
      2. 无状态:是指协议对于事务处理没有记忆能力。即协议不记录历史的请求信息,如果后续处理需要前面的信息,则它必须重传,这样就导致后面每次连接传送的数据量增大。为了解决这个问题就有了Cookie和Session。
      3. 状态码状态码是在一次请求中服务器的响应状态。
      Http状态码和http协议是无状态的说的就不是一回事。

    HTTP的生命周期
    HTTP的生命周期通过 Request 来界定:
    HTTP1.0中,就是一个 Request 一个 Response ,这次HTTP请求就结束了。
    HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

    HTTP工作流程
    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
    2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
      注意:HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

    七.Socket协议

    Socket是对TCP/IP协议的抽象和封装,Socket本身并不是协议,Socket的出现只是为了更方便地使用TCP/IP协议栈。

    八.WebSocket

    参考文章:
    WebSocket 教程
    WebSocket 是什么原理?为什么可以实现持久连接?

    Websocket是HTML5提供的一种在 TCP 连接上进行全双工通讯的持久化协议(持久化是相对于HTTP这种非持久的协议来说的)。它最大的特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
    其他特点包括:
    (1)建立在 TCP 协议之上,服务器端的实现比较容易。
    (2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    (3)数据格式比较轻量,性能开销小,通信高效。
    (4)可以发送文本,也可以发送二进制数据。
    (5)没有同源限制,客户端可以与任意服务器通信。
    (6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

    九.UDP协议

    UDP (User Datagram Protocol)是用户数据报协议,是(OSI)开放式系统互联参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

    十.协议之间的关系

    TCP/IP协议和HTTP协议之间的关系
    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。实际上HTTP协议就是建立在TCP/IP协议之上的。

    TCP/IP协议,HTTP协议,Socket三者之间的关系
    实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,它只是提供了一个针对TCP或者UDP编程的接口。

    WebSocket与HTTP的关系
    相同点
    1.都是一样基于TCP的,都是可靠性传输协议。
    2.都是应用层协议。
    不同点
    1.WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
    2.WebSocket是需要握手进行建立连接的。
    联系
    WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

    重点:TCP与UDP区别总结:

    1. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接;
    2. TCP提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP则不保证可靠交付;
    3. TCP协议在传送数据段的时候要给段标号;UDP协议不会;
    4. TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的,且UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
    5. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
    6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道;

    附录:


    image.png image.png

    相关文章

      网友评论

        本文标题:网络协议必知(TCP/IP、Http、Socket...)

        本文链接:https://www.haomeiwen.com/subject/trncfftx.html