IP地址
网络中,每一台主机的唯一表示标识
名称 | 数据类型 | 常用技术 |
---|---|---|
ipv4 | uint32_t | DHCP动态地址分配、NAT网络地址转换(通常用于组建私网) |
ipv6 | uint8_t ip[16] |
在网络中传输的每条数据中都会包含两个信息:源端IP,对端IP
端口
在一台主机上标识一个网络通信进程<uint16_t
>
作用:网卡在收到一条数据后,操作系统根据数据中的端口信息,决定这条数据应该由当前主机上的哪个进程来进行处理。
一个端口只能被一个进程占用,一个进程可以使用多个端口。
网络传输的每条数据中都会包含两个信息:源端端口,对端端口
协议:
即约定,网络通信协议—网络通信中数据的格式约定
协议分层:一些组织为了实现网络互联,将复杂的网络通信环境,按照提供的不同服务,使用得当不同协议接口划分多层。
协议分层
OSI七层模型 | TCP/IP五层模型 | 层负责事事务 | 举例 |
---|---|---|---|
应用层 | 应用层 | 负责进程间的数据沟通 | HTTP、FTP |
表示层 | 传输层 | 负责进程间的数据传输 | TCP/UDP |
会话层 | |||
传输层 | |||
网络层 | 网络层 | 负责地址管理与路由选择 | 路由器;IP |
链路层 | 链路层 | 负责相邻设备之间的传输 | 交换机;ETH |
物理层 | 物理层 | 负责物理光电信号的传输 | 集线器、以太网协议 |
网络字节序
字节序:cpu对内存中数据以字节为单位进行存取的顺序
主机字节序分类:
大端字节序 | 低地址存高位 |
小端字节序 | 低地址存低位 |
二进制比特位:0x01020304,左高右低
主机字节序取决于cpu架构:x86/x86_64-小端;MIPS-大端
主机字节序对网络通信的影响:两端主机字节序不同有可能会造成数据二义
解决方案:定义网络通信字节序标准(大端字节序),不管主机是什么字节序,网络中数据必须是网络字节序,两端主机根据自己的字节序进行数据转换即可
字节序所针对的数据类型:存储单元大于一个字节的数据类型,单字节存储不涉及字节序问题(char)
标题数据的封装与分用
封装 | 原始数据在系统中通层层封装描述的过程 |
分用 | 数据到达对端主机后进行层层解析的过程 |
套接字编程
网络中通信的两端主机:客户端,服务端
客户端 | 通信中主动发起请求的一端 |
服务端 | 通信中针对请求提供服务的一端,被动接受请求的一端 |
UDP与TCP的区别
全程 | 特点 | 应用场景 | 应用举例 | |
---|---|---|---|---|
UDP | 用户数据报协议 | 无连接,不可靠,面向数据报 | 用于数据传输实时性高于安全性的场景 | 音视频传输 |
TCP | 传输控制协议 | 面向连接,可靠传输,面向字节流 | 用于数据传输安全性高于实时性的场景 | 文件传输 |
UDP协议通信程序的编写流程
服务端
- 创建套接字:在内核中创建socket结构
- 为套接字绑定地址信息:给创建的socket结构指定源端IP和端口
(a)发送时指定源端地址信息
(b)告诉OS收到的哪条数据应该交给这个socket- 接收数据:从指定的socket接收缓冲区取出数据
- 发送数据:将数据放到指定socket的发送缓冲区中
- 关闭套接字
客户端
- 创建套接字:在内核中创建socket结构
- 为套接字绑定地址信息(一般不主动绑定地址,不建议绑定)
- 发送数据:客户端在发送数据时,若检测没有绑定地址信息,则会自动的选择合适地址信息进行绑定
- 接收数据
- 关闭套接字
TCP协议通信程序的编写流程
服务端
- 创建套接字-在内核中创建socket结构
- 绑定地址信息-描述socket结构
- 开始监听-将socket状态置为LISTEN状态,告知OS可以开始处理 (客户端连接请求 当服务端收到新建连接请求时,会为客户端创建新的socket用于进行通信)
- 获取新建连接-socket
- 收发数据—使用新建连接与指定客户端进行通信
- 关闭套接字
客户端
- 创建套接字
- 绑定地址信息(不推荐)
- 向服务端发起连接请求
- 收发数据(连接成功)
- 关闭套接字