• OSI七层以及TCP/IP参考模型


    学习C++socket通信,先复习下计算机网络里的一些知识。

    OSI即Open System Interconnection(开放式系统互联),它提供了一个网络中计算机通信网络系统结构模型的参考。

    OSI共有七层。

    OSI协议  功能
    应用层 文件传输,文件服务,电子邮件,虚拟终端  

    表示层

    数据格式化,数据加密,代码转换               

    会话层

    解除或建立与其他节点的联系   

    传输层

    提供端对端的接口

    网络层

    为数据包选择路由

    数据链路层

    帧传输,错误检测

    物理层

    传输二进制数据

                                                                                                           TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。有四层结构。

    1.应用层对应OSI的5、6、7层。

    2.传输层对应osi的传输层。有两个重要的协议(TCP和UDP)。TCP是连接的、可靠的通信协议,而UDP是无连接的、不保证可靠的通信协议,即尽最大努力交付。

    3.网际互联层(图中的网络互连层)对应OSI的网络层。主要解决主机到主机的通信问题。。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。

    4. 网络接入层(即主机-网络层)
    网络接入层与OSI中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议ARP)工作在此层,即OSI参考模型的数据链路层。

     TCP的3次握手

                                                

    ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

    SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,  SYN置1就表示这是一个连接请求或连接接受报文。

    第一步:客户端向服务器端发起连接请求,发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

    seq是序号。

    第二步:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    第三步::客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手,就可以传输数据了。

     TCP断开连接:

    第一步:客户端没有数据需要发送,发送一个FIN包(即使没数据也占用一个序号)请求断开连接。

    第二步:服务端对客户端发送的信息进行确认。发送一个ACK包。(此时可能服务端还有数据需要发送)

    第三步:服务端发送完需要发送的数据后,发送FIN包和ACK包,确认序号和上一个ack一样,此时为半关闭状态。

    第四步:客户端收到消息,发送ACK包,等待2MSL后,关闭连接。MSL(maximum segment lifetime)是一个数据报在网络中单向发出到认定丢失的时间,一个数据报有可能在发送图中或是其响应过程中成为残余数据报,确认一个数据报及其响应的丢弃的需要两倍的MSL.

  • 相关阅读:
    [C++] static member variable and static const member variable
    [C++] const inside class VS const outside class
    [C++] OOP
    [C++] Function Template
    [C++] right value reference
    [C++] advanced reference
    [C++] const and char*
    [C++] c Struct VS c++ Struct
    [C++] decltype(auto) C++ 11 feature
    easyui-validatebox 的简单长度验证
  • 原文地址:https://www.cnblogs.com/gardener/p/6026349.html
Copyright © 2020-2023  润新知