目录
1, OSI七层模型和TCP/IP协议四层模式
2,封装和拆包
3,因特网(互联网)地址(IP地址)
IP地址也分为两个部分: 网络号 和 主机号
分两步:(1)看你是哪类的地址 (2)看 netmask (子网掩码)
地址分类 IP地址范围 私有地址范围
A: 0+网络号(7)+主机号(24) 0.0.0.0~127.255.255.255 10.0.0.0 ~ 10.255.255.255
B: 10+网络号(14)+主机号(16) 128.0.0.0~191.255.255.255 172.16.0.0~172.31.255.255
C: 110+网络号(21)+主机号(8) 192.0.0.0~223.255.255.255 192.168.0.0~192.168.255.255
D: 1110+多播组号(28) 224.0.0.0~239.255.255.255 232.0.0.0~232.255.255.255
E: 11110 保留待用 240.0.0.0~247.255.255.255
4,端口号
TCP和UDP都是采用无符号16bits的端口号来识别不同的应用程序的。
IP地址只能唯一标识网络中的主机,但每台主机上并不是只跑一个网络应用程序,
它可以跑多个网络应用程序,而且网络应用从传输层来看可以分为TCP应用和UDP应用。
所以为了区分这些不同的网络应用,故提出了端口号的概念。
注意: TCP端口号和UDP端口号是独立的。
==> 一台主机上的网络应用是由: IP地址 + 传输层协议(TCP/UDP) + 端口号 确定。
端口号由 IANA(Internet Assigned Numbers Authority)管理:
众所周知的端口号: 1~1023
http(TCP应用,端口号: 80)
ftp:(TCP应用,端口号: 21)
tftp(UDP应用,端口号: 69)
...
注册端口: 1024~49151
动态或私有端口: 49152~65535
5, 字节序
在CPU内部数据是存放在寄存器(16bits,32bits,64bits)中,分高bit位和低bit位
但是内存却是按字节来编号的, 0x3000800,0x3000801
那么如果一个寄存器的数据要存放到内存中,该怎么存放呢?
1) 大端(Big-Endian)模式: 数据的高字节存放在内存的低地址存储单元
2) 小端(Little-Endian)模式: 数据的低字节存放到内存的低地址存储单元
我们怎么知道我们自己的处理器采用的是大端模式还是小端模式呢?
==> 共用体
网络字节序:
网络字节序规定发送到网络上的数据统一采用大端模式的字节序。
网络通信是在不同的主机之间进行通信,但我们发送一个整数的时候,如果都采用自己的字节序
去处理就发生问题。
因此所有的主机在进行网络通信时,都必须采用网络字节序。
6,socket
socket 即套接字文件,是一种网络编程接口,一种特殊的文件描述符,并不限于TCP/IP协议。
===> 独立于具体协议栈的网络编程接口,位于应用层与传输层之间。
socket 类型:
(1)SOCK_STREAM: 流式套接字
主要针对的是 TCP传输层协议
(2)SOCK_DGRAM: 数据报套接字
主要针对的是 UDP传输层协议
(3)SOCK_RAW: 原始套接字
直接跳过传输层