Linux网络编程——准备知识


一、TCP/IP

1、说起网络编程不得不说OSI七层模型和TCP/IP四层模型
模型对比图:
在这里插入图片描述

2、网络接口层是TCP/IP最底层,负责将二进制流转换为数据帧,并进行数据帧的发送和接收
包括的协议:
(1)ARP协议:地址解析协议。根据IP地址获取物理地址。
(2)RARP协议:逆地址解析协议。根据物理地址获取IP地址。

3、网络层负责主机之间的通信中选择数据包的传输路径,即路由;还负责数据包的检验和处理
包括的协议:
(1)IP协议:因特网协议。寻找合适的转发路由器,将数据包交给路由器转发。
(2)ICMP协议:因特网控制保温协议。用作检测网络连接。

4、传输层负责实现应用程序之间的通信服务,这种通信被称为端到端通信
包括的协议:
(1)TCP协议:传输控制协议。
(2)UDP协议:用户数据报协议。

5、应用层使用相应的应用层协议,把封装好的数据交给传输层或接收传输层的数据,并处理
包括的协议:
运行于TCP协议之上的协议:
(1)HTTP协议:超文本传输协议,用于普通浏览
(2)FTP协议:文件传输协议,用于文件传输
(3)SMTP协议:简单邮件传输协议,用来发送电子邮件
(4)Telent协议:远程登陆协议,通过一个终端登陆到网络
运行于UDP协议之上的协议:
(1)DHCP协议:动态主机配置协议,动态配置IP地址
(2)NTP协议:网络时间协议,用于网络时间同步

二、套接字

套接字(Socket)共分为3种类型
(1)流式套接字(SOCK_STREAM):可靠的,使用TCP通信
(2)数据报套接字(SOCK_DGRAM):不可靠的,使用UDP通信
(3)原始套接字(SOCK_RAW):底层

三、IP地址(IPv4)

ip地址分为两种格式:十进制点分式和32位二进制形式
相关函数
1、inet_addr函数
功能:将十进制点分式转换为二进制形式

头文件:
#include<arpa/inet.h>
函数原型:
int inet_addr(const char *strptr);
参数:
strptr:要转换的IP地址字符串
返回值:
32位二进制IP地址

2、inet_ntop函数
功能:将二进制地址形式转换为十进制点分式

头文件:
#include<arpa/inet.h>
函数原型:
int *inet_ntop(int family,void *src,char *dst,size_t len);
参数:
family:AF_INET:IPv4协议
src:要转换的二进制IP地址
dst:存放十进制地址字符串的缓冲区
len:缓冲区长度
返回值:
dst

四、端口

1、端口是一个无符号短整型,取值范围从0到65535.
2、端口号是一种资源,0到1023一般被系统程序使用
3、TCP和UDP端口号独立,互不影响
4、如果IP地址代表一个主机,端口号就是主机里的一个套接字;当套接字创建好后,需要把它和IP地址、端口号绑定

五、字节序

1、字节序又称主机字节序,分为两种:
(1)大端序:高位字节存储在低位地址,低位字节存储在高位地址;统一规定:数据以高位字节优先顺序在网络上传输,一般也称为网络字节序
(2)小端序:低位字节存储在低位地址,高位字节存储在高位地址;PC通常采用小端序,一般也称为主机字节序
2、htons函数
功能:主机字节序转换为网络字节序

头文件:
#include<netinet.h>
函数原型:
uint16_t htons(unit16_t hostshort);
参数:
hostshort:主机字节序的16bit数据
返回值:
转换字节序后的数值

3、htonl函数
功能:主机字节序转换为网络字节序

头文件:
#include<netinet.h>
函数原型:
uint16_t htonl(unit32_t hostlong);
参数:
hostlong:主机字节序的32bit数据
返回值:
转换字节序后的数值

4、ntohs函数
功能:网络字节序转换为主机字节序

头文件:
#include<netinet.h>
函数原型:
uint16_t ntohs(unit16_t netshort);
参数:
netshort:网络字节序的16bit数据
返回值:
转换字节序后的数值

5、ntohl函数
功能:网络字节序转换为主机字节序

头文件:
#include<netinet.h>
函数原型:
uint32_t ntohl(unit32_t netlong);
参数:
netlong:网络字节序的32bit数据
返回值:
转换字节序后的数值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值