网络编程基本概念

ISO/OSI模型 VS TCP/IP模型

ISO/OSI模型是一种理论模型,TCP/IP模型是实际使用的一种模型

TCP: Transmission Control Protocol,传输控制协议,类似于打电话

UDP: User Datagram Protocol,用户数据报协议,类似于写信

IP: Internet Protocol互联网协议,是上述两种协议的底层协议

网络编程基本概念

IP地址(IP Address)

该设备在互联网中的唯一标识, 本质就是由32位二进制组成的整数(0~4294967295)(ipv4),也有128位二进制组成的整数(ipv6),日常生活中, 采用点分十进制表示法来描述IP地址, 就是将每个字节的二进制转换为一个十进制的整数, 不同的整数之间用小数点分隔0x01020304 => 1.2.3.4(整数=>字符串)
IP地址==网络地址+主机地址, 根据网络地址和主机地址的位数不同,分为以下4类
A类:0+7位网络地址+24位主机地址
B类:10+14位网络地址+16位主机地址
C类:110+21位网络地址+8位主机地址
D类:1110+28位多播地址

网络地址位数越多, 网络个数越多, 但是每个网络的主机个数比较少

当下的技术为了延长ipv4的使用寿命, 这种分类已经不适用了

端口号(Port Number)

网络编程需要提供: IP地址+端口号
IP地址(IP Address) :可以定位到具体的某台设备中
端口号(port number) :可以定位到具体的某个进程中,端口号是unsigned short, So 表示的范围是0~65535, 其中0~1024之间的端口号被系统占用, 因此编程中需要从1025起开始使用

字节序(byte order):

小端系统 :将低位数据存放在低位内存地址的系统
大端系统 :将低位数据存放在高位内存地址的系统
eg:对于数据0x12345678:
小端系统按照地址从小到大依次存放次序:0x78,0x56,0x34,0x12 (是78而不是87是因为最小单位是byte)
大端系统按照地址从小到大依次存放次序:0x12,0x34,0x56,0x78

为了实现不同主机之间的通信, 一般会将所有发送到网络中的多字节整数先转换为网络字节序再发送, 而将所有从网络中接受到的多字节整数先转换为主机字节序(本机)再解析, 而网络字节序本质就是大端系统的字节序

tcp

Transmission Control Protocol:

面向连接:类似打电话,电话不通就不说话, 建立连接进行通信断开连接, so 整个通信的过程中全程保持连接

可靠:每发一个数据包都会等待接收方的反馈信息, 如果没有反馈,就认为没收到,就再发一遍, 数据的接受方会实时地通知发送方还可以接收的数据大小, 避免造成缓冲区的溢出现象

有序:为数据包每个字节都编号, 如果收到的顺序是乱的, 可以根据数据的编号进行重新排序, 这样就保证了收到的数据的顺序和发的时候一样

全双工的字节流通信:用字节流的通信方式需要接受方手动解码才能得到正确的含义,eg: 用4byte发送一个int,接收方收到的是4个1byte,所以需要手动解码 //字节流: 以字节为单位不断传输数据

服务器压力大, 资源消耗比较高, 效率比较低连着, 不说话, 就会浪费资源;接收方不反馈的话就会一直发

几种常见的解码方法

约定5byte一个包, 每次都解码5byte的长度

用特殊符号(eg: $)在发送时把数据切开

每个数据包的前端都带上这个数据包的大小

udp

User Datagram Protocol:

非面向连接: 类似于写信, 写好就发, 不管收没收到, 在通信的整个过程中不需要全程保持连接;

不保证数据传递的可靠性, 不需要接收方的反馈, 数据接受方也不会实时通知数据发送方还可以发送的数据大小

不保证数据传递的有序性

也是一种全双工的数据报通信方式

服务器的压力比较小, 资源消耗比较低, 发送的效率比较高
Note: 数据报 VS 字节流: 数据报是用水桶打水, 字节流是水管)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d700bfbaa77e5708646b30d0cb9e77b0.html