计算机基础知识
本节包含了计算机网络等相关知识
一、get与post请求
- TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。
- 当然还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。
- GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。长的说,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
二、HTTP与HTTPS
上面提到了http,那么在这部分浅谈一下http与https区别,
- 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。http是超文本传输协议,信息是明文传输, https则具安全性的ssl/tls加密传输协议。
(1)Http和Https使用完全不同的连接方法和不同的端口。前者是80,后者是443。Http连接是非常简单和无状态的;Https协议是由SSL/TLS+HTTP协议构建的网络协议,可用于加密传输和身份认证。它比HTTP协议更安全。 (2)Http使用TCP三次握手建立连接,客户端和服务器需要交换3个包;Https除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
三、TCP
-
TCP是一种面向连接的传输层控制协议,可靠的,基于字节流的传输协议。和UDP最大的区别是需要连接的,三次握手、四次挥手 -
TCP的三次握手 -
第一次握手:建立连接。客户端发送syn包到服务器,并进入Syn_sent状态,等待服务器确认; -
第二次握手:服务器收到syn包,必须确认客户端的Syn(ack=j+1),同时自己也发送一个Syn包(seq=k),即SYN+ACK包,此时服务器进入SYN_Recv状态。 -
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入Established(TCP连接成功)状态,完成三次握手
四、为什么要进行三次握手,而不是两次呢?
-
主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而导致不必要的错误和资源的浪费。 如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送的第一个请求连接并且没有丢失,只是因为在网络中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时之前滞留的那一次请求连接,因为网络通畅了, 到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。 如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。 -
只有经过第三次握手,才能确保双向都可以接收到对方的发送的数据。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
五、四次挥手又是什么呢?
- 1)A跟B说,我要停止聊天了,你(B)还在吗?准备中断聊天了(FIN)
2)B收到A的消息,B回复A说:我在。(ACK) 3)B再发一条消息给A说,A你可以停止了。(FIN) 4)A收到B说可以停止发消息了,A回复B说:收到!(ACK) - A:B 啊,我不想玩了。
B:哦,你不想玩了啊,我知道了。 (这个时候,还只是 A 不想玩了,也即 A 不会再发送数据,但是 B 能不能在 ACK 的时候,直接关闭呢?当然不可以了,很有可能 A 是发完了最后的数据就准备不玩了,但是 B 还没做完自己的事情,还是可以发送数据的,所以称为半关闭的状态。这个时候 A 可以选择不再接收数据了,也可以选择最后再接收一段数据,等待 B 也主动关闭。) B:A 啊,好吧,我也不玩了,拜拜。 A:好的,拜拜。 这就是一个完整的关闭连接,在这个关闭的过程中,一共说了四句话,我们也称之为四次挥手。
六、UDP是什么,与TCP区别是什么?
- TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的字节流服务,也就是说,在收发数据前,必须和对方建立可靠的连接。这一过程和打电话类似:先拨号振铃,等待对方接电话,说喂,再说自己是谁。
- UDP (User Datagram Protocol,用户数据报协议),是一种非连接的传输层协议,提供面向事务的简单不可靠信息传送服务,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上,故也不安全
七、url组成
- 一个完整的URL的组成由于:通信协议(scheme)、主机(host)、端口号(port)、路径(path)、查询(query)、信息片段(fragment)组成。
(1)scheme:通信协议,常用的协议http,ftp等。 host:主机,服务器(计算机)域名系统(DNS),主机名或IP地址。 (2)port: 端口号,整数,可选,省略时是默认端口,如http的默认端口是80。 (3)path:路径,由零或多个‘/’隔开的字符串,一般用来表示主机上的一个目录或者文件地址。 (4)query:查询, 可选,用于给动态网页传递参数,可有多个参数,用“&”号隔开,每个参数的名和值用“=”号隔开。如:name=zs。 (5)fragmeng:信息片段,字符串,锚点。 - 例如: https://www.baidu.com/?name=zs&&age=15#middle
总结
以上就是计算机网络基础知识。下一节准备看一下操作系统基础知识。
|