第五周
1、简述osi七层模型和TCP/IP五层模型
2、总结描述TCP三次握手四次挥手
3、描述TCP和UDP区别
4、网卡绑定bond0的实现
第五周
(一)简述osi七层模型和TCP/IP五层模型
OSI 模型解释,这个模型主要用于教学
Layer No.
|
Layer Name
|
Description
|
7
|
Application
|
由标准通信服务和应用程序组成,为应用程序提供服务
|
6
|
Presentation
|
确保信息以机器能理解的形式传递给接收机器,数据格式化、数据加密
|
5
|
Session
|
管理协作计算机之间的连接和终止 、用来建立、管理和维护会话
|
4
|
Transport
|
管理数据的传输, 还确保接收的数据与传输的数据相同建立、管理并维护端到端的连接
|
3
|
Network
|
管理网络间的数据寻址和传送,IP选择以及路由选择
|
2
|
Data Link
|
处理跨网络媒体的数据传输,提供介质访问和链路管理
|
1
|
Physical
|
定义网络硬件的特性,信号传输方式。
|
OSI vs TCP/IP 比较两者的区别
OSI
|
TCP/IP
|
由ISO(国际标准组织)开发
|
它是由高级研究项目机构网络(ARPANET)开发的。
|
OSI模型明确区分了接口、服务和协议。
|
TCP/IP在服务、接口和协议之间没有任何明确的区别。
|
OSI是指开放系统互连。
|
TCP是指传输控制协议。
|
OSI使用网络层定义路由标准和协议。
|
TCP/IP仅使用Internet层。
|
OSI遵循一种垂直的方法。
|
TCP/IP遵循水平方法。
|
OSI层有七层。
|
TCP/IP有四个层。
|
在OSI模型中,传输层只是面向连接的。
|
TCP/IP模型的一层既是面向连接的,也是无连接的。
|
在OSI模型中,数据链路层和物理层是分开的。
|
在TCP中,物理链路和数据链路都被组合成一个单一的主机到网络层。
|
会话层和表示层是OSI模型的一部分。
|
在TCP模型中没有会话和表示层。
|
它的定义是在互联网出现之后。
|
它是在互联网出现之前定义的。
|
OSI报头的最小大小是5字节。
|
最小的头大小是20字节。
|
(二)总结描述TCP三次握手四次挥手
直接解释这两个信令交互过程是较为抽象和枯燥,需要形象的使用比喻来帮助理解。
虽然用比喻的解释的时候,本意会有所损失,但是在理解记忆的之后,再温故知新,效率更高一些,直到最后掌握。
三次握手---可以理解为男女开始交往
四次挥手---可以理解为男女最后分手
11中状态可以理解为一方动作后,进入的情绪状态
状态
|
状态解释(最常见交互模型C/S 客户端与服务器端)
|
适用范围
|
状态比喻
|
CLOSED
|
没有任何连接状态
|
三次握手
连接
交往
|
两个都是单身,假设男生是客户端,女生是服务端,暂时都没想法
|
LISTEN
|
侦听状态,等待来自远方TCP端口的连接请求
|
女生最近有意向谈恋爱,于是开启了心门,愿意接收男生的交往信息
|
SYN-SENT
|
在发送连接请求后,等待对方确认
|
男生对于有意向的女生,发了信息,请求交往,等待女神回信中
|
SYN-RECEIEVD
|
在收到和发送一个连接请求后,等待对方确认
|
女生收到了男生的请求,回了信息,但不确定男生是否收到,等待中
|
ESTABLISHED
|
表示传输连接建立,双方进入数据传送状态
|
连接态
|
男生收到了女神的消息,进入亢奋阶段;
女生得到男生的回信,知道他的心意没变,也开始有些激动;
男女各自进入high的状态
|
FIN-WAIT-1
|
主动关闭,客户端已发送关闭连接请求,等待对方确认
|
四次挥手
关闭
分手
|
男生提出分手,征求女生同意,等待对方同意自己的请求
|
CLOSE-WAIT
|
被动关闭,收到对方发来的关闭连接请求,并确认
|
女生收到了男生的分手请求,觉得这男的也不咋地,直接回复同意
|
FIN-WAIT-2
|
主动关闭,主机已收到对方关闭传输确认,等待对方发送关闭传输连接请求
|
男生收到女生同意分手的消息,继续等待女方反应
|
LAST-ACK
|
被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
|
女生郑重正式告知男生关系结束
|
TIME-WAIT
|
完成双向传输连接关闭,等待所有分组消失
|
男生收到正式告知后,回复,好,再也不见。
|
CLOSING
|
双方同时尝试关闭传输连接,等待对方确认
|
偶发双向请求关闭
|
男女双方同时提出不再相处,很少见的情况
|
11种状态理解后,再理解客户端与服务端之前的信令消息内容。
关于三次握手的交互信息:
步骤1:客户端建立与服务器的连接。它发送一个带有SYN的段,并通知服务器客户机需要开始通信,以及客户端的SEQ序列号值。
步骤2:服务器用SYN-ACK信号集响应客户端请求。ACK表示接收到的段的响应,SYN段中表示应该从SEQ序列号开始。
步骤3:客户机确认服务器的响应,发出确认ACK,于是形成一个稳定的连接,从而开始实际的数据传输过程。
比如:
步骤1:客户端A通过将TCP SYN包发送到它的主机目的地来开始连接。SYN包含一个随机序列号(例如,seq=339),它表示客户端A应该传输的数据的开始序列号
步骤2:服务器B接收到数据包,并使用服务器的SYN序列号(例如:seq=9801)进行响应。它的响应还包括确认号ACK,即客户端A的序列号加1(ACK中seq=340)
步骤3:客户端A通过发送确认号ACK来响应服务器,而这个确认ACK中序列号是基于服务器的SYN序列号值加1(ACK中seq=9802)
大体上可以这样理解:
关于四次挥手的交互信息:
步骤1 (FIN From Client)
假设客户端应用程序决定要关闭连接。(当然,服务器也可以选择关闭连接)。
这会导致客户端向服务器发送FIN位为1的TCP报文段,并进入FIN_WAIT_1状态。
当处于FIN_WAIT_1状态时,客户端等待来自服务器的TCP段和确认(ACK)。
步骤2 (ACK From Server)
当Server从Sender(Client)接收到FIN位段时,Server立即向Sender(Client)发送确认(ACK)段。
步骤3(客户端等待 )
当处于FIN_WAIT_1状态时,客户端等待来自服务器的TCP段的确认
当客户端接收到这个段时(Server端的第一次ACK),进入FIN_WAIT_2状态
当处于FIN_WAIT_2状态时,客户端等待来自服务器的另一个FIN位设为1的段。
步骤4 (FIN from Server)
服务器在发送ACK段(由于服务器正在关闭进程)一段时间后,将FIN位段发送给发送方(客户端)。
步骤5(来自客户端)
当Client接收到Server的FIN位段时,Client认可了Server的FIN位段,进入TIME_WAIT状态。
TIME_WAIT状态允许客户端在ACK丢失的情况下重新发送最后的确认。
客户端在TIME_WAIT状态下花费的时间取决于现实情况,但它们的典型值有30秒、1分钟和2分钟。
等待之后,连接正式关闭,客户端上的所有资源(包括端口号和缓冲区数据)被释放。
四次挥手大体过程如下:
(三)描述TCP和UDP区别
区别,就直接上表格吧,对比更直观。
TCP说明
|
UDP说明
|
它是一个面向连接的协议
|
它是无连接协议
|
TCP以字节流的形式读取数据,消息被传输到段边界
|
UDP报文包含一个接一个发送的报文 它还检查到达时间的完整性
|
TCP消息通过因特网从一台计算机到另一台计算机
|
它不是基于连接的,所以一个程序可以向另一个程序发送大量的数据包
|
TCP将数据包按照特定的顺序重新排列
|
UDP协议没有固定的顺序,因为所有的数据包都是相互独立的
|
TCP速度较慢
|
UDP是更快的错误恢复不尝试
|
报头大小为20字节
|
标题大小为8字节
|
TCP是重量级的 TCP需要三个包来建立套接字连接,然后才能发送任何用户数据
|
UDP是轻量级的 没有跟踪连接、消息排序等功能
|
TCP进行错误检查和错误恢复
|
UDP进行错误检查,但错误报文将被丢弃
|
有确认部分
|
无确认部分
|
使用握手协议,如SYN,SYN-ACK,ACK
|
没有握手(无连接协议)
|
TCP是可靠的,因为它保证数据传送到目的路由器
|
在UDP中不能保证数据的传送到目的地
|
TCP提供了广泛的错误检查机制,因为它提供了流控制和数据确认
|
UDP方法主要用于时间敏感的应用程序,以及回答来自较大客户端的小查询的服务器
|
它有助于你在不同类型的计算机之间建立连接
|
UDP是兼容的包通过广播发送在整个网络和多播发送
|
独立于操作系统运行,可独立操作
|
它还被用于域名系统、IP语音和在线游戏
|
支持许多以及多种路由协议
|
|
它使组织之间能够互连
|
|
TCP优势
|
UDP优势
|
它有助于你在不同类型的计算机之间建立连接
|
从不限制您使用基于连接的通信模型,分布式应用程序的启动延迟很低
|
它独立于操作系统运行,可独立操作
|
UDP数据包的接收者使它们不受管理,这也包括块边界
|
它支持许多及多种路由协议
|
广播和组播传输也可用于UDP
|
它使组织之间能够互连
|
小额交易(DNS查找)
|
TCP/IP模型具有高度可伸缩的客户机-服务器体系结构
|
适用带宽密集型的应用程序
|
TCP劣势
|
UDP劣势
|
在没有明确询问所有正在运行的数据之前,TCP永远不会结束传输
|
一个报文可能不会被发送或两次发送,也可能是按次序送达,不过得不到任何指示
|
不能用于广播或多播传输
|
路由器对UDP很无奈,如果发生冲突,它们不会重新传输
|
TCP没有块边界,所以您需要创建自己的块边界
|
UDP没有拥塞控制和流控制,所以如何实现是用户应用程序的来完成
|
TCP提供了许多您不想要的特性 这可能会浪费带宽、时间或精力
|
UDP有时会遭受更严重的包丢失
|
TCP适用场景
|
UDP适用场景
|
适用于要求可靠传输的应用,例如文件传输。
|
适用于实时应用,例如:IP电话、视频会议、直播等。
|
(四)网卡绑定bond0的实现
常见的bond模式有七种:
Mode=0(balance-rr) 表示负载分担round-robin 轮询的方式。
Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby
Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合,需要xmit_hash_policy策略
Mode=3(broadcast) 表示所有包从所有interface发出。
Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配,需要xmit_hash_policy策略
Mode=5(balance-tlb) 表示根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
Mode=6(balance-alb) 在5的基础上增加了rlb
centos 6的bond操作
修改前的信息:
[root@centos6 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ea:d3:35 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global eth0
inet6 fe80::20c:29ff:feea:d335/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ea:d3:3f brd ff:ff:ff:ff:ff:ff
inet 172.16.1.100/24 brd 172.16.1.255 scope global eth1
inet6 fe80::20c:29ff:feea:d33f/64 scope link
valid_lft forever preferred_lft forever
网卡的配置,eth0 与eth1 基本上差不多
[root@centos6 ~]# cat /tmp/ifcfg-eth1.ori
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.1.100
NETMASK=255.255.255.0
[root@centos6 ~]#
修改后的配置:
[root@centos6 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BONDING_OPTS="miimon=100 mode=1"
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=10.0.0.155
NETMASK=255.255.255.0
GATEWAY=10.0.0.252
[root@centos6 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@centos6 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
修改完成后,重启网络
service network restart
Centos 7 nmcli的方式实现bond
修改之前:
[root@centos7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:4e:c3:dd brd ff:ff:ff:ff:ff:ff
inet 10.0.0.151/24 brd 10.0.0.255 scope global noprefixroute dynamic eth0
valid_lft 5443173sec preferred_lft 5443173sec
inet6 fe80::fd7d:d853:fd57:25dc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:4e:c3:e7 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.153/24 brd 10.0.0.255 scope global noprefixroute dynamic eth1
valid_lft 5443173sec preferred_lft 5443173sec
inet6 fe80::afb6:852f:eaec:38d1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
修改过程:
nmcli con show
[root@centos7 ~]# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup
Connection 'bond0' (3f1d31aa-525f-4e54-855c-8b5a75c95812) successfully added.
[root@centos7 ~]# nmcli con add type bond-slave ifname eth0 master bond0
Connection 'bond-slave-eth0' (2e9caaec-8ba8-4f0c-b222-230912819d09) successfully added.
[root@centos7 ~]# nmcli con add type bond-slave ifname eth1 master bond0
Connection 'bond-slave-eth1' (6f01745a-1897-4566-a54c-5c73ec6d50a8) successfully added.
[root@centos7 ~]# nmcli con up bond-slave-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/19)
[root@centos7 ~]# nmcli con up bond-slave-eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/20)
[root@centos7 network-scripts]# nmcli con up bond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/21)
修改后的状态:
对比了一下
centos 7 使用nmcli自动生成的配置文件,会有额外的选项
centos 6 手工创建编写的配置文件,感觉更简约一些