zoukankan      html  css  js  c++  java
  • linux网络编程系列-TCP/IP模型

    ### OSI:open system interconnection ###

    开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层

    1. 物理层:物理定义了所有电子及物理设备的规范,数据传输单位为比特(b),本层定义规范有EIA/TIA RS-232、RJ-45等,实际是由设备如网卡等
    2. 数据链路层:对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。本层数据单位为帧(frame)。本层规范SDLC、PPP、STP等,使用设备如switch交换机等
    3. 网络层:将各个子网之间的数据进行路由选择,分组与重组。本层数据传输单位为数据包(packet)。属于本层的规范有IP、IPX、IGMP等。使用设备如路由器
    4. 传输层:提供可靠的数据传输服务,检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序
    5. 会话层:管理主机之间会话过程,包括会话建立、终止和会话过程中的管理,传输单位(SPDU)
    6. 表示层:对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等,传输单位(PPDU)
    7. 应用层:应用层与应用程序界面沟通,以达至展示给用户的目的,在此常见的协议有:HTTP、HTTPS、FTP、SSH、POP等,传输单位(APDU)

    ### TCP/IP四层模型 ###

    1. 链路层:类似OSI中物理层和数据链路层的集合,主要规范:ARP、RARP
    2. 网络层:类似OSI中网络层,主要规范:IP、ICMP、IGMP
    3. 传输层:类似OSI中传输层,主要规范:TCP、UDP
    4. 应用层:类似OSI中会话层、表示层和应用层的集合,主要协议例如:ftp、telet、qq等


    #### 端口 ####

    1. 众所周知端口(Well Known Ports):从0到1023,这些端口由IANA分配和控制,通常这些端口明确表明了某种服务,例如:21端口为ftp服务
    2. 注册端口:从1024到49151,这些端口不受IANA控制,但有IANA登记并提供使用情况清单,许多服务绑定于这些端口,这些端口同样用于许多其他的目的,例如:1433 Microsoft SQL服务端口
    3. 动态或私有端口:49152到65535,IANA不管这些端口,实际上,机器通常从1024起分配动态端口,但也有例外,SUN的RPC端口从32768开始

    #### 协议说明、封装、分用 ####

    MTU:以太网最大数据传输单元
    ICMP:传递差错信息、时间、网络信息等控制数据
    ARP:地址解析协议,映射IP地址到MAC地址
    RARP:地址解析协议,映射MAC地址到IP地址
    封装: 应用层->链路层 (IP地址转换为MAC地址)
    分用: 链路层->应用层 (MAC地址转换为IP地址)

    #### 主机A ping 主机B 数据在网络中的传输说明 ####

    1. 应用程序判断ping的是主机名还是IP地址,如果是主机名会调用gethostbyname()解析主机B,将主机名转换成一个32位的IP地址,这个过程叫做DNS域名解析
    2. ping程序向目标IP地址发送一个ICMP的ECHO包
    3. 将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址
    4. 主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A
    5. 发送ICMP数据包到主机B
    6. 主机B接收到主机A的ICMP包,发送响应包
    7. 主机A接收到主机B的ICMP响应包

    ### IP数据报格式 ###

    1. 版本:IPv4字段值为4,IPv6字段值为6
    2. 首部长度:以32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节
    3. 总长度:该字段长度为16位,以字节为单位,该字段长度包含IP的头部和数据部分,IP数据报最大可达65535个字节
    4. 标识:16位标识,用来标识一个IP包,每发送一个此值会加1
    5. TTL(TIme To Live):表示数据报最多可经过的路由器的数量,每经过一个路由器,TTL值减1,减为0时丢弃,并发送ICMP报文给源主机,TTL可以避免数据报在路由器之间不断循环
    6. 协议类型:表示IP层上承载的是哪个高级协议,协议栈知道交给哪个层的协议处理,1 ICMP 2 IGMP 6 TCP 17 UDP
    7. 网际校验和:接收方接收到发送方的数据后按照校验算法对数据进行校验,检验数据在传输过程中是否发生错误

    ### TCP报文格式 ###

    1. 源端口号与目的端口号:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接
    2. 序号:序号表示在这个报文段中的第一个数据字节序号
    3. 确认号:仅当ACK标志为1时有效,确认号表示期望收到的下一个字节的序号
    4. 头部长度:4位 ,TCP头部最多60个字节
    5. 保留位:6位,必须为0
    6. 6个标志位:URG-紧急指针有效、ACK-确认序号有效、SYN-发送连接的同步序号、FIN-表示要终止一个连接、RST-连接重置、PSH-接收方将这个报文交给应用层
    7. 窗口大小:通过窗口大小来达到流量控制
    8. 校验和:对TCP头与数据进行校验

    ### TCP连接建立三次握手 ###

    TCP A 发送SYN a->TCP B //A请求建立连接
    TCP B 发送SYN b ACK a+1 ->TCP A //确认收到请求,并请求A回复
    TCP A 发送ACK b+1 ->TCP B  //对B的请求进行回复

    ### TCP连接终止的四次握手 ###

    TCP A 发送FIN x ACK y->TCP B //A请求终止连接
    TCP B 发送ACK x+1 ->TCP A //B收到终止请求并回复给A
    TCP B 发送FIN y ACK x+1->TCP A  //B根据A的终止请求也请求终止连接
    TCP A 发送ACK y+1->TCP B //A收到终止请求并回复给B

    ### 滑动窗口协议(流量控制) ###

    1. 通告接收窗口:预防应用程序发送的数据超过对方的缓冲区,接收方使用的流量控制
    2. 拥塞窗口(cwnd):预防应用程序发送的数据超过网络所能承受的能力,发送方使用的流量控制
    3. 发送窗口取两者较小值
    4. 慢启动阈值(ssthresh:slow start threshold)
    5. 慢启动阶段:cwnd从1开始按指数增长直到ssthresh
    6. 拥塞避免阶段:cwnd按线性增长,直到拥塞,将cwnd=1,ssthresh减半

  • 相关阅读:
    CSS预编译:less入门
    JavaScript学习(五):函数表达式
    关于JavaScript new 的一些疑问
    JavaScript学习(四):面对对象的程序设计
    JavaScript学习(三):引用类型
    JavaScript学习(二):变量、作用域和内存问题
    JavaScript学习(一):基本概念
    匿名函数的this指向为什么是window?
    阿里云ECS在CentOS 6.8中使用Nginx提示:nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)的解决方法
    Centos释放缓存
  • 原文地址:https://www.cnblogs.com/Tabb/p/9267000.html
Copyright © 2011-2022 走看看