Linux网络编程基础

基础知识

网络分层思想

网络采用分而治之得方法设计,将网络得功能划分为不同的模块,以分层的形式有机的集合在一起。
每层向实现不同的功能,每层向上层提供服务,同时使用下层提供的服务

网络分层的作用
为了让网络功能模块化,便于管理和通信

OSI七层协议模型

OSI模型是一个理想的、通用的但尚未实现的模型

通信特点:
属于对等通信,为了使数据分组从源发出到达目的地源端OSI模型的每一层必须与目的端对应层进行通信。

七层解释

应用层

作用
最靠近用户的一层,为计算机提供应用接口,也为用户提供各种网络协议

表示层

作用
提供各种应用于应用层数据的编码和转换功能,确保一个应用系统发送的数据可以被另一个应用系统识别

会话层

作用
负责建立、管理和终止表示层实体之间的通信会话

传输层

为上层协议提供端到端的可靠透明的数据传输服务,包括差错处理和流量控制

网络层

通过IP寻址来建立两个节点之间的连接,为数据来源的传输层送来分组数据,选择核合适的路由和交换节点

数据链路层

将bit组合成字节,再将字节组合成帧,使用链路层地址访问介质并进行差错检测

物理层

实际上最终信号的传输湿通过物理层实现的

TCP/IP模型

是工业实用模型,是OSI模型的具体应用

与OSI模型的对应关系

应用层:对应OSI模型中的应用层、表示层、会话层
传输层:对应OSI模型中的传输层
网络层:对应OSI模型中的网络层
网络接口和物理层:对应着OSI中的数据链路层和物理层

图示

在这里插入图片描述
在这里插入图片描述

TCP与UDP

异同

相同点:
桶位传输层协议

不同点:
UDP无连接,不可靠
TCP有连接,可靠

TCP

是一种面向连接的传输层协议,它能提高可靠性通信。即数据无误、数据无丢失、数据无失序、数据无重复到达的通信

适用情况:
适用于对传输质量要求较高、以及传输大量数据的通信
在需要可靠数据传输的场合
软件的用户登录、账号管理相关功能

TCP三次握手

TCP连接均是由客户端连接到服务器,服务器一直处于监听状态,所以是由客户端发起连接

  1. 客户端发出请求,表示要连接到服务器
  2. 服务器回应客户端,表示确认可以连接
  3. 表示可以开始发送数据
TCP四次挥手

由于TCP是全双工的,因此每个方向都必须要单独进行关闭。

  1. 此时客户端的数据已经发送完毕,客户端首席按发出断开连接信号,等待服务器回应
  2. 服务器接收到客户端的消息,回应消息。之后服务器会继续发送未传输完毕的数据。
  3. 服务器数据发送完毕后,会向客户端发出断开连接的消息
  4. 客户端收到消息予以回应。此时客户端会等待2MSL时间(MSL最长报文段寿命),等待是否收到来自服务器的超时重传请求。

最后等待2MSL时间的作用:
若客户端最后回应服务器的消息丢失,服务器会发送超时重发请求。而这个请求会在2MSL时间内送达客户端,此时客户端会重新发送回应消息,然后再次等待2MSL时间。

UDP

是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效的数据传输
虽然UDP是不可靠的传输方式,但是依然可以通过某些手段实现可靠传输,如数据包等。

使用情况:
发送小尺寸数据(如对DNS服务器进行IP地址查询时)
在接收到数据,在给出应答较困难的网络中使用UDP
适用于广播/组播式通信中,流媒体

TCP/IP协议

TCP协议是用来检测网络传输中差错的协议
IP协议是负责随不同网络进行互联的协议

字节序

分类:
大端存储:高位字节存储在低地址端
小端存储:低位字节存储在低地址端

主机字节序指小端存储,网络字节序指大端存储

相关函数:

long是4个字节,short是2个字节
网络字节序转主机字节序:
u_long ntohl(u_long hostlong);
u_short ntohs(u_short hostshort);

主机字节序转网络字节序:
u_long htonl(u_long hetlong);
u_short htons(u_short netshort);

IP

是internet种主机的唯一标识。

分类:
IPV4:32位
IPV5:128位

相关函数:
常用的IP地址使用点分形式十进制标识,但是在一些网络相关函数中,均采用长整型方式。
所以需要一个函数对其进行转换

int_addr_t inet_addr(const char *cp);
参数: cp:点分形式的IP地址
返回值: in_addr:成功返回转换完的地址,默认字节序为大端字节序
注意: 此函数仅适用于IPV4,同时不能用于255.255.255.255的转换

子网掩码

用来指明IP地址中哪些位标识的是主机所在的子网,哪些位来标识主机的位掩码
也就是说:通过IP和子网掩码可以计算该网址对应的网段和主机地址

端口号

用来区分主机接受到的数据包是被那个进程或者线程所调用
注: TCP和UDP的端口是互相独立的

一些端口的分类:
众所周知端口:
1 ~ 1023为众所周知端口(其中1 ~ 255为众所周知端口,256 ~ 1023通常为UNIX所占用)

已登记端口:
1024 ~ 49151

动态或者私有端口:
19152 ~ 65535

网络编程

socket

基本概念:
是一个网络编程接口,独立于具体的网络通信协议
是一个特殊的文件描述符可以使用文件I/O对其进行操作
在OSI模型中主要位于会话层和传输层之间

分类:
流式套接字
字节流、用于TCP协议通信,因此提供面向连接的、可靠的数据传输服务

数据报式套接字
以独立数据包形式发送,不保证差错检测。用于UDP通信,因此提供无连接的传输服务

原始套接字
可以对较低层次协议,如IP协议、ICMP协议等直接访问,主要用于单机进程间socket通信
ping命令

在这里插入图片描述

TCP连接

服务器端

  1. 获取socket套接字:socket函数
  2. 绑定IP和端口:bind函数
  3. 开启监听,将服务器的主动连接变为被动连接:listen函数
  4. 阻塞等待服务器连接:accept函数

客户端

  1. 创建socket套接字:socket函数
  2. 绑定IP和端口(可以省略):bind函数
  3. 连接服务器:connect函数

UDP连接

服务器端

  1. 创建socket套接字:socket函数
  2. 绑定IP和端口:bind函数
  3. 阻塞等待接收数据:recvfrom函数
  4. 关闭socket套接字:close函数

客户端

  1. 创建socket套接字:socket函数
  2. 发送数据:sendto函数
  3. 关闭socket:close函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值