目录
1、TCP与UDP的区别
2、HTTP与TCP的区别
3、HTTP与HTTPS的区别
4、HTTP协议
5、TCP的三次握手
6、TCP四次挥手过程
7、为什么需要三次握手?
8、如果TCP的握手是两次
9、如果TCP的握手是四次
10、为什么要有TIME_WAIT状态??
11、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
12、释放连接时为什么TIME-WAIT状态必须等待2MSL时间?
13、一次完整的HTTP请求过程
14、TCP如何保证可靠传输?
15、http状态码
16、HTTP的Method方法
17、URI和URL的区别
18、OSI七层模型
19、TCP/IP五层模型
20、TCP/IP协议4层模型
1、TCP与UDP的区别
- TCP面向连接,UDP不需要连接;
- TCP提供可靠服务,数据传输无差错、不丢失、不重复,且按序到达,UDP尽力交付;
- TCP面向字节流,UDP面向报文;
- UDP没有拥塞控制,因此网络出现拥塞时不会使源主机的发送速率降低(对实时应用很有用,比如qq电话等);
- TCP是一对一,UDP一对一、一对多、多对多;
????????安全性肯定是TCP/IP协议高,因为其拥有三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。但是就速度来说,还是UDP协议更高,毕竟其无需重复返回验证,只是一次性的。
拥塞控制:防止过多的数据注入到网络中,避免网络中路由器过载,拥塞控制是一个全局的过程,涉及到所有主机和路由器;
流量控制:指的是点对点通信量的控制,数据的传输过程中,很可能出现收方来不及接收的情况,这时候就需要对发送方进行流量控制;
2、HTTP与TCP的区别
- http是应用层协议,tcp是传输层协议,http建立在tcp的基础之上;
- tcp只是单独的建立连接,定义数据的传输方式;
- http定义数据传输内容的规范;
3、HTTP与HTTPS的区别
- http是超文本传输协议,采用明文传输,不提供数据加密,https是基于安全套接字的超文本传输协议,在http的基础上加入了SSL协议进行加密;
- 连接方式不同,所用端口也不一样,http标准端口是80,https标准端口是443;
- http是应用层,https是传输层;
- http不安全,https安全;
- http不需要证书,https需要证书;
- 都采用了统一资源定位符(URL)
4、HTTP协议
????????HTTP协议是基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据。
????????无状态的:协议对于事务处理没有记忆能力,客户端第一次与服务端建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加了页面等待时间,当客户端向服务端发送请求,服务端响应完毕后,两者断开连接,也不保存连接状态。下次该客户端向同样的服务器发送请求时,需要重新建立连接。
????????有时需要对用户之前的http通信状态进行保存,比如执行一次登录操作,在30分钟内所有的请求都不需要再次登录,于是引入了cookie技术。
http请求报文:请求行、请求头部、空行、请求数据;
http响应报文:状态行、响应头部、空行、相应数据;
5、TCP的三次握手
?
第一次握手:
????????客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=J ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号
第二次握手:
????????TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=J+1,同时也要为自己初始化一个序列号 seq=K,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号
第三次握手:
????????TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=K+1,[自己的序列号seq=J+1],此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号
????????当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了
6、TCP四次挥手过程
????????1 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态, TCP规定,FIN报文段即使不携带数据,也要消耗一个序号;
????????2 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间;
????????3 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
????????4 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
????????5 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2??MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCP后,才进入CLOSED状态。
????????6 服务器只要收到了客户端发出的确认,立即进入CLOSED状态
7、为什么需要三次握手?
????????信道是不可靠的,我们要建立可靠的连接发送可靠的数据,TCP是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率
8、如果TCP的握手是两次
??????? 如果client发给server的SYN报文因为网络原因,延迟发送。由于client没有收到server对SYN的确认报文,会重发SYN报文,服务器和回复ACK,连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到了server,server误以为这是client重新发送的同步报文,又回复了一个ACK,和client建立了连接。
??????? 如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好连接。client会重发SYN报文,此时server已经处于就绪状态,认为已经建立好连接。
9、如果TCP的握手是四次
- client给server发送SYN同步报文
- server收到SYN后,给client回复ACK确认报文
- server给client发送SYN同步报文
- client给server发送ACK确认报文
????????第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了一次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。
10、为什么要有TIME_WAIT状态??
????????可靠终止TCP连接。如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态的client可以继续对FIN报文做回复,向server发送ACK报文。
????????保证让迟来的TCP报文段有足够的时间被识别和丢弃。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。
11、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
????????因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
12、释放连接时为什么TIME-WAIT状态必须等待2MSL时间?
????????MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃
????????第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段,重置时间等待计时器(2MSL),如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态;
????????第二,A在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段
13、一次完整的HTTP请求过程
????????域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
- http域名解析:浏览器自身的DNS缓存-系统自身的DNS缓存-hosts文件-互联网上的DNS缓存;
- 浏览器查找到IP地址后,创建socket,按照给定的IP和端口(默认是80)连接服务器,比如使用socket.connect();
- 浏览器连接到web服务器后,使用http协议发送数据,比如请求行,请求头,空行,请求数据等。发送请求的过程中,浏览器会向web服务器以流的形式传输数据,这里可能使用到socket.send();
- 浏览器开始等待web服务器把自己想要的资源返回给他;
- web服务器使用socket.accept()方法监听到浏览器的连接后,接收数据并解析数据,然后去读取浏览器要访问的资源,这里可能使用socket.sent();
- web浏览器发送完处理结果后关闭socket;
- 浏览器接收到web发送的资源,并响应后将其显示在浏览器的界面,关闭界面;
14、TCP如何保证可靠传输?
- 三次握手;
- 超时重发,当 TCP 发出一个请求后,它启动一个定时器,如果不能及时收到一个确认就重发;
- 对于收到的请求,给出确认响应;
- 校验出包有错,丢弃报文段,不给出响应;
- 对失序数据进行重新排序,然后才交给应用层;
- 对于重复数据,能够丢弃重复数据;
15、http状态码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
301状态码:被请求的资源已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302状态码:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
16、HTTP的Method方法
17、URI和URL的区别
????????URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:
????????①访问资源的命名机制
????????②存放资源的主机名
????????③资源自身的名称,由路径表示,着重强调于资源。
????????URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何定位这个资源。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成:
????????①协议(或称为服务方式)
????????②存有该资源的主机IP地址(有时也包括端口号)
????????③主机资源的具体地址。如目录和文件名等
https://www.zhihu.com/question/21950864
18、OSI七层模型
19、TCP/IP五层模型
20、TCP/IP协议4层模型
应用层:对应OSI(应用层、表示层、会话层),为用户提供各种服务,例如:FTP,TEINET,DNS,SMTP等;
传输层:对应OSI(传输层),为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(tcp)和用户数据报协议(UDP)。
网际互联层:对应OSI(网络层)主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)、和互联网控制报文协议(ICMP);
网络接口层:对应OSI(数据链路层、物理层),它负责监视数据在主机和网络之间的交换。事实上,tcp/IP它本身并未定义该层的协议,而由参与互联的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
|