Linux嵌入式网络 _ 网络基础

一、网络发展历史和分层

1、Internet 的历史

  • Initernet — 冷战的产物

       Linux嵌入式网络 _ 网络基础

       Linux嵌入式网络 _ 网络基础 

2、网络互联促成了TCP/IP协议的产生

      Linux嵌入式网络 _ 网络基础 

      Linux嵌入式网络 _ 网络基础 

3、网络互联促成了TCP/IP协议的产生

      Linux嵌入式网络 _ 网络基础

      Linux嵌入式网络 _ 网络基础

       Linux嵌入式网络 _ 网络基础

4、网络的体系结构

      Linux嵌入式网络 _ 网络基础

     Linux嵌入式网络 _ 网络基础

      Linux嵌入式网络 _ 网络基础

     Linux嵌入式网络 _ 网络基础

                                                              OSI开放系统互连模型

          Linux嵌入式网络 _ 网络基础

  • 二层交换机  一般对应OSI七层模型中 的数据链路层;  较便宜       偏硬件
  • 三层交换机  一般对应OSI七层模型中 的网络层;      有贵有便宜   偏软件

                                                TCP/IP协议时Internet事实上的工业标准

一共有四层:                   Linux嵌入式网络 _ 网络基础

  • OSI模型 与 TCP/IP模型的之间的联系: 

                         Linux嵌入式网络 _ 网络基础

二、TCP/UDP特点

1、TCP/IP模型中  各层之间的 主要协议 

                                                   Linux嵌入式网络 _ 网络基础

 —  各层中 比较常用的协议:

                            Linux嵌入式网络 _ 网络基础

2、TCP协议的特点

        Linux嵌入式网络 _ 网络基础

       Linux嵌入式网络 _ 网络基础

3、UDP协议的特点

      Linux嵌入式网络 _ 网络基础

      Linux嵌入式网络 _ 网络基础

            Linux嵌入式网络 _ 网络基础

4、应用层常用通信协议

                              Linux嵌入式网络 _ 网络基础 

5、TCP/IP协议通信模型

                                  Linux嵌入式网络 _ 网络基础 

                           Linux嵌入式网络 _ 网络基础 

6、网络传输 的封包与拆包  -------  两主机网络传输实例

                    Linux嵌入式网络 _ 网络基础

三、网络编程的预备知识

1、socket

     —  socket 是网络编程的一种资源;

     —  是一个应用编程接口;是一种特殊的文件描述符(可以使用 read()  write()  close() 等操做);

     —  面象连接(Transmission  Control  Protocol  —  TCP/IP)

     —  并不仅限于TCP/IP;

     —  无连接(User  Datagram Protocol  —  UDP 和 Inter—network  Packet Exchange — IPX)

  • Socket 的类型
  1. 流式套接字(SOCK_STREAM) :提供了一个面象连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流量淹没慢的接收方。数据被看作字节流,无长度限制。
  2. 数据套接字(SOCK_DGRAM): 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收;
  3. 原始套接字(SOCK_RAM) :可以对较低层次协议如IP 、ICMP直接访问。
  • Socket 处于应用空间 于内核 之间

                                     Linux嵌入式网络 _ 网络基础

                         Linux嵌入式网络 _ 网络基础

2、IP地址

  • IP地址是Internet 中主机的标识

       —  Internet 中的主机要与别的机器通信 必须具有一个IP地址;

       —  IP地址 为32位(IPV4)和 128位(IPV6)

       —  每个数据包都必须携带目的的IP地址和源IP地址,路由器依靠此信息为数据包选择路由;

  • 表示形式: 常用点分形式,如202.38.64.10 最后都会转换为一个32 位的 无符号整数;
  • IP地址分类

       —  mobileIPV6:local IP (本地注册的IP)   roam  IP (漫游IP)

       —  IPV4 :采用32位的整数来表示; IPV6:采用128位的整数来表示;

  • 子网掩码
  • 特殊IP地址

       —  局域网IP :192.xxx.xxx.xxx     10.xxx.xxx.xxx

       —  广播IP :    xxx.xxx.xxx .255     255.255.255.255 (全网广播)

       —  组网IP :    224.xxx.xxx.xxx~239.xxx.xxx.xxx

  • IP地址的转换

       — 

       — 

       — 

       — 

       — 

3、端口号

  • 为了区分一台主机 接收到的数据包应该交给哪个进程来进行处理,使用端口号来区别;(进程也可以称之为任务)
  • TCP端口号与UDP端口号独立;
  • 端口号一般由IANA(Internet  Assigned  Numbers  Authority)管理

       —  众所周知端口:1~1023(TFP:21   SSH:22   HTTP : 80   HTTPS :  469) (1~255之间为众所周知号,256~1023端口通常由UNIX系统占用)

       —  注册端口: 1024~49150;

       —  动态或私有端口 :59151~65535

注: 保留端口:1024~5000(不建议使用)      可以使用的端口:5000~65535

  • 网络里面的通信是由   IP地址 + 端口号  来决定的;

4、字节序

  • 不同类型的CPU的主机中,内存储存多字节 整数序列 有两种方法,称为主机字节序(HBO)

        —  小端序列(little_endian): — 低序字节存储在低地址;

              (1) 将低字节存储在起始地址,称为“little_endian”字节序,Intel 、AMD等。

        —  大端序列(big_endian): — 高序字节存储在低地址;

              (1) 将高字节存储在起始地址,称为“big_endian”字节序,由ARM、Motorola等所采用。

  • 网络中传输的数据必须按网络字节序,即大端字节序;
  • 在大部分PC机上,当应用进程需要将整数送入socket前,需要转换成网络字节序;当应用进程从socket取出整数后,要转换成小端字节序;

                                 Linux嵌入式网络 _ 网络基础

                                      Linux嵌入式网络 _ 网络基础

  • PC机  、ARM 采用小端字节序; powerpc/mips 、arm用作路由器时  采用大端字节序;
  • 字节序转换函数

         — 

         — 

         —