1、计算机网络
1、TCP三次握手(Three-Way Handshake)过程、参数;
不同HTTP协议的不同TCP连接模式:
HTTP/1.0:TCP连接在http请求创建时同步创建,http请求发送到服务器端,服务器端响应后TCP连接即关闭。
HTTP/1.1:以某种方式连接继续保持,一个请求传输完成后另一个请求接着传输。好处:多请求下不必多次进行“三次握手”进行连接,防止了不必要的资源消耗。
HTTP/2:对HTTP/1.1进行升级,同一个TCP连接支持并发传输http请求。
三次握手详解:
三次握手就是TCP连接的建立,必须是一方主动打开,另一方被动打开。三次握手之前主动打开连接的客户端A结束CLOSED阶段,被动打开连接的服务端B也结束CLOSED阶段,并进入LISEN监听阶段,随后进行三次握手。
过程:
1.客户端向服务端发送一条TCP报文,告知服务器端请求建立新连接
2.服务端接受到客户端的报文后,结束LISEN阶段,并返回一段TCP报文告知客户端已接受到来自客户端的数据,同意建立新连接。
3.客户端接收到来自服务端的TCP报文后,明确了从客户端到服务端的数据传输是正常的,向服务端返回最后一段TCP报文,告知服务端已接收到服务端的数据。
之后进行正常的数据传输。
图如下:
参数详解:
第一次:
SYN:标志位,表示发起一个新连接
seq:序号,占32位,用来标识从TCP源向目的端发送的字节流,发送方发送数据时对此进行标记。
标记位为 SYN = 1,表示请求建立新连接
序号为 seq = x,x 一般为1
第二次:
ACK:标志位,表示确认序号有效
ack:确认号(非标志位的ACK),占32位,只有ACK标志位为1时,确认号字段才有效,ack = seq + 1
标志位:SYN = 1, ACK = 1,表示确认客户端发送的seq有效,服务器可正常接收客户端发送的数据,同意创建新连接
序号: seq = y,
确认号:ack = x + 1,表示收到客户端的序号seq = x,并将该值 + 1作为自己的确认号ack的值
第三次:
标志位:ACK = 1:表示确认收到服务器端同意连接的信号
序号:seq = x + 1:表示收到服务端的确认号ack,并+ 1作为自己的序号值
确认号:ack = y + 1:表示收到服务器端的序号seq,并+1作为自己的确认号ack的值
总结:
整个三次握手过程就像是你这个钢铁直男在追你的女神一样,你对你的女神说:我喜欢你我要追你;你女神回答你说:行,我知道你要追我了,你追吧;然后你收到了你女神的消息,自以为郑重其事的对你女神说:好,我知道你知道我要追你了。那我追你了。此时,你追你女神的事就定下来了,下边就开始追女神了,至于是送花还是吃饭就看你自己的了。
进行三次握手的原因:
①防止服务器端开启一些无用的连接增加不必要的开销
②防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
2、TCP四次挥手(Four-Way Wavehand)过程、参数;
和三次握手建立连接一样,四次挥手也要求必须是一方主动释放,另一方被动释放
过程:
1、客户端想要释放连接,向服务器端发送一段TCP报文
2、服务器端接收到从客户端发出的TCP报文后,确认客户端想要释放连接,返回一段TCP报文给客户端
3、服务器端自发出报文后,做好释放服务器端到客户端方向的连接准备,再次向客户端发送一段TCP报文,随后停止在服务器端到客户端的方向上的发送数据,但此时仍可以接收从客户端传输过来的数据。
4、客户端收到服务端发来的TCP报文,确认服务器端已做好释放连接准备,向服务器端发送一段报文。
在服务器端接收到最后客户端发来的TCP报文后,正式确认关闭服务器端到客户端的连接。
图如下:
参数详解:
FIN:标志位,表示释放一个连接
第一次:
FIN = 1:释放一个连接
seq = u:序号为u
第二次:
ACK = 1:标志位:表示接收到客户端的释放连接请求
seq = v:序号为v
ack = u + 1:确认号为u + 1,表示收到客户端的序号u,并将其 + 1 作为自己的确认号ack的值
随后服务器端开始准备释放服务器端到客户端方向上的连接
第三次:
FIN = 1,ACK = 1:标志位,表示已确认释放连接请求并准备好释放连接
seq = w:序号为w
ack = u + 1:确认号为u + 1,表示收到客户端的序号u,并将其 + 1 作为自己的确认号ack的值
第四次:
ACK = 1:标志位,表示已收到服务器准备好释放连接的信号
seq = u + 1: 表示是在收到了服务器端报文的基础上,将其确认号ack值作为本段报文序号的值。
ack = w + 1: 表示是在收到了服务器端报文的基础上,将其序号seq值作为本段报文确认号的值。
总结:
整个过程还是那个你和你女神的故事一样。你发现女神不是那么好追,想要放弃了。于是你对你女神说:我不想追你了;你女神给你回消息说:行,我知道了,然后开始把你送的玫瑰收拾收拾准备丢在垃圾桶。然后你女神又给你发了条信息说:我知道你不追我了,我也准备好把你送的玫瑰丢了。你收到女神的消息后心神交猝,感到有些累,但还是忍不住给你女神发了条消息:我知道你要把我送你的玫瑰丢了,你丢吧。从此,世上又多了个伤心又孤独的人。
3、TCP和UDP的区别?应用场景有何不同?
| TCP | UDP | |
|---|---|---|
| 是否连接 | 面向连接 | 无连接 |
| 是否可靠 | 可靠,使用流量控制和拥塞控制 | 不可靠 |
| 连接对象个数 | 一对一通信 | 支持一对一,一对多,多对一,多对多交互通信 |
| 传输方式 | 面向字节流 | 面向报文 |
| 首部开销 | 最小20字节,最大60字节 | 开销较小,仅8字节 |
| 使用场景 | 适用于要求靠传输的应用,如文件传输 | 使用与实施应用,如视频会议,直播等 |
| 传输速度 | 较慢 | 较快 |
4、TCP流量控制与拥塞控制;
参考: https://www.cnblogs.com/ppzhang/p/10506237.html
流量控制:
TCP每发送一个数据,都要进行一次应答。当上一个数据包收到了应答再发送下一个。类似于你和你的siri聊天,你说一句它说一句,它不回你你就得等,时不时网络拥堵还得等半天,最后总是你匆匆结尾宛若个渣男。这种模式想都不用想效率低下慢的要死,为了提高效率,于是引用了窗口的概念。窗口相当于一堵墙上的一扇窗,只要你的东西不超过窗户的大小,就可以从墙的这边把东西递到那边(又想起了那些年在学校门口取外卖的时光了)。有了窗口之后,就可以无需等待确认应答继续发送数据,而窗口的大小就是可以继续发送数据量的最大值。
窗口实际上是操作系统开辟的一块内存空间,发送方在等到确认应答返回前必须在缓冲区保留已发送的数据,如果按期收到确认应答,则可以清空缓存区的相应数据。
总的来说流量控制就是能让发送方愉悦的发送数据并且控制发送速率不太快,让接收方来得及接收(举个不恰当的栗子,某度网盘为用户接收数据考虑限制下载速度几K/s)
拥塞控制:
流量控制主要解决发送数据的效率问题,但是没有解决数据传输过程中出现的问题。
试想一下,所有的电子设备失灵,只能依靠千里马进行信息传输,你给你女神买了她最爱吃的丝滑的不行的德某芙牌巧克力,让人骑马送过去,途中需要经过一座桥。你的女神收到了巧克力并吃了一口告诉你真的无比的丝滑,香的一批。你收到了女神的信息,派人骑马问她真的有这么丝滑吗?但是好巧不巧,那座桥是个豆腐渣工程,桥塌了,包工头还带着她小姨子跑了,附近的村民暂时搭了个独木桥,人很多,送信的马被堵在这里了。你等啊等等啊等,女神还是没有给你回消息是不是真的这么丝滑这么香的一批,于是你又派了个人骑马送信问是不是真的丝滑。第二个送信的人也来到了这座独木桥,送信人1刚好碰见,双方打了个招呼,一起骂你舔狗舔到最后一无所有。就这样,桥前排队的马越来越多,送信的人已经凑够了好几桌麻将开始搓麻将了,而你还是没有收到你女神的回信,而你的女神遇到了那个包工头,和包工头还有包工头的小姨子一起过上了没羞没躁的生活,从此世上又多了一个无情的舔狗。
这就是拥塞控制的要解决的问题,出现网络拥堵后,出现数据包丢包,延时等问题,此时TCP在定时器期限内接收不到数据,就会触发超时重传,但是网络拥堵了,重传的数据依然堵在网络中,接收方仍然接收不到数据,自然也就不会发送应答,就会陷入恶性循环,导致网络越来越堵,加重网络负担。于是TCP发扬了牺牲小我保大我的精神,降低发送的数据量,于是就有了拥塞控制,目的就是避免发送方的数据填满整个网络。
5、OSI七层模型、各层所用到的协议;
七层模型分别为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
应用层:功能:文件传输,电子邮件,文件服务,虚拟终端;所用协议:HTTP,FTP等
表示层:功能:数据格式化,代码转换,数据加密;无协议
会话层:功能:解除或建立与别的接点的联系;无协议
传输层:功能:提供端对端接口;所用协议:TCP,UDP
网络层:功能:为数据包选择路由;所用协议:IP,ICMP,RIP等
数据链路层:功能:传输有地址的帧,错误检测;所用协议:SLIP,ARP,PPP等
物理层:功能:以二进制数据心事在物理媒体上传输数据;所有协议:ISO02110,IEEE802,IEEE802.2
6、一些常见协议的原理:ARP、FTP等
ARP: ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网卡有着极其密切的关系,在TCP/IP分层结构中,把ARP划分为网络层
FTP: FTP文件传输协议(File Transfer Protocol),用于Internet上的控制文件的双向传输,是一个应用程序。工作在TCP/IP协议族的应用层,其传输层协议是TCP协议,目的在于提高文件传输的共享性和可靠性,是基于客户/服务器模式工作的。FTP会建立两个连接,将命令与数据分开传输,提高传输效率。FTP使用两个端口,分别为控制端口(命令端口)和数据端口。控制端口号一般为21,数据端口一般为20。控制socket用来传输命令,数据socket用来传输数据。每一个FTP命令发送后,FTP服务器就会返回一个字符串,其中包含一个响应码和一些说明信息,其中响应码主要用于判断命令是否被成功执行了。