Linux网络编程
网络编程必备的理论基础
网络模型,地址,端口,TCP/IP协议

TCP/IP协议是目前世界上使用最广泛的网络通信协议
日常中的大部分应用使用该系列协议(浏览网页,收发电子邮件,QQ聊天等)

1.网络模型与协议
TCP/IP各层功能:
    (1).网络接口层  TCP/IP最下一层,包含多种逻辑链路控制和媒体访问协议
    (2).Internet层  网络层负责在发送端和接收端之间建立一条虚拟路径  主要协议IP协议
            IP协议不能保证数据完整到达目的地,这个任务由他上面的传输层完成。
            这一层的ARP协议(地址解析协议)和RARP(反地址解析协议)用于IP地址和物理地址(通常是网卡地址的互相转换)。
            如果数据在传输过程中出现问题,该层的ICMP协议产生错误报文
    (3).传输层      
          TCP(传输控制协议)协议或者UDP(用户数据报协议)协议,
              差错控制,传输确认,丢失重传
              
          
    (4).应用层
            面向用户提供一系列的访问网络协议:传输文件的ftp协议,远程登录的telnet协议发送电子邮件的smtp协议,最常用用于浏览网页的http协议
            近几年来十分流行的点对点共享文件协议,BitTorrent协议,该协议基于http协议
            
            TCP/IP由许多协议构成协议簇,如,TCP,IP,UDP,FTP,HTTP
            
2.地址
    为了使网络上的计算机互相通信,必须有一个唯一的标识符来区分网络上的每台计算机
    有两种标识符可以使用:
    物理地址和IP地址
    
    对以太网来说,物理地址是48位的位串,此地址在网卡生产过程已经固定,不可更改,全球唯一。
    有多块网卡,一个网卡代表一个网络接口,成为多宿主计算机。

3.IP地址
TCP/IP协议能够使计算机进行与底层网络无关的通信,底层网可以是以太网,令牌环网,或其他类型网。
由于物理地址依赖于底层网络,不同的底层网路采用不同的物理地址。
必须使用与底层网络无关的通用地址来标识网络上的计算机。
IP由32位比特位组成:计算机所在的网络号和该网络给该计算机分配的主机号。
IP地址按照一定的格式分为五类:
A,B,C,D,E类

A类: 0+网络ID+主机ID(24位) 1.0.0.0 - 127.255.255.255
B类:  10+网络ID+主机ID(16位)  128.0.0.0 - 191.255.255.255
C类: 110+网络ID+主机ID(8位) 192.0.0.0 - 223.255.255.255
D类: 1110+组播地址  224.0.0.0 - 239.255.255.255
E类: 11110+保留地址 240.0.0.0 - 247.255.255.255

TCP/IP上的每台主机还有一个32位子网掩码    :用来区分IP地址的网络号和主机号

将子网掩码和IP地址按位与可以得到IP地址的网络号,网络号是一台主机所处的网络的编号,
eg:主机IP:222.197.168.244 子网掩码是 255.255.255.0  按位与 = 222.197.168.0 ,那么这台机所处的网络编号为222.197.168.0
    
近年来,随着越来越多的计算机介入互联网,IP地址快耗尽。于是提出IPv6,使用128位来标识IP地址

4.端口
TCP,UDP协议采用16位端口号来识别他们。
端口号是一个无符号的整数,范围是0-2的16次方 0- 65535
端口号分两部分:
  (1).保留端口,范围0-1023,由权威机构规定用途 , 如:21TCP端口用于FTP协议。80TCP端口由HTTP协议专用。
 
 
5.IP协议
网络层最重要的协议
无论传输层使用何种协议,都要依靠IP协议来确认到达目的计算机的路由。
IP协议主要用来确定路由。
当到达同一个目的地有多个路由时,IP协议会选择一条最短的路由将数据分组传输到目的计算机。
IP协议还定义一组规则:
  (1),目的地不存在,不可达,丢弃传送中的数据分组。
  (2).定义数据单元格式,叫做IP数据报,由IP首部和数据两部分组成
 
6.用户数据报协议UDP
位于传输层,在网路层上在应用层下。UDP协议向应用程序提供一种面向无连接的服务。不需要建立连接。

7.传输控制协议TCP
TCP提供一个面向链接的,可靠的数据服务。
通信过程:
  (1).连接的发起包向目标计算机发送一个请求建立连接的数据包
  (2).服务器收到请求,对客户端的同步信号做出响应,并发送自己的同步信号给客户端
  (3).客户端对服务端发过来的同步信号做出响应,连接建立完成,可以进行数据传输了。
 
  关闭:
  (1);请求主机发送一个关闭连接的请求给另一方
  (2);另一方收到关闭链接的请求后,发送一个接收请求的确认数据包,并关闭socket链接。
  (3);请求主机手到确认数据包,发送一个确认数据包,告知另一方发送的确认包已收到,请求主机关闭他的socket连接。
 
 8 套接字编程

