day28-客户端/服务器架构、网络通信原理、网络协议、osi七层协议(五层协议)、tcp协议、半连接池

一、操作系统基础

操作系统:(Opearting System,简称:OS)是管理和控制计算机硬件与软件资源的计算机程序,是运行在电脑硬件与应用程序之间作为最核心的计算机程序,想要顺利使用计算机都必须在操作系统上才能运行并使用。

二、 网络通信原理

1.互联网的本质

一台电脑安装了操作系统,再安装上基础软件就可以正常使用,但如果需要与其它电脑、网站等进行通信交互的话,我们需要通过网络,即Internet来作为介质来两边之间起到一个桥梁的地方。

什么是Internet?

Internet即因特网,好比蜘蛛网,每台电脑就好比蜘蛛网上每一条网线的织点,相互之间连接,在网络中就是通过物理网线将用户的每台电脑通过各种网络运营商或者转换器经过转换相互连接起来并能够在此基础上进行各种交互操作,而在因特网上有一套标准叫作互联网协议,好比人类世界中的世界通过语言,去哪个国家都可以交流无障碍,在网络中大家都遵循这套标准就可以接入互联网并使用。

两大要素:
    1、底层的物理连接介质,是为通信铺好道路的
    2、一套统一的通信标准,即互联网通信协议

2.osi七层协议

在互联网协议中按功能不同被分为OSI七层协议



3.关于自定义协议需要满足的的两大要素:

任何一种通信协议都必须包含两部分:
    1、报头:必须是固定长度
    2、数据

4.网络层
4.1 IP编址
    讨论TCP/IP时,IP编址是最重要的主题之一。IP地址是分配给IP网络中每台机器的数字标识符,它指出了该设备在网络中的具体位置。
     IP地址是软件地址,而不是硬件地址。硬件地址被硬编码到网络接口卡(网卡,NIC)中,用于在本地网络中寻找主机。IP地址让一个网络中的主机能够与另一个网络中的主机通信,而不管这些主机所属的LAN是什么类型。
    对于IP的术语:
        比特一个比特相当于一位,其取值为 1 或 0。
        字节 1 B 为 7 或 8 位,这取决于是否使用奇偶校验。
        八位组 (Octet) 由 8 位组成,是普通的 8 位二进制数。
        网络地址 在路由选择中,使用它将分组发送到远程网络,如 10.0.0.0、 172.16.0.0和 192.168.0
        广播地址 应用程序和主机用于将信息发送给网络中所有节点的地址,这样的例子包括:255.255.255.255 ,表示所有网络中的所有节点; 172.16.255.255 ,表示网络 172.16.0.0 中的所有 子网和主机; 10.255.255.255 ,表示网络 10.0.0.0 中的所有子网和主机。

4.2子网掩码

要让子网划分方案管用,网络中的每台机器都必须知道主机地址的哪部分为子网地址,这是通过 给每台机器分配子网掩码实现的。子网掩码是一个长32位的值,让IP分组的接收方能够将 IP地址的 网络 ID部分和主机ID部分区分开来。 


比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

4.3 标识地址的方式:
 ip+mac就能标识全世界范围内独一无二的一台计算机

 ip+mac+port就能标识全世界范围内独一无二的一个基于网络通信的应用软件    
 URL地址:标识全世界范围内独一无二的一个资源
    组成部分:https://----------->应用层协议
                    mp.csdn.net:80   -------->域名+端口号
                    /postedit ----------文件路径

拼接而成完整的网址:https://mp.csdn.net/postedit

4.4 IP数据包
IP数据包结构:

  简单表示:

ethernet头 Ip头 ip数据(此处为真实需要传输的数据)
head:长度为20到60字节
data:最长为65,515字节。


4.6 ARP
arp(address resolution protocol地址解析协议):根据已知的IP地址查找主机的硬件地址(MAC),其工作原理如下:IP需要发送数据报时,它必须将目标端的硬件地址告知网络接入层协议,如以太网或者是无线。如果IP在ARP缓存中没有找到目标主机的硬件地址,它将使用ARP获悉这种信息

4.7 TCP三次握手和四次挥手
为何使用三次握手机制:
假设:

客户端向服务器发送了第一条请求报文,但是该报文并未在网络中被丢弃,而是长时间阻滞在某处,而客户端收不到服务器确认,以为该报文丢失,于是重新发送该报文,这次的报文成功到达服务器,如果不使用三次握手,则服务器只需对该报文发出确认,就建立了一个连接。而在这个连接建立,并释放后,第一次发送的,阻滞在网络中的报文到达了服务器,服务器以为是客户端又重新发送过来一个连接请求,此时该连接在客户端已经失效,之后服务器会再向客户端发送一个确认,然后客户端收到已失效的连接会选择,但在服务器看来该连接已经建立,这样的结果一方面会使服务器持续保持该无效的连接,造成服务器资源浪费,再者安全隐患也很大,因此必须使用三次握手机制。

三次握手(https://blog.csdn.net/sssnmnmjmf/article/details/68486261):

 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发:


(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
        
        SYN攻击:
                在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
                #netstat -nap | grep SYN_RECV

三次握手(男女版):

三次握手过程说明: 
1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。

3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

四次挥手

四次挥手( 男女版):

四次挥手过程说明: 
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)

2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成) 

至此TCP断开的4次挥手过程完毕

4.8 半连接池

限制的是同一时刻的请求数,而非连接数




作业解答:

1、为何建连接要三次而断开连接却需要四次

答:断开连接需要四次是因为当client端向server端发起FIN请求并得到server端回应后因为之前客户端与服务端是连接的存在数据还未完成数据传送完毕情况,为以防数据在传输途中就中断而让客户端 之前请求的数据无法获取,就需要在服务端传输完数据后再向客户端发送FIN请求最终完成断开连接操作,为的就是数据传输完整性

2、为何tcp协议是可靠协议,而udp协议是不可靠协议
答:TCP协议是可靠协议是因为它存在三次握手以及四次挥手的安全传输机制,保证数据能够安全、完整的进行传输

而UDP没有相关安全传输机制,它是尽最大努力进行传输的协议,所以是不可靠协议

网络回答更详细:TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务;
TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;

UDP具有较好的实时性,工作效率较TCP协议高。

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能顺序地从一端传到另一端。

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,不保证数据按顺序传递,故而传输速度很快。

3.tcp协议建立连接与断开连接的状态信息以及表示的意义

三次握手:

四次挥手:



猜你喜欢

转载自blog.csdn.net/qq_17513503/article/details/80927466