zoukankan      html  css  js  c++  java
  • IOS 开发 网络发展史(基础知识)

    一 网络的七层架构

    物理介质 
    七层模型在Windows程序下的体现: 
    物理层----就是我们看得见的网卡。网卡的作用就是把线路发送过来的高频电流转化数据包,然后传给网卡驱动程序,同是也把网卡驱动程序传送过来的数据包转化成电信号传送出去。定义通过网络设备发送数据的物理方式:是网络媒介和设备间的接口。 
    数据链路层----是网卡驱动程序。定义控制通信连接的程序;封包;监测和改正包传输错误。 
    网络层----即NDIS,NDIS提供网络接口。决定网络设备间如何传输数据;根据唯一的网络设备地址选择包;提供流和拥塞控制,以阻止同时网络资源的损耗。 
    传输层----即TCP,TCP协议的封包处理是在这一层进行的。管理网络中首尾连接的信息传送;提供通过错误恢复和流控制装置传送可靠且有序的包;提供无连接面向包的传送。 
    会话层----即SPI,SPI是服务提供者接口,管理用户间的会话和对话;控制用户间的连接和挂断连接;报告上层错误。 
    表示层----API,它为应用程序提供接口。API负责SPI与应用程序之间的通信;定义不同体系间不同数据格式;具体说明独立结构的数据传输格式;编码和解码数据;加密和解密数据;压缩和解压缩数据。 
    应用层----EXE,就是大家常见的应用程序。定义用于网络通信和数据传输的用户接口程序;提供标准服务,比如虚拟终端、文档以及任务的传输和操作。 
    七层协议与Windows结构的生产力映射如下: 
    7 应用层 7 应用程序(exe) 
    6 表示层 6 Winsock API (dll) 
    5 会话层 5 SPI(dll) 
    4 传输层 4 TDI(vxd、sys) 
    3 网络层 3 NDIS(vxd、sys) 
    2 数据链路层 2 网卡驱动程序(vxd、sys) 
    1 物理层 1 网卡

    二 TCP的三次握手

    理解:窗口和滑动窗口
    TCP的流量控制
    TCP使用窗口机制进行流量控制
    什么是窗口?
    连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端
    
    接收方发送的确认信息中包含了自己剩余的缓冲区尺寸
    
    剩余缓冲区空间的数量叫做窗口
    
    2. TCP的流控过程(滑动窗口)

    ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
    SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,  SYN置1就表示这是一个连接请求或连接接受报文。
    
    FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
    三次握手
    
    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
    
    位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
    
    Sequence number(顺序号码) Acknowledge number(确认号码)
    
    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
    
    第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
    
    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
    
    完成三次握手,主机A与主机B开始传送数据。
    关闭连接:
    
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
    
     CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
    
    (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 
    
    (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 
    
    (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 
    
    (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。 
    
    TCP采用四次挥手关闭连接如图2所示。

     

  • 相关阅读:
    python正则表达式
    装饰器和生成器和迭代器
    进一步认识函数
    python:关于函数的初认识
    python的 随手记----字符编码与转码
    python:元祖与字典与集合的粗浅认识
    python:模块导入之浅认识
    java socket编程
    Spring框架下的单元测试方法
    ModelDriven机制及其运用
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/8094921.html
Copyright © 2011-2022 走看看