9.编写安全的代码
造成安全问题的原因:
    用户或管理员缺乏安全意识,TCP/IP协议固有缺陷,程序中的安全漏洞。
    威胁最大的是缓冲区溢出漏洞
    
 (1).网络攻击
         常见的网络攻击方法:
             (1).扫描和探测
             (2).监听
             (3).拒绝服务
             (4).恶意软件
     (2).缓冲区溢出
         向缓冲区内填充的数据超过了缓冲区的容量,溢出的数据覆盖在了原来的合法数据上。
         根本原因:C/C++语言不安全,没有    机制检查引用和数组,指针的边界,导致越界访问。
         Linux中,进程在内存中的数据分为3部分:文本段,数据段,堆栈段
         文本段:可执行代码和只读数据,通常属性是只读
         数据段:存放全局变量,静态变量,
         堆栈段:临时变量,函数参数在栈上,由malloc函数动态分配的内存称为堆。
         
         程序从外部接收输入数据 -- 系统分配内存存放数据 (缓冲区)-- 当输入超过缓冲区容量时,数据会存储到缓冲区之后,覆盖了原来缓冲区之外的合法数据。
         
         防止缓冲区溢出:
         对程序定义的缓冲区做严格的边界检查。
           避免使用strcpy漏洞函数。使用strncpy或memcpy代替
         
     (3).输入检查:
         
     进一步学习:TCP/IP详解 ,用TCP/IP进行网络互联 ,UNIX网路编程

Linux C 程序 Linux网络编程(21)的更多相关文章

  1. Linux下高并发网络编程

      Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...

  2. 编写Java程序,实现一个简单的echo程序(网络编程TCP实践练习)

    首先启动服务端,客户端通过TCP的三次握手与服务端建立连接: 然后,客户端发送一段字符串,服务端收到字符串后,原封不动的发回给客户端. ECHO 程序是网络编程通信交互的一个经典案例,称为回应程序,即 ...

  3. linux服务器开发三(网络编程)

    网络基础 协议的概念 什么是协议 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲传输文件.规定: 第一次,传输文件名,接收方接收到文件名 ...

  4. Linux IO模型和网络编程模型

    术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...

  5. linux应用程序开发-文件编程-系统调用方式

    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...

  6. linux服务端的网络编程

    常见的Linux服务端的开发模型有多进程.多线程和IO复用,即select.poll和epoll三种方式,其中现在广泛使用的IO模型主要epoll,关于该模型的性能相较于select和poll要好不少 ...

  7. linux应用程序开发-文件编程-库函数

    ---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...

  8. Linux学习 : Socket 网络编程入门

    一.socket()函数 int socket(int domain, int type, int protocol); domain:即协议域,又称为协议族(family).常用的协议族有,AF_I ...

  9. linux下c的网络编程---转载

    1.tcp协议

随机推荐

  1. 计算运行时间工具timeit

    Table of Contents 1. timeit的功能和用法 2. 其它 3. 参考资料 timeit的功能和用法 timeit 模块提供了测试一小段代码运行时间的功能.我前面有一篇文章用它来测 ...

  2. Java最重要的21个技术点和知识点

    (五)Java最重要的21个技术点和知识点之网络编程.泛型.编程规范相关 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚 ...

  3. app 性能优化的那些事(二)

    来源:树下的老男孩 链接:http://www.jianshu.com/p/2a01e5e2141f 这次我们来说说iOS app中滑动的那些事.iOS为了提高滑动的流畅感,特意在滑动的时候将runl ...

  4. FileSystemWatcher触发多次Change事件的解决办法 .

    最近要用到FileSystemWatcher来监控某个目录中的文件是否发生改变,如果改变就执行相应的操作.但在开发过程中,发现FileSystemWatcher在文件创建或修改后,会触发多个Creat ...

  5. IE 9渲染overflow的bug及解决

    问题: table父级元素div设置overflow:auto, 当触发table中的checkbox,dropdownlist事件控件时,父级div高度会自动增加(在底部增加空白行). 解决方案: ...

  6. Android进阶笔记18:选用合适的IPC方式

    1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...

  7. 【阿里云产品公测】阿里云ECS服务器,PTS网站性能

    作者:阿里云用户321房产网 系统环境:CentOS 6.3 运行组件:Nginx + php + mysql + 缓存加速为eAccelerator 运行网站:基于phpcms开发模板:321房产网 ...

  8. ubuntu系统下安装gstreamer的ffmpeg支持

    当您在安装gstreamer到您的ubuntu系统中时,为了更好地进行流媒体开发,需要安装ffmpeg支持,但一般情况下,直接使用 sudo apt-get install gstreamer0.10 ...

  9. 20145102 《Java程序设计》第4周学习总结

    20145102 <Java程序设计>第4周学习总结 教材学习内容总结 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承.如果正确判断使用继承的时机,以 ...

  10. 自定义Spring event

    通过Spring自定义event 首先我们定义我们的event类 package com.hyenas.spring.custom.event; import org.springframework. ...