Linux网络编程

来源:互联网 发布:澳门网络博客公司顶级 编辑:程序博客网 时间:2024/05/29 11:44

一、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


0 0
原创粉丝点击