OSI七层模型
它是一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架
OSI七层模型.png数据传输过程
数据封装是由上到下,数据解封是由下到上
数据传输.pngframe结构
Frame结构.jpgTCP/IP协议
TCP/ip模型.pngTCP包头
TCP包头.jpgTCP端口
0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer),1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp(memcached)
49152-65535:动态端口或私有端口,客户端程序随机使用的端口
TCP过程
三次握手
TCP三次握手.jpg第一次握手:主机A发送位码为syn=1,随机产生seq number=10001的数据包到服务器,主机B由SYN=1知道,A要求建立联机,此时状态为SYN_SENT
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=20001的包,此时状态由LISTEN变为SYN_RECV
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功,双方状态ESTABLISHED
四次挥手
TCP四次挥手.jpg为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一 个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未 必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文 和FIN报文多数情况下都是分开发送的
为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED 状态(就好比从SYN_SENT 状态到ESTABLISH 状态那样),但是我们必须假想网络是不可靠的,你无法保证你(客户端)最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK 状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT 状态的作用就是用来重发可能丢失的ACK报文
关闭TCP连接一定需要4次挥手吗?
不一定,4次挥手关闭TCP连接是最安全的做法。但在有些时候,我们不喜欢TIME_WAIT 状态(如当MSL数值设置过大导致服务器端有太多TIME_WAIT状态的TCP连接,减少这些条目数可以更快地关闭连接,为新连接释放更多资源),这时我们可以通过设置SOCKET变量的SO_LINGER标志来避免SOCKET在close()之后进入TIME_WAIT状态,这时将通过发送RST强制终止TCP连接(取代正常的TCP四次握手的终止方式)。但这并不是一个很好的主意,TIME_WAIT 对于我们来说往往是有利的
TCP特性
- TCP面向连接(如打电话要先拨号建立连接)
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流
- 每一条TCP连接只能是点到点的
- TCP首部开销20字节
- TCP的逻辑通信信道是全双工的可靠信道
UDP协议
UDP包头
UDP包头.jpgUDP特性
- UDP是无连接的,即发送数据之前不需要建立连接
- UDP尽最大努力交付,即不保 证可靠交付
- UDP是面向报文的 ,没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
- UDP支持一对一,一对多,多对一和多对多的交互通信
- UDP的首部开销小,只有8个字节
- UDP是不可靠信道
ARP协议
地址解析协议 ,是根据IP地址获取MAC地址的一个TCP/IP协议
ARP报文格式
ARP报文格式.jpgARP工作原理
ARP工作原理.jpgIP地址
它们可唯一标识IP网络中的每台设备,由网络ID和主机ID组成
IP地址分类
IP地址分类.png IP范围.jpg私有ip地址
私有ip地址.jpg特殊地址
0.0.0.0
不是一个真正意义上的IP地址。它表示一个集合:所有不清楚的主机和目的网络
255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1~127.255.255.254
本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包
224.0.0.0到239.255.255.255
组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x
如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址
保留地址
主机位全为0:表示本网段网络地址
主机位全为1:表示本网段广播地址
子网掩码
网络ID位全为1即为本网段的子网掩码。可根据实际情况,通过借位来划分子网和合并子网
子网掩码.jpg路由
路由是指分组从源到目的地时,决定端到端路径的网络范围的进程
分类:主机路由、网络路由、默认路由
优先级:精度越高,优先级越高
DHCP
动态主机配置协议。可以自动分配IP地址
DHCP.jpg网络配置文件
网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=此配置文件应用到的设备
HWADDR=对应的设备的MAC地址
BOOTPROTO=激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
NM_CONTROLLED=NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
ONBOOT=在系统引导时是否激活此设备
TYPE=接口类型;常见有的Ethernet, Bridge
UUID=设备的惟一标识
IPADDR=指明IP地址
PREFIX=掩码长度(centos7中支持)
NETMASK=子网掩码
GATEWAY: 默认网关
DNS1=第一个DNS服务器指向
DNS2=第二个DNS服务器指向
USERCTL=普通用户是否可控制此设备
PEERDNS=如果BOOTPROTO的值为“dhcp”,是否允许dhcpserver分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中
路由配置文件
/etc/sysconfig/network-scripts/route-eth0
target/prefix via GW
ADDRESS=目标IP地址
NETMASK=子网掩码
GATEWAY=网关
DNS配置文件
/etc/hosts
负责ip地址与域名快速解析的文件,hosts文件包含了IP地址和主机名之间的映射,在域名解析的过程中,会先查看hosts文件中是否有域名和ip地址之间的映射关系,如果没有则向DNS服务器发起域名解析的请求
[root@centos6 network-scripts]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf
DNS服务器配置,当主机要访问某个域名的时候,就会向resolv.conf的中的DNS服务器发起解析的请求
[root@centos6 network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
domain magedu.com
search magedu.com localdomain
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 192.168.94.1
bond配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=设备名
ONBOOT=是否开机启动
NM_CONTROLLED=是否允许networkmanager管理
BOOTPROTO=激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
BONDING_OPTS=miimon是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路。mode表示当前bond的工作模式
IPADDR=指明IP地址
NETMASK=子网掩码
Bonding
是一种允许将多个物理以太网接口绑定成单一的虚拟接口,同时增加数据带宽并且提供故障切换的技术,是网卡层面的高可用方案
工作模式
mode=0(balance-rr)
mode=0具有负载均衡和容错的能力。采用Round Robin方式,依次有第一个slave网卡至最后一个slave网卡来传送数据包,每一块slave网卡都在轮流进行工作。如果其中一个slave网卡故障失效,整机的网络通信可以正常运转。需要上联交换机进行配置支持。
mode=1(active-backup)
mode=1模式下,同一时间只有一个网卡在工作,其他的网卡不工作。当当前的slave网卡故障失效后,其他的slave网卡开始接替工作
mode=1模式下,不需要上联交换机进行配置支持
mode=2(balance-xor)
本模式下,既具备负载平衡功能,也具备容错功能。需要上联交换机进行配置支持。
mode=3(broadcast)
所有slave网卡都会接收和发送数据包,本模式主要提供容错能力,任一张slave网卡故障失效,整机的网络通信仍可正常运转。需要上联交换机进行配置支持。
mode=4(802.3ad)
802.3ad是正式的交换机连接聚合技术,需要交换机本身支持802.3ad,而本机网卡也需要支持ethtool
mode=5(balance-tlb)
该模式下,是根据每个slave网卡的负载情况选择slave网卡进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。该种模式不需要上联交换机做特殊的配置支持。如果正在接受数据的slave出故障了,另一个slave网卡会接管MAC地址
mode=6(balance-alb)
该模式是在mode=5的tlb基础上增加了rlb(接收负载均衡receiveload balance)。不需要上联交换机做特殊配置支持。接收负载均衡是通过ARP协商实现的
Team
网络组,是将多个网卡聚合在一起,从而实现冗错和提高吞吐量,是RHEL7种一种新技术,bonding的升级版
Bridge
网桥,可以实现桥接功能
网友评论