• 写在HTTP协议之前


    1、网络模型

      OSI模型即:开放系统互连参考模型(Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。它从低到高分别是:物理层、数据线路层、网络层、传输层、会话层、表示层和应用层。

      物理层:物理层是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供有机械的,电子的,功能的和规范的特性。

      数据链路层:数据链路层是OSI参考模型中的第二层,介于物理层和网络层之间。数据链路层在物理层提供的服务基础之上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。

      网络层:网络层在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传输到目的端,从而向传输层提供最基本的端到端的数据服务。

      传输层:实现端到端的数据传输。

      会话层:利用传输层提供的服务,使应用建立和维持会话获得同步。

      表示层:表示层为在应用过程之间传输的信息提供表示方法的服务,它只关心信息发出的语法和语意。

    2、TCP协议:

      TCP协议(Transmission Control Protocol/Internet Protocol的简写)是一种面向连接的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

      TCP的特点:

        ● TCP协议是面向连接的传输层协议

        ● 每一条TCP连接只能由两个端点,每一条TCP连接只能是点对点

        ● TCP提供可靠交付的服务

        ● TCP提供全双工通信。

        ● 面向字节流

      TCP三次握手:

        第一次握手:客户端向服务端发送连接请求包,Client将标记位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

        第二次握手:服务端收到客户端发过来的报文,由SYN=1通知客户端要求建立连接,则为这次连接分配资源。并向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始顺序号码Y=0,将确认序号设置为上一次客户端发送过来的顺序号(Seq)加1。

        第三次握手:客户端收到服务端发来的包后检查确认号码(ack)是否正确,即第一次发送的Seq加1。以及标志位ACK是否为1。若正确,服务端再次发送确认包,ACK标志位位1,确认号码(ack)=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Sserver进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

                            

      TCP四次挥手:

        四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动(不会再收到数据),并不能代表连接断开,但是这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另外一方则执行被动关闭。其流程如下图

                            

        第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

        第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。

        第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

        第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSE状态,完成四次挥手。

      以上为主动关闭,另一方被动关闭的情况,在实际中还会出现同时发起主动关闭的场景,具体流程如下图:

                             

  • 相关阅读:
    C#.NET常见问题(FAQ)-如何在不同窗体之间传递值
    C#.NET常见问题(FAQ)-如何不显示窗口的关闭按钮
    C#.NET常见问题(FAQ)-如何判断两个类是否相同类型
    C#.NET常见问题(FAQ)-如何判断某个字符是否为汉字
    C#.NET常见问题(FAQ)-如何改变字符串编码
    C# 多线程编程 ThreadStart ParameterizedThreadStart
    C# 线程调用主线程中的控件
    LINQ to XML 编程基础
    LINQ to XML 建立,读取,增,删,改
    WinForm 自动完成控件实例代码简析
  • 原文地址:https://www.cnblogs.com/tester-hqser/p/9375033.html
Copyright © 2020-2023  润新知