网络基础知识点

一、网络层协议

二、Http协议

1、Http协议版本

版本 特性 时间
Http/0.9
Http/1.0
Http/1.1
Http/2 二进制协议、多工、数据流、头信息压缩、服务器推送

三、三次握手&四次挥手

TCP&UDP

①TCP:传输控制协议;是面向连接、可靠的字节流服务;交换数据前,双方必须建立一个TCP连接;提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据传输;
②UDP:用户数据报协议;是面向数据包的运输层协议、不可靠;不用建立连接,不保证到达;速度较快

区别:
1.TCP面向连接, UDP面向无连接的
2.TCP有保障的,UDP传输无保障的
3.TCP是效率低的,UDP效率高的
4.TCP是基于流的,UDP基于数据报文
5.TCP传输重要数据,UDP传输不重要的数据

TCP三次握手与四次挥手

TCP提供的可靠数据传输服务是依靠接收端TCP软件按序号对收到的数据分组进行逐一确认实现的。这个过程在TCP收发端开始通信时,被称为三次握手初化。
三次握手过程

  • 第一次握手:client端首先向server端发送一个SYN包,值为1。这是第一个封包,告知server端client端想与server建立TCP连接;
  • 第二次握手:server端接收到client端发送的SYN包后,会回复一个SYN/ACK包,SYN值加1,ACK值随机产生。告知client端server端已收到client端发送的SYN包;
  • 第三次握手:client端收到server端答复的SYN/ACk包后,又会回复一个ACK,ACK值是server端发送来的SYN/ACK包中的ACK值加1。告知server端client端已收到SYN/ACK包。到此为止,三次握手完成,client端和server端可以开始传送数据。

四次挥手过程

  • 断开TCP连接,要传送四个封包。比建立TCP连接时多了一次。主要原因是,断开TCP连接是在client端和server端分别发生的。
  • 设第一个封包由client端发送,则client端会发送一个FIN封包,值为1。告知server端client端要结束连接。
  • server端收到client端发送的FIN包后,知道client端已完成数据的传送要请求断开TCP连接。server端会发送一个ACK包给client端。告知client端server端已知道正常收到FIN包。
  • server端把未传送完的数据传送给client端后,也会给client端发送一个FIN,告知client端server端已完成数据传送,可以断开TCP连接。
  • client端收到server端发送的FIN封包后,会向server端回复一个ACK包,表示已确认server端的FIN封包。至此,TCP连接断开。

http和https

1、定义:HTTP和HTTPS协议是应用层协议

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式
https:(Secure Hypertext Transfer Protocol)安全超文本传输协议,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

2、http与https主要区别:

#http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议;
#http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443;

上图充分表明:HTTP是应用层协议,并且HTTPS是在HTTP协议基础上添加SSL等加密策略后的协议;TLS/SSL中使用了非对称加密,对称加密以及HASH算法。

3、Http协议

1)HTTP协议和TCP协议之间的区别:
①TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据;
②HTTP的默认端口号是80,TCP/IP协议通信编程时端口号需要自己指定(例如socket编程);
③HTTP协议是在TCP/IP协议基础上实现的,即HTTP数据包是经过TCP/IP协议实现传输的;
④HTTP是无状态的短连接协议,TCP是有状态的长连接协议;

HTTP是在有状态长连接TCP/IP协议的基础上实现的,为什么却是无状态短连接协议?
答:因为HTTP协议每次请求结束就会自动关闭连接,这样就变成了短连接;
短连接又导致了该次请求相关信息的丢失,也就造成了HTTP协议对于前期事务处理没有记忆能力,故为无状态协议。

2)HTTP协议其完整的工作过程可分为四步:
①连接:首先客户机与服务器需要建立连接(由TCP/IP握手连接实现)。只要单击某个超级链接,HTTP的工作开始;
②请求:建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容;
③应答:服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上;
④关闭:当应答结束后,浏览器和服务器关闭连接,以保证其他浏览器可以与服务器进行连接。

更完整的过程可能如下:
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

4、Https协议

HTTPS握手过程包括五步:
1)浏览器请求连接;
2)服务器返回证书:证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3)浏览器收到证书后作以下工作:
a) 验证证书的合法性;
b) 生成随机(对称)密码,取出证书中提供的公钥对随机密码加密;
c) 将之前生成的加密随机密码等信息发送给网站;
4)服务器收到消息后作以下的操作:
a) 使用自己的私钥解密浏览器用公钥加密后的消息,并验证HASH是否与浏览器发来的一致;
b) 使用加密的随机对称密码加密一段消息,发送给浏览器;
5)浏览器解密并计算握手消息的HASH:如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览
器生成的随机密码并利用对称加密算法进行加密。

• HTTPS协议、SSL、和数字证书:
概述:对于HTTPS协议,所有的消息都是经过SSL协议方式加密,而支持加密的文件正是数字证书;
(1)SSL
SSL常用的加密算法:对称密码算法、非对称密码算法、散列算法;
SSL的加密过程:需要注意的是非对称加解密算法的效率要比对称加解密要低的多。所以SSL在握手过程中使用非对称密码算法来
协商密钥,实际使用对称加解密的方法对http内容加密传输;
(2)数字证书:用于在INTERNET上标识个人或者机构身份的一种技术手段,它通过由一些公认的权威机构所认证,从而可以保证其安全地被应用在各种场合。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

Tcp超时重传&滑动窗口?

TCP等待时间需要设定,超过了就认为丢包,需要重传;为了防止拥塞情况,一般会采用流量控制,其实现手段是用滑动窗口限制客户端发送分组数量;

滑动窗口(Sliding window ):是一种流量控制技术。滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。
当滑动窗口为0时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

• 链接阻塞解决
• 最通常的方法是加定时器。
• 也可以采用非阻塞模式。设置非阻塞,返回之后用select检测状态) 如果select返回可读,结果只读到0字节,某个套接字集合中没有准备好,可能会select内存用FD_CLR清该位为0;
• 设置Keepalive参数,检测已中断的客户连接

TCP的connect函数与UDP的connect函数区别?

• UDP中可以使用connect系统调用。
•操作有着本质区别。TCP中调用connect会引起三次握手,client与server建立连接。UDP中调用connect内核仅仅把对端ip&port记录下来。
• UDP中可以多次调用connect,TCP只能调用一次connect。UDP多次调用connect有两种用途:1,指定一个新的ip&port连接。2,断开之前的ip&port的连接。指定新连接,直接设置connect第二个参数即可。
• UDP中使用connect可以提高效率。原因如下:普通的UDP发送两个报文内核做了如下:#1:建立连接#2:发送报文#3:断开连接#4:建立连接#5:发送报文#6:断开连接。采用connect方式的UDP发送两个报文内核如下处理:#1:建立连接#2:发送报文#3:发送报文另外一点,每次发送报文内核都可能要做路由查询。5:采用connect的UDP发送接受报文可以调用send,write和recv,read操作。当然也可以调用sendto,recvfrom。调用sendto的时候第五个参数必须是NULL,第六个参数是0。调用recvfrom,recv,read系统调用只能获取到先前connect的ip&port发送的报文。
• UDP中使用connect的好处:1:会提升效率。2:高并发服务中会增加系统稳定性。

猜你喜欢

转载自blog.csdn.net/github_36955602/article/details/87991223