网络结构模式
    C/S结构即Client-Server结构,服务器负责数据的管理(提供信息供人访问) 客户机负责完成与用户的交互任务(访问别人的信息)。
    应用程序分为两部分:服务器部分和客户机部分。服务器部分是为多个用户提供服务如客户机要对数据库进行操作,服务器需要控制这个共享的数据库,将数据进行计算,并将最终的数据提供给客户机,并且还需要提供对数据库的完善的安全保护。客户机部分为用户专有,负责执行前台功能,提供出错提示在线帮助。
    优点
    为了充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再交给服务器,所以C/S结构客户端响应速度快。
    能够满足客户自身的个性化定制需求
    C/S结构有较强的事务处理能力,能实现负责的业务流程。
    安全性较高,C/S一般是面向相对固定的用户群,程序更注重流程,它可以对权限进行多层次校验,提供了安全的存取模式,一般高度机密的信息采用C/S结构合适。
    缺点
    客户端需要安装专用的客户端软件。系统软件升级时,每一台客户机都需要重新安装,维护和升级成本高。
    客户端对OS也会有限制不能跨平台。

    B/S结构 Browser-Server浏览器 服务器结构,时在WEB兴起后的一种网络结构模式,WEB浏览器是客户端主要的应用软件,这种模式统一了客户端。将系统核心功能集中到服务器上,简化了系统的开发、维护和使用。客户机上只需要安装一个浏览器如火狐 谷歌。服务器安装mysql服务器端。浏览器通过web服务器同数据库进行交互。
    优点
    成本低、维护方便、分布性强、开发简单,可以不用安装任何专门的软件就能实现在任何地方进行操作。不需要维护客户端(浏览器由 浏览器开发者维护)。系统的扩展非常容易,只要有一台能上网的电脑就行。
    缺点
    通信开销大、系统和数据安全性不高
    个性化程度不高
    协议固定 http https 无法传输大数据量的文件
    客户浏览器端和服务器端的交互是请求-响应模式, 当我们动态刷新页面 响应速度明显降低。
    MAC地址
    OSI模型第二层数据链路层,唯一48位(6字节 前3字节位网络硬件制造商编号 后3字节产品序列号)二进制号标记网卡设备。物理地址、硬件地址

    IP地址
    OSI模型第三层网络层,32位二进制通常被分割为4个8位二进制数(就是4个字节)。通常用点分十进制表示0~255.0~255.0~255.0~255。统一IP数据报(帧)格式使信息能在因特网上传播。IP地址有5种编址方式提供不同容量的网络

    4 Linux网络编程1 网络结构,tcp_ip四层模型 - 图1

    D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。
    E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。
    网络IP(网段) 主机IP
    A类,第一个字节(前8位)为网段号,剩下三个字节主机号。并且网段号最高位必须是0(导致A类网的网段号为1-126),子网掩码255.0.0.0。
    B类,前两个字节为网络号,后两个字节为主机号,网络号的最高两位必须是10(B类网络号128.0-191.255),子网掩码255.255.0.0。
    C类,前三个字节为网络号,余一个字节为主机号,网络号最高位必须是110(C类网络号192.0.0-223.255.255)。
    特殊地址0.0.0.0就是表示当前主机。255.255.255.255为广播地址。E类IP保留用于将来和实验用。IP 127.0.0.1-127.255.255.255用于本地回环测试,127.0.0.1也可以代表本地计算机。

    子网掩码
    不局限于ABCDE类网络,前面为1的就表示为网络号,比如127.0.0.0的子网掩码表示
    1000 0000.0.0.0 当前网络中只有第一位为网络号其他都是主机号。
    子网掩码也可以这么表示 192.168.100.10/1 表示只有第一位为网络号其他的为主机号,192.168.100.10/24表示当前IP中前24位为网络号后8位为主机号。

    端口
    这里特指TCP/IP协议中的端口,是逻辑上的端口。如果把IP比作房子那么端口就是出入房子的门,一个IP地址的端口号可以是0-65535。IP可以找到当前网络中的计算机,但是消息是发给当前计算机的哪个应用程序(进程)的,需要用这个端口来确定。这个端口本质上就是个读写缓冲区
    一个进程可以绑定多个端口号因为一个进程可以打开多个文件描述符,而每个文件描述符都对应一个端口号,所以一个进程可以绑定多个端口号。Linux内核会给每一个socket分配一个唯一的文件描述符,进程通过该文件描述符来区分对应的套接字。
    一个端口号一般不能被使用同种协议的多个进程绑定,只有一种情况可以进程先绑定一个端口号,然后在fork一个子进程,这样的话就可以是实现多个进程绑定一个端口号,但是两个不同的进程绑定同一个端口号是不可以的。
    1 周知端口(Well know Ports)
    是一些公认的常用端口,范围从0-1023,它们于一些特定服务紧密联系。例如80端口分给WWW服务,21端口分给FTP服务,23端口分给Telnet服务等等。我们在用浏览器访问网址时是不需要指定端口号的,因为WWW服务的默认端口就是80。如果访问的不是默认端口需要:端口号来访问,比如用8080作为WWW服务的端口则输入 网址:8080 来访问。有些系统协议使用的端口是固定的无法改变比如139端口专用于NetBIOS与TCP/IP之间的通信无法更改。
    2注册端口
    1024-49151,松散地绑定于一些服务,分配给用户进程或应用程序。

    3动态端口
    49152-65535,不固定分配哪种服务而是动态分配的。客户端访问服务器需要知道服务器的ip以及相应进程的端口号,当服务器传消息回客户端,客户端ip固定但是接受消息进程的端口号是动态的不固定的。

    linux命令 netstat -anp可以查看进程的端口号 已经对应的协议
    网络模型
    osi七层参考模型

    4 Linux网络编程1 网络结构,tcp_ip四层模型 - 图2


    物理层:指物理设备标志如网线的接口、光纤的接口类型、各种传输介质的传输速率等。在物理层传输比特流,将数字0/1信号转换为高低电平DA,以及接受高低电平信号转换为0/1信号AD。
     主要功能:利用传输介质为数据链路层提供屋里连接,实现比特流的透明传输。
      作用:实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质与物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。
      透明传输的意义就是:不管传的是什么,所采用的设备只是起一个通道作用,把要传输的内容完好的传到对方!

    数据链路层:建立逻辑连接、进行硬件地址MAC寻址、差错校验等功能。将要传输的数据封装称帧来进行传输,以及将比特组合成字节进一步组合成帧。
    负责建立和管理节点间的链路。
      主要功能:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
      具体工作:接受来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上一层的数据帧,拆装为位流形式的数据转发到物理层;并且还负责处理接受端发回的确认帧的信息,以便提供可靠的数据传输。
      该层通常又被分为 介质访问控制(MAC)和逻辑链路控制(LLC)两个子层:
        MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制。
        LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。


    网络层:进行逻辑地址寻址,为不同地理位置的网络中的两个主机之间提供连接和路径许选择。

    是OSI参考模型中最复杂的一层,也是通信子网最高的一层,它在下两层的基础上向资源子网提供服务。
      主要任务:通过路由算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与物理层之间的信息转发,建立、维持与终止网络的连接。具体的说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
      一般的,数据链路层是解决同一子网节点之间的通信,而网络层主要解决不同子网之间的通信。例如路由选择问题。
      在实现网络层功能时,需要解决的主要问题如下:
        寻址:数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一 个唯一的地址。由于各个子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)
        交换:规定不同的交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者包括报文转发技术和分组转发技术。
        路由算法:当源节点和路由节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径,由发送端传送的接受端。
        连接服务:与数据链路层的流量控制不同的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测

    传输层:定义了一些传输数据的协议和端口号(www服务 80端口),TCP(传输控制协议,传输效率低可靠性强)用于传输可靠性要求高数据量大的数据,UDP(用户数据报协议,与TCP特性相反,用于传输可靠性要求不高,数据量小的数据 如QQ聊天的数据就通过这种方式传输),主要是讲从下层接收的数据进行分段和传输 到达目的地址后再进行重组,这一层数叫做段。
    OSI的下三层的主要任务是数据传输,上三层的主要任务是数据处理。而传输层是第四层,因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。
      主要任务:向用户提供可靠的、端到端的差错和流量控制,保证报文的正确传输。
      主要作用:向高层屏蔽下层数据通信的具体细节,即向用户透明的传送报文。
    传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时,对数据进行分割,然后,传输层将数据传送到网络层,并确保数据能准确无误的传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层负责监督工作。综上,传输层的主要功能如下:               
    传输连接管理:提供建立、连接和拆除传输连接的功能。传输层在网络层的基础上,提供“面向连接”和“面向无连接”两种服务                      
    处理传输差错:提供可靠的“面向连接”和不可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认, 如果在指定的时间内未收到确认信息,数据将被重新发送。

    会话层:通过传输层(端口号 传输端口和接收端口)建立数据传输的通路。发起会话或接收会话请求。
    是OSI参考模型的第五层,是用户应用程序和网络之间的接口
      主要任务:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
    用户可以按照半双工、单工和全工的方式建立会话。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC(介质访问控制子层)地址或网络层的逻辑地址不同,他们是为用户专门设计的,更便于用户记忆。域名(DN)就是网络上使用的远程地址。会话层的具体功能如下:                          
    会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。      
    会话流量控制:提供流量控制和交叉会话功能。                   
    寻址:使用远程地址建立会话连接。
    出错控制:从逻辑上讲,会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠错。会话控制和远程过程调用均属于这一层的功能。但应注意,此层检查的错误不是通信介质的错误,而是磁盘空间、打印机缺纸等高级类的错误。

    表示层:对就收的数据进行解释,加密与解密、压缩与解压缩等。
    应用层: 网络服务与用户的接口

    4 Linux网络编程1 网络结构,tcp_ip四层模型 - 图3


    TCP/IP四层模型
    目前因特网使用的主流协议组是TCP/IP协议族。下层协议为上层协议提供服务

    4 Linux网络编程1 网络结构,tcp_ip四层模型 - 图4

    TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
    网络访问层
    网络访问层主要是管理物理网络准备所需要的数据,包括
    1、与计算机网络适配器连接。
    2、根据合适的方式调整数据传输(不同的传输介质和网络格式不同)
    3、把数据转化为电子流或脉冲的形式在传输介质上传输。
    4、对发送的数据添加错误检查信息、对接收的数据进行数据检验。
    网际层
    网际层主要是解决数据由一个计算机的IP如何路由到目标计算机的过程规范,我们的计算机消息发送出去后,是经过了哪些处理才能正确的找到目标计算机,其中包含了IP、ARP、RARP、ICMP等协议。
    MAC地址
    我们的消息如果要在网络中找到对应的目标计算机,那么我们的计算机一定要有一个唯一的地址标识才行,而能区分我们计算机唯一的标识就是我们的网络适配器地址,我们的网络适配器地址是由厂商生产时候就规定了一个复杂的英文串组成。
    IP地址
    由于MAC地址是一段复杂的字串组成不利于我们计算机进行逻辑运算,而我们的消息要在网络中快速路由到目标计算机,那么就一定需要有一套逻辑运算的规则,所以就有了ARP协议,ARP协议规定了如何把MAC地址转换为可以用于逻辑运算的数字IP地址。
    域名
    因为IP地址过长不方便进行记忆,所以为了让用户更方便记忆所以衍生了DNS的服务,DNS完成了把IP地址转为简单容易记忆的域名地址。
    传输层
    传输层主要提供以下几个功能
    1、提供应用程序接口,为网络应用程序提供网络访问的途径;
    2、提供可以从多个应用层序接收消息的功能(多路复用),同时也提供可以把消息分发给应用程序的功能(多路分解)。
    3、对数据进行错误检测、流量控制。
    TCP协议
    TCP是一个面向连接的协议主要包括以下几个特性
    1、TCP面向连接,需要进行三次握手建立连接,四次挥手断开连接。
    2、面向流的处理,可以一个个字节的方式接收数据,然后把这些数据组成数据段,发给网际层。
    3、对数据发送进行流量控制(滑动窗口协议),避免发送和接收方因为缓存写满而造成的数据丢失问题。
    3、对数据进行校验、分段的数据有重新排序功能,对错误和丢失的数据有重发机制。
    UDP协议
    1、UDP不面向连接。
    2、只有有限的错误检验机制
    3、不进行流量控制
    比较TCP和UDP
    因为TCP要进行额外的握手、挥手、数据检验、排序机制,所以TCP的性能要比UDP要慢,但是相较UDP,TCP已经做了比较完善的数据错误验证机制所以这样会省去应用层需要做的大量数据验证工作。
    如果应用层对数据的校验不那么重视的话,看可以使用性能上更优的UDP,当然也可以使用UDP传输数据,数据校验的工作放到应用层来做也行,这就会加重开发的任务上。
    应用层
    TCP/IP的应用层对应于OSI的应用层、会话层、网络层,它们分别功能如下
    1、应用层:为用户的应用提供服务并支持网络访问。
    2、会话层:负责管理网络中计算之间的通信,提供传输层不具备的连接相关功能。
    3、表示层:负责转化数据格式,并处理数据加密和数据压缩。