zoukankan      html  css  js  c++  java
  • 网络编程基础之C/S架构和TCP/IP协议

    一、何谓C/S架构

      C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础,

    那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网络的通信。

    二、必备计算机基础知识

      1、众所周知,我们开发的软件都是应用软件,必须运行在操作系统上,操作系统则运行于硬件之上,

    而应用软件是无法直接操作硬件的,而是调用操作系统的接口,由操作系统操纵硬件。

      2、客户端和服务端之间信息传递的流程

        <1> 客户端产生数据,存放于客户端软件内存中,然后调用操作系统的接口将数据发送给系统内存;

        <2> 客户端操作系统收到数据后,按照客户端软件指定的规则(协议),调用网卡发送数据;

        <3> 通过网络传输数据;

        <4> 服务端软件调用系统接口,准备从操作系统内存中的数据拷到自己的内存中;

        <5> 服务端操作系统收到服务端软件的指令后,使用与客户端相同协议,从网卡接收数据,然后

    拷贝给服务端软件。

      如图所示:

    三、TCP/IP

      1、TCP/IP协议的含义?

      TCP/IP协议是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,

    又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础。

      2、起源:

        TCP/IP协议诞生于1974年,它有一个非常重要的特点,就是开放性,即TCP/IP的规范和Internet的技术都是公开的。

    目的就是使任何厂家生产的计算机都能相互通信,使Internet成为一个开放的系统,这正是后来Internet得到飞速发展的重要原因。

      3、TCP/IP的五层模型

        用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,每层都运行特定的协议,越往上越靠近用户,

    越往下越靠近硬件。五层由底层到顶层依次是物理层、数据链路层、网络层、传输层和应用层。

        <1>物理层

          物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。通过光缆、电缆、

    双绞线和无线电波等将独立的计算机连接起来。

        <2>数据链路层

          1、数据链路层的功能:定义了电信号的分组方式,因为单纯的电信号0和1没有任何意义,必须规定电信号多少为一组,

    每组对应什么意思,才能实现真正意义上的信息传递。

          2、以太网协议(即 ethernet)

            ethernet规定:一组电信号构成一个数据包,叫做‘帧’;每一数据帧分成:报头head和数据data两部分。

              head包含:18个字节。分配是发送者(源地址):6个字节;接收者(目标地址):6个字节;数据类型:6个字节。

              data包含:最短46个字节,最长是1500个字节。存放的是数据包的具体内容。

                64字节 <= head长度 + data长度 <=1518字节 ,超过最大长度限制就分批发送。

            mac地址:

              head中包含的源地址和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端

    的地址便是指网卡的地址,即mac地址。

              mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数

    表示(前六位是厂商编号,后六位是流水线号)。

            广播:有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

    ethernet采用最原始的方式,广播的方式进行通信。

        <3> 网络层

            网络层功能:引入一套新的地址用来区分不同的广播域/子网,避免信息传送的混乱,这套地址即网络地址。

            IP协议:

              1、规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,

            它规定网络地址由32位2进制表示;

              2、范围0.0.0.0-255.255.255.255;

              3、一个ip地址通常写成四段十进制数,例:192.168.10.1。

            子网掩码:  

               含义: 

                                             所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址192.168.10.1,如果已知网络部分是前24位,主机部分是后8位,

                那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

               作用:

                  子网掩码是用来标识一个IP地址的哪些位是代表网络位,以及哪些位是代表主机位。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

                       区分网络位和主机位是为了划分子网,就是把一个大网络分成多个小网络。

            IP地址分类:

              IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。       

        1. A类IP地址:一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
        2. B类IP地址 :一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
        3. C类IP地址:一个2C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
        4. D类地址用于多点广播(Multicast): D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
        5. E类IP地址 以“llll0”开始,为将来使用保留。

            

            注意:全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址;回环地址(127.0.0.1) 又称为本机地址。

            IP报文:

              IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。

            ARP协议:

              我们已经知道通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议。

            ARP协议功能:广播的方式发送数据包,获取目标主机的mac地址。

            协议工作方式:每台主机ip都是已知的。

            协议工作流程:以主机192.168.1.10/24 访问 192.168.1.11/24(/24代表这个二进制掩码的前24位是1,后8位是0 换算成10进制数字就是255.255.255.0)

              一、首先通过ip地址和子网掩码区分自己所处的子网

      

              二、分析192.168.1.10/24与192.168.1.11/24处于同一网络(如果不是同一网络,那么目标ip为192.168.1.11/24,通过arp获取的是网关的mac)。

              三、这个包会以广播的方式在发送端所处的子网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac。

            ICMP:IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

            当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会.

            所以我们一般主要用ICMP协议检测网络是否通畅,基于ICMP协议的工具主要有ping 和traceroute。

            ping:利用ICMP协议包来侦测另一个主机是否可达。ping程序来计算间隔时间,并计算有多少个包被送达。用户通过丢包率就可以判断网络大致的情况。

            traceroute:用来查看从当前主机到某地址一共经过多少跳路由。

        <4> 传输层

          我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序呢?答案就是端口,端口即应用程序与网卡关联的编号。

          传输层功能:建立端口到端口的通信。

          注意:端口范围0-65535,0-1023为系统占用端口

          传输层协议包括两种:TCP和UDP,如下图所示: 

      

          TCP协议:是一种可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

              为何TCP协议可靠,因为只要没得到确认,就重新发送数据报,直到得到对方的确认为止。

          UDP协议:是不可靠的传输,“报头”部分为8字节,总长度不超过65535字节,可以放进一个IP数据包。

        TCP协议和UDP协议的比较:

          TCP协议虽然安全性高,但网络开销大,而UDP协议虽然不如TCP可靠,但网络开销小,在如今这个网络安全已经相对较高

    的情况下,为保证传输效率,UDP协议还是一种不错的选择。

    以上内容摘录整理自https://www.luffycity.com/python-book/di-6-zhang-wang-luo-bian-7a0b-socket-kai-fa/62.html

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/schut/p/8661297.html
Copyright © 2011-2022 走看看