第五周学习作业

蹉跎莫遣韶光老,人生唯有读书好。这篇文章主要讲述第五周学习作业相关的知识,希望能为你提供帮助。
1、简述osi七层模型和TCP/IP五层模型OSI七层模型的划分
            OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。
              每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。



应用层
OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
表示层
            表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。


    会话层
    会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
传输层
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
网络层
            本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
数据链路层
将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。
        数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。
MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。
    物理层       
    实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。
相同点两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
不同点OSI是先有模型;TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同
2、总结描述TCP三次握手四次挥手三次握手是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
第一次握手:建立连接时,客户端发送第一个包,其中SYN=1, 发送顺序号X。客户端进入SYN发送状态,等待服务器确认;
第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=y,接收顺序号ACK=X+1,此时服务器进入SYN接收状态;
第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。
四次挥手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包,四次挥手完毕后,客户端与服务器TCP连接完全断开。
四次握手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包
第一次挥手:主动关闭方发送第一个包释放报文首部,FIN=1,发送顺序号seq为u,等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手:被动关闭方收到FIN包后发送第二个包,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文。
第三次挥手:被动关闭方再发送第三个包,其发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手:主动方收到服务器的连接释放报文后,主动方发送第四个包,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2??MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。
Q& A 
< ??https://blog.csdn.net/qq_38950316/article/details/81087809> ??
Q:为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
A:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的
FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

Q:为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
A:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失。
所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,
将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT
状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓
的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需
的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

Q:为什么不能用两次握手进行连接?
A:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,
这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分
组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可
是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的
连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组
超时后,重复发送同样的分组。这样就形成了死锁。

Q:如果已经建立了连接,但是客户端突然出现故障了怎么办
A:TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请
求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文
段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

3、描述TCP和UDP区别TCP
英文名:Transmission Control Protocol
中文名:传输控制协议
UDP
英文名:User Datagram Protocol
中文名:数据报协议
区别:1、TCP面向连接(如打电话要先拨号建立连接); UDP是无连接的,即发送数据之前不需要建立连接;
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制;
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信;
4.每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信;
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
为什么UDP有时比TCP更有优势?1.UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。
网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。
2.TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。
【第五周学习作业】3.采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。
4、网卡绑定bond0的实现
##查看网卡信息
[root@centos84 ~]# 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: ens192: < BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:75 brd ff:ff:ff:ff:ff:ff
inet 172.30.232.201/24 brd 172.30.232.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec5:8c75/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:21:76:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: < BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:21:76:0c brd ff:ff:ff:ff:ff:ff
5: ens224: < BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:7f brd ff:ff:ff:ff:ff:ff
6: ens256: < BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:89 brd ff:ff:ff:ff:ff:ff
##新建bond0配置文件
[root@centos84 ~]# nmcli connection add type bond con-name bond0 ifname bond0 mode active-backupipv4.method manual ipv4.addresses 172.30.232.210/24
Connection bond0 (c39ee43d-b7a2-4748-b6e1-c579ea6f1873) successfully added.
##添加网卡ens224,ens256到bond0下
[root@centos84 ~]# nmcli connection add type bond-slave ifname ens2
ens224ens256
[root@centos84 ~]# nmcli connection add type bond-slave ifname ens256 master bond0
Connection bond-slave-ens256 (ad228947-f7be-4cfb-a9ca-42454d8a0712) successfully added.
[root@centos84 ~]# nmcli connection add type bond-slave ifname ens224 master bond0
Connection bond-slave-ens224 (c0759cb5-0659-4307-a114-dd16f8c2abe1) successfully added.
##启动加载两个绑定网卡的配置文件
[root@centos84 ~]# nmcli connection up bond-slave-ens224
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
[root@centos84 ~]# nmcli connection up bond-slave-ens256
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
[root@centos84 ~]#
##启动加载bond0
[root@centos84 ~]# nmcli connection up bond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
##查看bond0是否正常启动加载配置文件
[root@centos84 ~]# 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: ens192: < BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:75 brd ff:ff:ff:ff:ff:ff
inet 172.30.232.201/24 brd 172.30.232.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec5:8c75/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:21:76:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: < BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:21:76:0c brd ff:ff:ff:ff:ff:ff
5: ens224: < BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:7f brd ff:ff:ff:ff:ff:ff
6: ens256: < BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:7f brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:c5:8c:89
7: bond0: < BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:c5:8c:7f brd ff:ff:ff:ff:ff:ff
inet 172.30.232.210/24 brd 172.30.232.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
inet6 fe80::eecb:ad34:862:bd24/64 scope link noprefixroute
valid_lft forever preferred_lft forever
##
[root@centos84 ~]# nmcli connection show
NAMEUUIDTYPEDEVICE
ens19258148445-f5ab-4a45-bf41-468d83081a77ethernetens192
bond0c39ee43d-b7a2-4748-b6e1-c579ea6f1873bondbond0
virbr0a70d4a53-3a59-46e6-8672-4a27b6ddb8e3bridgevirbr0
bond-slave-ens224c0759cb5-0659-4307-a114-dd16f8c2abe1ethernetens224
bond-slave-ens256ad228947-f7be-4cfb-a9ca-42454d8a0712ethernetens256
##测试bond0网络
[root@ubuntu1804 ~]#ping 172.30.232.210
PING 172.30.232.210 (172.30.232.210) 56(84) bytes of data.
64 bytes from 172.30.232.210: icmp_seq=1 ttl=64 time=0.327 ms
64 bytes from 172.30.232.210: icmp_seq=2 ttl=64 time=0.138 ms
64 bytes from 172.30.232.210: icmp_seq=3 ttl=64 time=0.127 ms
64 bytes from 172.30.232.210: icmp_seq=4 ttl=64 time=0.109 ms
^C
--- 172.30.232.210 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3053ms
rtt min/avg/max/mdev = 0.109/0.175/0.327/0.088 ms
[root@ubuntu1804 ~]#
##断开一个网卡,测试网络是否正常
[root@centos84 ~]# nmcli connection up bond-slave-ens256
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15)
[root@centos84 ~]#
[root@centos84 ~]#
[root@centos84 ~]# nmcli connection down bond-slave-ens224
Connection bond-slave-ens224 successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)
[root@centos84 ~]#
##在vsphere环境中测试丢了10个包
……
64 bytes from 172.30.232.210: icmp_seq=20 ttl=64 time=0.087 ms
64 bytes from 172.30.232.210: icmp_seq=21 ttl=64 time=0.110 ms
64 bytes from 172.30.232.210: icmp_seq=22 ttl=64 time=0.133 ms
64 bytes from 172.30.232.210: icmp_seq=23 ttl=64 time=0.128 ms
64 bytes from 172.30.232.210: icmp_seq=24 ttl=64 time=0.149 ms
64 bytes from 172.30.232.210: icmp_seq=25 ttl=64 time=0.114 ms
64 bytes from 172.30.232.210: icmp_seq=26

    推荐阅读