网络编程知识点

IP地址

网络中,每一台主机的唯一表示标识

名称数据类型常用技术
ipv4uint32_tDHCP动态地址分配、NAT网络地址转换(通常用于组建私网)
ipv6uint8_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协议通信程序的编写流程

服务端
  1. 创建套接字:在内核中创建socket结构
  2. 为套接字绑定地址信息:给创建的socket结构指定源端IP和端口
    (a)发送时指定源端地址信息
    (b)告诉OS收到的哪条数据应该交给这个socket
  3. 接收数据:从指定的socket接收缓冲区取出数据
  4. 发送数据:将数据放到指定socket的发送缓冲区中
  5. 关闭套接字
客户端
  1. 创建套接字:在内核中创建socket结构
  2. 为套接字绑定地址信息(一般不主动绑定地址,不建议绑定)
  3. 发送数据:客户端在发送数据时,若检测没有绑定地址信息,则会自动的选择合适地址信息进行绑定
  4. 接收数据
  5. 关闭套接字

TCP协议通信程序的编写流程

服务端
  1. 创建套接字-在内核中创建socket结构
  2. 绑定地址信息-描述socket结构
  3. 开始监听-将socket状态置为LISTEN状态,告知OS可以开始处理 (客户端连接请求 当服务端收到新建连接请求时,会为客户端创建新的socket用于进行通信)
  4. 获取新建连接-socket
  5. 收发数据—使用新建连接与指定客户端进行通信
  6. 关闭套接字
客户端
  1. 创建套接字
  2. 绑定地址信息(不推荐)
  3. 向服务端发起连接请求
  4. 收发数据(连接成功)
  5. 关闭套接字
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值