目录
4.路由器接口
1. 网络通信
通信/通讯需要具备的两个基本条件:
(1)物理媒介(物理层面)
光纤
(2)协议(软件层面)
网络协议
2.网络协议的层次模型
层次:
把不同的功能封装成不同的功能模块,为什么叫层次?
OSI七层模型:开放式系统互联
TCP/IP四层模型:
应用层: 数据发送的格式
应用协议:
http
ftp
DNS
QQ协议:
...
传输层:
主要作用解决数据如何传输的问题
TCP/UDP
TCP :Transport Control Protocol 传输层控制协议
是一种面向连接的传输层协议,他能够提供高可靠性通信
(数据无误,数据无丢失,数据无失序,数据无重复到达)的通信
==》建立连接
“三次握手、四次挥手”
重发机制
“面向连接”
UDP:User Datagram Protocol 用户数据报协议
是一种不可靠的无连接的协议。它在数据发送前根据就不需要进行连接,所以他可以
进行高效率的数据传输
"实时应用"
网络层:
IP ===>(网卡的逻辑编号)
设备驱动和硬件:
硬件:
网卡
网线
MAC协议 :MAC地址(网卡的物理地址 :48bits)
3. 网络数据是如何进行传输的
分层传输
数据封装 数据拆包
4.路由器接口
路由器的WAN和LAN口
WAN:接外部IP地址用,通常指出口,转发来自内部LAN接口的IP数据包
LAN:接内部IP地址用,LAN内部就是一个交换机
路由器也可不连接WAN口,把路由器当做是一个交换机来用
主要功能 “路由”
选择网络数据包的下一站
网关:
连接了两个或两个以上的网络
交换机:
扩展网口
光猫: Modern 调制解调器
5.互联网地址(ip地址)
互联网上每个接口(网卡)都必须有一个唯一的Internet地址(称为IP地址)
协议上的一个逻辑地址。进行网络通信时候,用这个ip地址唯一标识一台主机
ipv4:32bits
ipv6:128bits
ipv4地址有32bits
网段号:用来标识某个网段
ip地址连续的高位
主机号:
用来标识特定网段中特定的主机
在ip地址中连续的地位
ipv4和ipv6的区别:
ipv6的地址空间更大,ipv6将原来的32位地址空间增大到了128位,数目是2的128次方;
ipv4使用地址解析通讯协议,ipv6使用多点传播消息取代地址解析通讯协议;
ipv6具有更高的安全性,在使用ipv6网络中,用户可以对网络层的数据进行加密,极大的提高了网络安全性。
表现形式:点分式十进制
“192.168.3.5” 最后都会换成一个32位的无符号的整数
ip地址范围 私有ip地址范围
A: 0 网络号(7bits) 主机号(24bits)
0.0.0.0 ~ 127.255.255.255 10.0.0.0 ~ 10.255.255.255
B: 1 0 网络号(14bits) 主机号(16bits)
128.0.0.0 ~ 191.255.255.255 172.16.0.0 ~ 172.31.255.255
C: 1 1 0 网络号(21bits) 主机号(8bits)
192.0.0.0 ~ 223.255.255.255 192.168.0.0 ~ 192.168.255.255
D: 1 1 1 0 多播组号(28bits)
224.0.0.0 ~ 239.255.255.255
E: 1 1 1 1 0 (留待后用)
在设置一个ip的时候,可以指定这个地址中哪些bits是网段号,哪些是主机号
netmask(子网掩码):
netmask 为bit 位 为1就是网段号 , 为0的就是主机号
eg:255.255.255.0
ip: 192.168.5.6
==》ip中高3字节就是网段号,低字节是主机号
192.168.1.4 和 192.168.3.5 不在同一个网段
netmask :255.255.114.0 这个netmask 是不是合法的?
11111111 11111111 01110010 00000000
不合法的,
合法的子网掩码:要是连续的1和连续的0
netmask :255.255.192.0 这个netmask 是不是合法的?
11111111 11111111 11000000 00000000 合法的
192.168.128.3
192.168.130.3
假设子网掩码是 :255.255.255.0 不能互通
255.255.0.0
6.端口号
TCP和UDP 采用16bits来表示你的应用程序
IP地址只能唯一标识一台网络中主机,但是每台主机上并不是
只有一个网络应用程序,他可以跑很多网络应用程序,而且网络应从传输层
来看可以分TCP应用和UDP应用,为了区分这些网络应用,用端口号来区分
端口号:本质是无符号的short类型
范围:0 ~ 65535
众所周知:1 ~ 1023
注册端口:1024~49151
7.socket
一个编程接口(网络编程的接口)
是一种特殊的文件描述符(write/read)
并不仅仅局限于TCP/IP
独立于具体协议的网络编程接口,这个接口位于应用层与传输层之间
socket类型:
(1)流式套接字(SOCK_STREAM)
面向字节流,针对传输层协议为TCP的应用
(2)数据报套接字(SOCK_DGRAM)
针对传输层协议为UDP的应用
(3)原始套接字 (SOCK_RAM)
直接跳过传输层
8. 字节序问题
大部分PC机上当应用程序把数整数送给socket之前,需要转化成网络字节序。应用程序从socket取出整数之后要转化成小端字节序
大端模式:低地址存数据的高字节
小端模式:低地址存数据的低字节
网络字节序 :大端模式
9.基本的TCP/UDP套接字的编程流程
任意一个网络应用程序都有客户端和服务端
都要确定三个东西:ip + 传输层协议 + 端口号
10.TCP编程流程
client:
(1)创建套接字 socket()
(2)准备服务器的网络地址
(3)连接服务器 connect()
(4)进行通信 (读写,发送接收)
(5)断开连接 close
server:
(1)创建套接字 socket()
(2)准备服务器的网络地址
(3)绑定服务器 bind()
(4)监听客户端的请求 listen()
(5)接受客户端的请求 accept()
(6)进行通信 (读写,发送接收)
(7)断开连接 close