您的位置:首页 > 理论基础 > 计算机网络

Linux网络编程

2016-07-05 19:49 225 查看

一、TCP/IP理论基础

1、TCP/IP协议族:TCP/IP为协议族,有很多子协议,为一族。

TCP:传输控制协议    IP:网络协议

2、我们所做的为服务器应用软件开发,服务器:有相应的硬件,操作系统(电脑也为服务器,不过多了个显示)。

3、协议栈:存放很多协议的地方叫做协议栈,其范围是从协议无关层(如通用的socket层接口与设备层)到各个网络协议实现
4、传输加密过程:



5、Linux加密过程有四层,TCP/IP加密过程有七层,加密过程(TCP/IP):



书P317

6、七层应用层的优缺点

1>七层过于复杂,数据不安全

2>四层数据安全,快速

6、七层应用层的优缺点

1>七层过于复杂,数据不安全

2>四层数据安全,快速

二、相关问题

(一)、IOS七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

Linux的TCP/IP四层概念模型:应用层、传输层、网际层、网络接口



一些网络协议解释:

1、TFTP:简单文件传输协议

2、FTP:简单邮件传输协议

3、NFS(Network Filesystems):可以通过网络,让不同系统分享彼此文件

4、WAIS:

5、Telnet:远程登录协议

6、Smtp:简单邮件传输协议

7、Gopher:信息查询系统协议

8、Rlogin:实现UNIX主机之间远程登录

9、DNS(Domain Name System):用于命名组织层次结构中的计算机和网络服务

10、TCP:传输控制协议

11、UDP:数据报协议:提供简单不可靠的信息传送服务

12、IP:将数据源送到目的地

13、ICMP:控制报文协议:用于传输出错报告控制信息

14、ARP:地址解析协议,根据IP地址获取物理地址的一个TCP/IP协议

15、RARP:反向地址转换协议,将局域网中某个主机物理地址转化为IP地址

地址协议主要为:IP、TCP、与UDP协议,http为TCP转化而来

(二)

1、传输控制协议TCP(连接可靠):

1>三次握手:1、源主机A的TCP向目标主机B发送连接请求报文段    2、目标主机B的TCP收到连接请求报文段后,如同意发回确认    3、源主机A的TCP收到目标主机B的确认后,给目标主机B给出一个确认

A ---> B

 

//主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;

 

A <--- B

 

//主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)

 

//的数据包:“可以,你什么时候发?”,这是第二次对话;

 

A ---> B

 

//主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。

2、TCP与UDP区别:

1>量:UDP首部简单,每次传输数据量大,实时性好,而TCP首部相对复杂,每次传输数据量较小

2>安全:TCP需要三次握手,易受攻击,安全性较低

3>可靠:TCP通过三次握手建立一个全双工的连接,比较可靠,而UDP没有建立一个明确的连接,相对不可靠

4>速度:由于TCP要经历三次握手并且每次传播数据量较少,所以传输速度相对慢

5>阻塞:tcp要经历三次握手,相对容易堵塞。



三、五类IP:



四、socket(套接字)

(一)、UNIX网络便曾通过socket(套接字)接口实现,socket是一个文件描述符

(二)、scoket分为三类:

1、流式套接字(TCP协议中:SOCK_STREAM)

2、数据报套接字(UDP协议:SOCK_DGRAM)

3、原始套接字:主要用来测试协议

(三)、socket信息数据结构:

struct sockaddr

{

    u_short int sa_family;    //地址族

    char sa_date[14];    //14字节协议地址,即如192.162.1.120

};

//若sa_family置为AF_XXX形式,用的为IPV4,其他的为IPV6

struct sockaddr_in

{

    short int sin_famliy;    //Internet地址族

    unsigned short int sin_port    //端口号

    struct in_addr sin_addr    //    IP地址

    unsigned char sin_zero[0]    //一般置0

};

//IP地址找到服务器,端口号找到服务器上对应的服务器应用软件。

3、

struct in_addr

{

    long int s_addr;    //32位,这样IP形式:18-A9-05-2A-8D-FA

};

(四)、地址格式转换:

用户在表达地址时采用的是点分十进制表示的数值,而在通常使用的scoket编程中使用的则是32位网络字节序的二进制值,这就需要将这两个数值进行转换

1、inet_aton(const char *cp,struct in_addr *inp);

inet_aton函数用来将参数cp所指的网络地址字符串转换成网络使用的二进制数字,然后存于inp所指的in_addr结构中。in_addr结构为:

struct in_addr

{

    long int s_addr;    //32位,这样IP形式:18-A9-05-2A-8D-FA

};

2、inet_ntoa(struct in_addr in);

inet_ntoa用来将参数in所指的网络二进制的数值转换为网络地址,然后将指向此网络地址字符串的指针返回

(五)、字节序转化:

1、网络传输为大端字节序,计算机为小端字节序

字节序转化:

#incude <arpa/inet.h>

uint32_t htonl(uint32 hostlong);

uint16_t htons(uint16 hostshort);

unit32_t ntohs(uint32 hostlong);

unit16_t ntohs(uint16 hostshort);

五、网络编程

包含头文件:#include <sys/types.h>    #incldue <sys/socket.h>

1、socket:创建一个套接字

int socket (int domain,int type,int protocol);

domain:指定使用何种地址类型(IPV4,IPV6等)

type:建立何种连接

protocol用来指定socket所使用的传输协议编号,通常此参考不用管它,置0;

返回值:成功则返回Socket处理代码,失败返回-1

2、bind:用于绑定IP地址与端口号到socket(用于服务器)

int bind(int sockfd,struct *my_addr,int addrlen);

1>sockfd为socket函数成功的返回值

2>结构体指针指向的结构体:

struct sockaddr

{

    u_short int sa_family;    //地址族

    char sa_date[14];    //14字节协议地址,即如192.162.1.120

};

参数含义为将该结构体的内容,即IP地址和端口号传给socked

3>addreln即为结构体的长度

4>返回值:成功返回0,失败返回-1,错误原因存于errno中。

3、listen:用于等待连线

int listen(int s,int backlog);

1>参数s为套接字,参数backlog为设置的最大连接数

2>成功则返回0,失败返回-1,错误原因存于errno。

4、accept:用于接受socket连线

int accept(int s,struct sockaddr *addr,int *addrlen);

accept用来接受参数s的socket连线。参数s的socket的socket必须先经过bind()、listen()函数处理,当有连线进来时accept会返回一个新的socket处理代码,往后的数据传送就由新的sockfd处理,而原来的处理代码可以接受新的连线要求。连线成功时,结构体参数就会被系统填入远程主机的地址数据,参数addrlen为结构体的长度。

5、connect:用于建立socket连接

int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);

connect用于将参数sockfd的socked连接至参数serv_addr指定的网络地址

成功返回0,失败返回-1,错误原因存于errno中

6、Linux命令行修改网卡ip:

ifconfig:显示当前网卡ip

ifconfig eth0 192.168.1.120:修改网卡ip
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息