Linux C 程序 Linux网络编程(21)

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网路编程

时间: 2024-08-02 20:34:15

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

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员 网络编程 UDP与TCP

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ----------------------/* 网络编程分为两种模式:TCP和UDP 连接互联网的计算机以亿计,为了唯一的标识出每台电脑,互联网就给每台电脑分配一个 唯一独立的ip地址,通过这个ip地址就可以进行计算机之间的数据交换 我们计算机交换的数据功能我们在java中把它封住成一个叫Socket的类, 简称套接字, 端口号:计算机数据的交换一般都是电脑上的程序来维护的,而电脑上又运

Linux下的socket网络编程

linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开-读/写-关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件. socket 类型 常见的socket有3种类型如下.     (1)流式socket(SOCK_STREAM )     流式套接字提供可靠

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

在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧! 文件编程有两种方式,一是系统调用方式,二是库函数调用. 前者依赖特定的平台,后者不依赖平台. 系统调用:创建 int creat(const char *filename,mode_t mode); filename:要创建的文件名 mode:创建模式 S_IR

linux服务端的网络编程

常见的Linux服务端的开发模型有多进程.多线程和IO复用,即select.poll和epoll三种方式,其中现在广泛使用的IO模型主要epoll,关于该模型的性能相较于select和poll要好不少,本文也主要讨论该模型而忽略另外两种IO复用模型. 多线程相较于多进程开销比较小,但是要主要主线程往子线程传递数据的时候要注意变量互斥访问来保证线程安全. epoll模型在Linux2.6内核中引入的,改进了select中的一些明显设计上的缺点,具有更高的效率.主要体现在以下几个方面: 1. epo

Linux 应用程序 之 IO编程(一)

我的linux 环境是windows8.1 + VMware6.5.1+  Fedora14,参考书籍:第六章 链接:Linux应用程序开发详解(1-11).pdf 我利用一个SSH软件SSH Secure File Transfer Client 来从Linux传输文件 来张虚拟机运行Fedora的图: 下面步入正题: IO最基本操作: 1 //hello.c 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include &l

linux下简单socket网络编程

在进行socket网络编程时, 我们需要了解一些必备的知识,例如什么是socket,ipv4的地址结构,套接字类型等等,不然上来直接看代码就会晕,当初学习网络编程时,看书上的例子,总有感觉书上讲的都很简要.再或者讲的原理太多把人绕晕.我这里只想让大家简单知道怎么使用socket进行网络编程并且给出的例子可以直接使用参考. 1. 什么是socket (1) socket 可以看成是用户进程与网络协议栈的编程接口.就是说应用层可以看成是用户进程,传输层网络层数据链路层看成网络协议栈,因为这三个层的传

黑马程序员——网络编程总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 什么是网络编程? 网络编程建立在公共协议TCP/IP或者IOS协议的基础上,通过套接字的服务机制实现不同主机的联系. 网络编程的通讯要素 IP地址 网络中设备的识别,本地回环地址为127.0.0.1,主机名:localHost 端口号 用于标识不同进程的逻辑地址 传输协议 常用的协议是:UDP和TCP 获取主机网络地址对象 InetAddress  inetaddress1 = InetAdd