linux网络编程的基础概念

1.协议
一组规则
2. 分层模型结构
2.1 OSI七层模型:物、数、网、传、会、表、应
TCP/IP 4层模型:网(链路层/网络接口层)、网、传、应

应用层http ftp nfs ssh
传输层tcp udp
网络层ip icmp igmp
链路层以太帧协议 ARP

3.通信模型
C/S模型
client–server

B/S模型
brower–server

C/SB/S
优点:缓存大量数据,协议选择灵活优点:安全性、跨平台、开发量小 速度快
缺点:安全性、跨平台、开发量小缺点:不能缓存大量数据,严格遵守http

4.网络传输流程:
数据没有封装之前,是不能在网络中传递

5.以太网帧协议
根据ARP协议,根据IP地址获取MAC地址

6、IP协议

版本:ipv4  ipv6  ----4位
TTL: time to live。设置数据包在路由节点中的跳转上限。每经过一个路由节点,该值-1.减为0的路由,有义务将该数据包丢弃
源ip:32位---4字节    192.168.1.25---点分十进制 ip地址(string)---二进制
目的ip:32位---4字节

ip地址:可以在网络环境中,唯一标识一台主机
端口号:可以网络的一台主机上,唯一标识一个进程
ip地址+端口号:可以在网络环境中,唯一标识一个进程。

7.UDP
在这里插入图片描述

 16为:源端口号          65535
 16位:目的端口号

8、TCP
在这里插入图片描述

16位:源端口号        65535
16位:目的端口号
32序号
32确认序号
6个标志位
16窗口大小。

9.网络套接字:socket
一个文件描述符指向一个套接字(该套接字内部由该内核借助两个缓冲区实现)
在通信过程中,套接字一定是成对出现的。

10.网络字节序:
小端法(PC本地存储):高位存高地址,地位存低地址
大端法(网络存储):高位存低地址,低位存高地址
htonl -->本地–》网络(ip)
192.168.1.28–>string–>atoi–>int–>htonl–>网络字节序
htons–>本地–》网络(端口)
ntohl–>网络–》本地(ip)
ntohs–>网络–》本地(port)

ip地址转换函数
int int_pton(int af, const char *src, void *dst)
af:AF_INET\AF_INET6
src:传入,ip地址(点分十进制)
dst:传出,转换后的网络字节序的ip地址
返回值:
成功:1
异常:0,说明src指向的不是一个有效的ip地址
失败:-1
作用:本地字节序(string ip)----》网络字节序

const char *inet_ntop(int af, const void *src, char *dst socklen_t size)
af:AF_INET\AF_INET6
src:网络字节序IP地址
dst:本地字节序(string ip)
size:dst的大小
返回值:
成功:dst
失败:NULL
作用:网络字节序–>本地字节序(string ip)

11.sockaddr地址结构

struct sockaddr_in addr;
addr.sin_family = AF_INET\AF_INET6
addr.sin_port = htons(9527);
int dst;
inet_pton(AF_INET, “192.168.22.152”, (void *)&dst)
addr.sin_addr.s_addr = dst;
或者
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(fd, (struct sockaddr *)&addr, size);
ANADDR_ANY:取出系统中有效的任意IP地址,二进制类型。
在这里插入图片描述

socket函数
#include<sys/socket.h>
int socket(int domain, int type, int protocol)创建一个套接字

domain:AF_INET\AF_INET6\AF_UNIX
type:SOCK_STREAM、SOCK_DGRAM
protocol:0
返回值
		成功:新套接字所对应的文件描述符
		失败:-1 error

int bind (int socket, *const struct sockaddr addr, socklen_t addrlen);
给socket绑定一个地址结构(ip+port),绑定的自身建立连接的那个地址结构

sockfd:socket函数返回值
	struct  sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7660);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);
	addr:(struct sockaddr *)&addr
	addrlen:sizeof(addr)地址结构的大小

返回值:
成功:0
失败:-1 error

int listen(int sockfd, int backlog);
设置同时与服务器建立连接的上限数(同时进行3次握手的客户端数量)
sockfd:socket函数返回值
backlog:上限数值,最大是128

返回值:
成功:0
失败:-1 error

int accept (int sockfd, *struct socketaddr addr, socklen_t *addrlen)
阻塞等待客户端建立连接,成功的话,返回一个与客户端连接的socket文件描述符
sockfd:socket函数返回值
addr:传出参数。成功与服务器建立连接的那个客户端的地址结构
socklen_t cliet_addr_len=sizeof(addr);
addrlen:传入传出 &cliet_addr_len
入:addr的大小 出:客户端addr实际大小

返回值:
成功:能与服务器进行数据通信的socket对应的文件描述
失败 -1 ,error

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
使用现有的socket与服务器建立连接。
sockfd:socket函数返回值
addr:传入参数。服务器的地址结构
addrlen:服务器的地址结构的大小

返回值:
成功:0
失败 -1 ,error
如果不适用bind绑定客户端地址结构,采用“隐式绑定”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值