网络编程基础知识分享

协议:

一组规则

分层模型结构:

  • OSI七层模型: 物理层 数据链路层 网络层 传输层 表示层 应用层
  • TCP/IP 四层模型:网(链路层/网络接口层),网,传,应

应用层:http.ftp,nfs,ssh,telnet
传输层:tcp udp
网络层:IP ICMP IGMP
链路层:以太网帧协议,ARP

  • 网络传输流程:

数据没有封装之前,是不能在网络中进行传输的

  • 以太网帧协议:

ARP协议:根据IP地址获取Mac地址
以太网帧协议:根据Mac地址,完成数据包传输

网络应用程序设计模式:
C/S模型 B/S模型:

优点:缓存数据,提高数据传输效率		优点:开发工作量小

      协议选择灵活,可定制,可裁剪			安全性好,跨平台

       
缺点:						缺点:
	开发工作量大					数据无法缓存
	安全性差					只能采用固定协议
	不能跨平台

IP协议:

版本:ipv4,ipv6-----4位
TTL:time to live 设置数据包在路由节点中的跳转上线,每经过一个路由节点,该值减1,减为0的

路由,有义务将该数据包丢弃
源IP:32位 -----4字节
目的ip: 32位 ------4字节
192.168.1.1-----点分十进制ip地址 -----二进制
IP地址:可以在网络环境中,唯一标识一台主机
端口号:可以在网络的一台主机上,唯一的标识一个进程
UDP:
16位:源端口号 2^16=65536
16位:目的端口号
IP:

16位:源端口号    2^16=65536
16位:目的端口号
32序号
32确定序号
6个标志位
16窗口大小

linux 函数API解析:

socket 地址结构:IP+port---->网络环境中唯一标识一个进程

struct sockaddr_in addr
addr.sin_family=AF_INET/AF_INET6     man 7 ip
addr.sin_port=htons(9527);
	int dst;
	inet_pton(AF_INET,"192.168.1.1",(void *)$dst);
addr.sin_addr.s_addr=htonl(INADDR_ANY);  取出系统中有效的任意iP地址,二进制类型


bind(fd,(struct sockaddr *)&addr ,size);

socket函数:

#include <sys/socket.h>
int socket (int domain,int type,int protcol); 创建一个套接字
	domain :AF_INET AF_INET6 AF_UNIX
	type: SOCK_STREAM  SOCK_DGAM
	protocol: 0
返回值:
	成功:新套接字所对应的文件描述符
	失败: -1 errno
int bind(int sockfd ,const struct sockaddr *addr,sokelen_t addrlen);  给socket绑定一个地

址结构(ip + port)

sockfd: socket函数返回值
	struct sockaddr_in addr;
	addr.sin_familu=AF_INET;
	addr.sin_port=htons(8888)
	addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr: 传入参数(struct sockaddr*) &addr
addrlen:sizeof(addr)地址结构的大小
返回值:
	成功: 0;
	失败: -1 errno
int listen(int sockfd ,int backlog); 设置同时与服务器建立连接的上线数(同时进行3次握手的客户端数量)
	sockfd: soket 函数返回值
	backlog: 上线数,最大值 128
	返回值:
		成功: 0;
		失败:-1
int accept(int sockfd, struct sockaddr *addr,sockken_t *addrlen); 阻塞等待客户端建立连
接,成功的话,返回一个与客户端成功连接的socket文件描述符
		sockfd: socket函数返回值
		addr:传出参数  成功与服务器建立连接的那个客户端的地质结构(ip+port)
			socketlen_t clit_addr_len=sizeof(addr)
		addrlen: 传入参数  &clit_addr_len
			入:addr的大小    出:客户端addr实际大小
		返回值:
			成功:能与服务器进行数据通信的socket对应的文件描述符
	int connect(int sockfd,const struct sockaddr*addr ,socklen_t addrlen);  使用现有的

socket与服务器建立连接
		sockfd:socket函数的返回值
		addr  :传入参数,服务器的地址结构
		addrlen: 服务器的地质结构大小
		返回值:
			成功:0
			失败:-1 errno
		如果不使用bind绑定客户端地址结构,采用“隐式绑定”
server:
	socket()  创建socket
	bind()  绑定服务器地址结构
	listen() 设置监听上线
	accept()  阻塞监听客户端连接
	read(fd)   读socket获取客户端数据
	小---大写   toupper()
	write(fd)  
	close()
client:
	socket()   创建socket
	connect()  与服务器建立连接
	write()   写数据到socket
	read()    读转换后的数据
	显示读取的结果
	close()
                      服务端代码:

在这里插入图片描述
在这里插入图片描述
客户端代码:在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值