zoukankan      html  css  js  c++  java
  • linux高性能服务器编程 (一) --Tcp/Ip协议族

    前言:

    在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程、多线程、以及进程池和线程池等都有诸多的疑惑。之前也有学习相关知识,但只是单纯的知识面了解。而没有真正的学习他们的来龙去脉。所以为了swoole打下坚实的基础,打算从《linux高性能服务器编程》一书中找到启蒙。在此作为学习总结。

    书本架构:

    书中 1-4 章节,主要介绍TCP/IP协议族网络知识、以及TCP/IP通信的过程。

    书中 5-15章节,主要解析服务器编程的主要方面(概念、模型、函数、实践)

    第一章

     1.1 TCP/IP协议族体系结构和协议 

       TCP/IP协议族是因特网最主流的协议,之前OSI将网络通信划分为7层模型,导致了网络通信的复杂性,后来就简化为目前的四层协议体系。

       传说中的TCP/IP协议大致分为四类:数据链路层、网络层、传输层、应用层。

         

      这个网络模型到底有什么用处呢?

        其实就是封装数据传输IO交互数据。也就相当于入栈 和 出栈 的一个过程

        具体流程如下:

        1)入栈 发送 请求流程 - 客户端

          (应用层)http数据

              (传输层)tcp首尾部 + http数据

          (网络层)ip首尾部 + tcp 首尾部 + http数据

            (链路层)以太网首尾部 + ip首尾部 + tcp 首尾部 + http数据 

        2)出栈 接受 请求数据 - 服务端

          (链路层)以太网首尾部 + ip首尾部 + tcp 首尾部 + http数据

          (网络层)ip首尾部 + tcp 首尾部 + http数据

          (传输层)tcp首尾部 + http数据

          (应用层)http数据

      1、数据链路层:

       数据链路层有两个常用的协议 ARP(地址解析协议)和 RARP (逆地址解析协议) 它们实现了ip地址和机器物流地址(mac地址)之间的相互转换。

         ARP 协议就是将 IP 地址转换成 MAC的物理地址;因为在数据链路层传输的datagram只能识别MAC地址,所以只能将IP地址转换成MAC物理地址再进行传输定向;

         ARP 的工作原理:发出一个ARP request 这个请求是个没有指定目的地的广播,当网络中有匹配的物理地址时,就将这个物理地址返回即 ARP reply. ARP replay 带着明确地址的目标地址 (MAC物理地址) 。

             RARP 就是 ARP的逆向,也就是 MAC物理地址转换成 IP地址。因为为了用于网络上某些无磁盘操作系统的IP地址设计的,具有磁盘的操作系统通常是从磁盘中的配置文件中读取IP地址的,但是无盘系统无法这样操作,所以就需要将MAC地址转换成IP地址。

       RARP 的工作原理:RARP 的 request 和 replay 的工作原理类似,但是发送的请求过程远比 ARP 复杂,因为 RARP request packet包中没有IP地址,就无法通过路由器进行转发,因为路由器是工作在网络层的,网络层的协议是IP协议,因此执行流程复杂。具体详情可百度一下。

      2、网络层:

       网络层最核心的协议是IP协议,由于通信的两台主机不是直接相连的,所以IP协议是实现数据包的选路和转发。并通过路由器的形式转发,轮训的重复直到寻找到合适的路由器将数据包成功送达到目标主机。或者发送失败而被丢弃。

       网络层另一个重要的ICMP协议(因特网控制报文协议):主要用于检测网络连接。它实际上不是一个真正意义上的协议,而是IP协议的一个重要补充。ICMP协议使用报文格式如图:

       

         1) 8位类型知道用于区分报文类型,ICMP报文分为两大类:一类是差错报文,另一类是查询报文

         2)有的ICMP报文还使用8位代码字段进行不同的细分。

         3)ICMP 报文使用16位校验和字段对整个报文进行循环用于校验。

      3、传输层:

        传输层协议主要有三个:TCP协议、UDP协议和SCTP协议。传输层为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发、链路的超时重连等。通常我们只讨论前两种协议。

        TCP协议(传输控制协议)提供可靠的、面向连接的和基于流的服务(流没有边界控制)。TCP协议提供超时重传、数据确认等方式确保数据被正确送达目的端,所以TCP服务是可靠的连接。

        UDP协议(用户数据报协议)和TCP协议恰恰相反,它提供应用层不可靠、无连接和基于数据报的服务。

        SCTP协议(流控制传输协议)传输电话信号设计的

        

    性能对比 TCP/IP

    UDP

    可靠性 可靠

    不可靠

    连接性 面向链接

    无连接

    报文 面向字节流

    面向报文

    效率 传输效率低

    传输效率高

    双工性 全双工

    一对一、一对多、多对多

    应用场景 效率要求低,准确性高

    效率要求低,准确性低

    阻塞控制 慢开始,拥塞避免,快重传,快恢复

    传输速度

      4、应用层:

        应用层负责处理应用程序的逻辑。数据链路层、网络层和传输层负责处理网络通信细节,必须稳定高效,所以它们都放在内核空间中实现。而应用层则在用户空间实现,因为它计算的逻辑相对庞大比如(文件传输、名称查询、网络管理等)。

        应用层有很多协议:

        ping是应用程序:不是一个协议、它是检测网络连接、是网络环境调试的必备工具。

        telnet是远程登录协议:它可以让我们在本地完成远程任务。

        OSPF开放最短路径优先:是一个动态路由更新协议,用于路由器之间的通信,告知对方各种的路由信息。

        DNS域名服务:将域名和IP地址相互映射的一个分布式数据库。(后面介绍)

        应用层协议:可以跳过传输层直接使用网络层提供服务。    

         

  • 相关阅读:
    偶然看到3年前为企业内刊写的文章——像经营自己的事业一样经营工作
    Migration 时需要留意到几个问题
    Law of Seed
    时刻准备着
    一种trace APP Engine的方法
    强烈建议博客园增加Oracle ERP或者叫PeopleSoft模块
    回味四年前的自己——细节的魅力
    一封寫給兒子的信
    职场回顾:面试精华试题大全[转]
    快速放松的11种简单方法
  • 原文地址:https://www.cnblogs.com/dump/p/11115947.html
Copyright © 2011-2022 走看看