[2] 基本概念
1. 封包
对数据的一种打包,俗称数据包,类似于“包裹”
2. 协议
双方规定好的数据包格式,类似于包裹上的收件人信息
3. 互联网(Internet)
连接网络的网络,称为internet
(1) 早期
data
-------------------------------------------------------
TCP(Transmit Control Protocol) UDP + data
-------------------------------------------------------
IP + TCP(UDP) + data
-------------------------------------------------------
ARPAnet 封包无线网 封包卫星网
TCP(可靠)
面向连接(电话)
纠错(保证数据不丢失、无错误、不重复到达、顺序不乱)
UDP(不可靠)
不是面向连接
不纠错
IP(Internet Protocol)
(2) 现在(TCP/IP)
TCP/IP主协议没变,但是增加了很多协议,具体协议见PPT(了解),
(3) 理想
data 应用层
-------------------------------
应用协议 表示层
-------------------------------
建立连接 会话层
-------------------------------
TCP(UDP)协议 传输层
-------------------------------
IP协议 网络层
-------------------------------
硬件适应的协议 数据链路层
-------------------------------
硬件 物理层
4. RFC(Request For Comments)征求意见文档
[3] 家庭网络(《家庭网络.bmp》)
1. A电脑如何跟局域网内部设备通讯?
telnet本地linux计算机
2. A电脑如何跟局域网外部的设备通讯?
百度
[4] 资料和工具
1. 资料
TCP/IP详解卷一
2. 工具
WireShark
[5] 设置网络参数
1. IP地址
(1) 作用
唯一标识一台主机
(2) 组成
网络地址 + 主机号
网络地址 用于区分两台电脑是否在同一个网络内,类似电话号码的区号
主机号 用于区分同一个网络中的两台机器
(4) 长度
IPv4 4字节(32位)
IPv6 16字节(128位)
(5) 字节序(大端--网络字节序)
(6) 表示
将4字节的数分别转换成10进程的数,用“.”分隔来表示IP地址,称点分十进制
例: 192 .168. 0 .1
11000000 10101000 00000000 00000001
(7) 分类
网络地址主机号 高位规定 地址范围 私有地址(局域网地址) 保留
A 1 3 0 0.0.0.0 - 127.255.255.255 10.x.x.x 127.x.x.x(环回)
B 2 2 10 128.0.0.0 - 191.255.255.255 172.16.x.x-172.31.x.x 169.254.x.x(没有DHCP服务器)
C 3 1 110 192.0.0.0 - 223.255.255.255 192.168.x.x
D 组播 1110
E 保留
网络地址 主机地址为0
广播地址 主机地址为全1的,如: 192.168.0.255
2. 子网掩码(mask)
IP地址 & mask = 网络地址
例:
十进制 二进制
192.168.0.1 11000000 10101000 00000000 00000001
& 255.255.255.0 11111111 11111111 11111111 00000000
------------------------------------------------------------
192.168.0.x 11000000 10101000 00000000 00000000
3. 网关(Gate)
A电脑<---->网关<----->internet
4. DNS
域名( www.baidu.com)--->ip地址
[6] telnet--->虚拟机
1. 将虚拟机的IP地址转换为他的MAC(网卡)地址 ARP
1. A电脑如何跟局域网内部设备通讯?
telnet本地linux计算机
2. A电脑如何跟局域网外部的设备通讯?
百度
[4] 资料和工具
1. 资料
TCP/IP详解卷一
2. 工具
WireShark
[5] 设置网络参数
1. IP地址
(1) 作用
唯一标识一台主机
(2) 组成
网络地址 + 主机号
网络地址 用于区分两台电脑是否在同一个网络内,类似电话号码的区号
主机号 用于区分同一个网络中的两台机器
(4) 长度
IPv4 4字节(32位)
IPv6 16字节(128位)
(5) 字节序(大端--网络字节序)
(6) 表示
将4字节的数分别转换成10进程的数,用“.”分隔来表示IP地址,称点分十进制
例: 192 .168. 0 .1
11000000 10101000 00000000 00000001
(7) 分类
网络地址主机号 高位规定 地址范围 私有地址(局域网地址) 保留
A 1 3 0 0.0.0.0 - 127.255.255.255 10.x.x.x 127.x.x.x(环回)
B 2 2 10 128.0.0.0 - 191.255.255.255 172.16.x.x-172.31.x.x 169.254.x.x(没有DHCP服务器)
C 3 1 110 192.0.0.0 - 223.255.255.255 192.168.x.x
D 组播 1110
E 保留
网络地址 主机地址为0
广播地址 主机地址为全1的,如: 192.168.0.255
2. 子网掩码(mask)
IP地址 & mask = 网络地址
例:
十进制 二进制
192.168.0.1 11000000 10101000 00000000 00000001
& 255.255.255.0 11111111 11111111 11111111 00000000
------------------------------------------------------------
192.168.0.x 11000000 10101000 00000000 00000000
3. 网关(Gate)
A电脑<---->网关<----->internet
4. DNS
域名( www.baidu.com)--->ip地址
[6] telnet--->虚拟机
1. 将虚拟机的IP地址转换为他的MAC(网卡)地址 ARP
2. A电脑通过虚拟机的mac地址发送数据包虚拟机 TCP
3. 虚拟机通过A电脑的mac地址发送数据包给A电脑 TCP
4. A电脑通过虚拟机的mac地址发送数据包虚拟机 TCP
5. A电脑通过虚拟机的mac地址发送数据包给虚拟机 telnet
IE---->baidu
1.
www.baidu.com--->ip地址 DNS协议
2. 通过网关的IP地址转换为他的mac地址 ARP
3. 通过网关的MAC地址发送数据(发给baidu)包给网关 TCP
4. baidu-->网关--->A电脑 TCP
5. A电脑-->网关--->baidu TCP
6. A电脑-->网关--->baidu http
2. 通过网关的IP地址转换为他的mac地址 ARP
3. 通过网关的MAC地址发送数据(发给baidu)包给网关 TCP
4. baidu-->网关--->A电脑 TCP
5. A电脑-->网关--->baidu TCP
6. A电脑-->网关--->baidu http
[7] 端口号
(1) 作用
每一个应用程序进程有一个端口号,通讯时区分数据包属于哪个应用程序进程
(2) 分类
1 - 1023 知名端口号(已经分配给标准应用服务软件)
1024 - 5000 注册端口号(非标准应用服务软件的软件可以申请的端口号范围)
5000 - 65535 动态分配的端口号(系统动态分配给应用程序使用的)
(3) 长度
2字节(16bit)
[8] 数据包格式
ARP数据包结构
-----------------------------------
| dest mac | src mac | arp data |
------------------------------------
TCP
-------------------------------------------------------------------
| dest mac | src mac | dest ip | src ip | dest port | src port |
-------------------------------------------------------------------
http 或 telnet
---------------------------------------------------------------------------
| dest mac | src mac | dest ip | src ip | dest port | src port | data
---------------------------------------------------------------------------
必须要设置的参数?
1. dest ip
2. dest port
[10] socket
1. 历史
1982 本地通信
1986 网络通信
2. 原理
一种特殊的文件
3. 目的
将网络操作模拟成文件操作
4. 类型及用途
SOCK_STREAM 流式套接字 TCP
SOCK_DGRAM 报文套接字 UDP
SOCK_RAW 原始套接字 IP、ICMP
[11] ip转换
1. 头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
2. 数据结构
typedef unsigned int in_addr_t;
struct in_addr
{
unsigned int s_addr;
};
3. 函数
(1) ip字符串----> 整数(大端)
/*
* @param[in] cp ip字符串
* @param[out] inp 二进制形式(网络字节序 大端)的ip地址
* @return @li !0 ip字符串是有效的ip地址
*/
int inet_aton(const char *cp, struct in_addr *inp);
/*
* @param[in] cp ip字符串
* @return 二进制形式的IP地址
* @li INADDR_NONE(-1) ip字符串无效
* @notes INADDR_NONE(-1)也是有效的IP地址(255.255.255.255)
*/
in_addr_t inet_addr(const char *cp);
(2) 整数 ------->ip字符串
/*
* @param[in] in 二进制形式的IP地址
* @return ip字符串
* @notes ip字符串放在静态数据段,并且放在固定位置,所以第二次调用会覆盖第一次调用的结果
*/
char *inet_ntoa(struct in_addr in);
[12] 整数字节序转换
1. 头文件
#include <arpa/inet.h>
2. 函数
(1) 主机字节序----->网络字节序
/*
* @param[in] hostlong(hostshort) 主机字节序的整数
* @return 网络字节序的整数
*/
unsigned short long htonl(unsigned short long hostlong);
unsigned short int htons(unsigned short int hostshort);
(2) 网络字节序----->主机字节序
/*
* @param[in] nettlong(netshort) 网络字节序的整数
* @return 主机字节序的整数
*/
unsinged long ntohl(unsigned long netlong);
unsigned short ntohs(unsigned short netshort);