Linux 网络编程理解总结

4 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了网络的分层模型,包括应用层、传输层、网络层和数据链路层的功能。在数据封装过程中,阐述了TCP和UDP在服务器端和客户端的编程步骤。TCP提供面向连接、字节流和可靠传输,而UDP则是无连接的。TCP的连接建立需三次握手。此外,还提到了字节序转换及IP地址的处理函数。
摘要由CSDN通过智能技术生成

一、网络分层模型总结

  1. 应用层:处理用于程序的逻辑
  2. 传输层:为两台主机上的应用程序实现端到端的通信
  3. 网络层:实现数据包的选路和转发。在应用层看来,两台主机是直连的,但实际上并不是,传输中会有很多节点,网络层来做传输的节点选择。
  4. 数据链路层 :实现网卡接口驱动,处理二进制数据在物理媒介上的传输

1.2 数据封装过程
在这里插入图片描述
数据发送:
在这里插入图片描述
TCP调用send or write之后,数据首先拷贝到内核发送缓冲区,再通过IP提供的服务发送出去。
TCP和UDP的框架流程:
在这里插入图片描述

TCP编程的服务器端一般步骤是:*
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
在这里插入图片描述

UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;

二、TCP/UDP
2.1. 传输层协议主要有TCP和UDP,二者有较大的区别:TCP相对于UDP的特点:面向连接、字节流和可靠传输
2.2 TCP连接过程
需要三次握手,client 给server 发起连接请求,server 回复client表示同意连接,client再回复server 确认连接。
2.3 小端字节序被称为:主机字节序,大端字节序被称为网络字节序,在数据发送到网络上之前都需要转换成大端字节序

#include <netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostlong);
unsigned long int ntohl(unsigned long int hostlong);
unsigned short int ntohs(unsigned short int hostlong);

取名:nest to host + 数据长度,长整型通常用来转换IP,短整型用来转换端口号
2.4 IP转换函数
通常我们习惯用点分十进制字符串表示IPV4用十六进制字符串表示IPV6,但是编程时候需要将其转换成整数,可以使用以下函数:

#include <arpa/inet.h>
in_addr_t inet_addr(const char * strptr);
int inet_aton(const char* cp, struct in_addr* inp);
char* inet_ntoa(struct in_addr in)

未完…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值