网络协议相关

网络协议相关

客户端可以建立
port 65535最多可以建立65535个端口

服务端消耗1个,就一个80

三次握手(建立TCP连接)
第一次握手:客户端和服务起都处于关闭状态,客户端将标志位SYN置为1,随机产生一个值,并将该
数据包发给服务器,客户端进入同步已发送状态
第二次握手:服务端收到数据包后由标志位SYN=1得知客户端请求建立连接,服务端将标志位SYN和ACK都设置位1,
确认号ack=x+1,随机产生一个值seq = y,并将该数据包发送给客户端以确认连接请求,服务端进入SYN-RCVD
(同步收到)状态,此时操作系统为该TCP连接分配TCP缓存和变量;
第三次握手:客户端收到确认后,检查确认号ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack = y+1,
并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给服务器,服务器检查ack是否为y+1,ACK是否为1,
如果正确则连接建立成功,客户端和服务端进入ESTABLISHED(已建立连接)状态,完成三次握手,随后客户端和服务端就可以开始传输数据。
为什么客户端还要发送一次确认呢?可以二次握手吗?
答:为了避免已失效的连接请求报文段突然又传送到了服务端,因而产生错误。 如客户端发出连接请求,但因连接请求报文丢失而未收到确认,
于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端发出了两个连接请求报文段,
其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,
此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,
就建立新的连接了,此时客户端不理睬服务端的确认且不发送数据,则服务端一直等待客户端发送数据,非常浪费资源。

四次挥手(终止TCP连接)
第一次挥手:客户端发起中断连接请求,也就是发送FIN报文,告诉服务端我的数据已经全部发送完了,如果你还没有准备好,可以继续发送数据。
客户端进入FIN-WAIT-1(终止等待1)状态,等待服务端确认;

第二次挥手:服务端发送ACK,告诉客户端,请求我收到了,但我还没有准备好,请你等我的消息。这个时候服务端进入CLOSE-WAIT(关闭等待)状态,
此时的TCP处于半关闭状态。客户端收到服务端的确认后就进入FIN_WAIT(终止等待2)状态,等待服务端发送连接释放报文段;

第三次挥手:服务端没有要向客户端发送的数据了,服务端发出连接释放报文段,服务器进入LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到服务端发送的连接释放报文段后,对此发出确认报文段,客户端进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,
需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED(关闭)状态。

为什么A在TIME-WAIT状态必须等待2MSL的时间?

MSL最长报文段寿命Maximum Segment Lifetime,MSL=2

两个理由:
1、保证客户端发送的最后一个报文段能够到达服务器。
这个报文段有可能会丢失,使得处于LAST-ACK状态的服务端收不到对已发送的确认报文段,服务端超时重新发送连接释放报文段,
而客户端能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都进入到CLOSED状态,
如果客户端在TIME-WAIT状态不等待一段时间,而是发送完确认报文段后立即释放连接,则无法收到服务端重传的连接释放报文段,
所以不会再发送一次确认报文段,则服务端无法正常进入到CLOSED状态。

2、防止已失效的连接请求报文段”出现在本连接中。
客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

为什么挥手需要四次? 再来回顾下四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。关闭连接时,客户端向服务端发送 FIN 时,
仅仅表示客户端不再发送数据了但是还能接收数据。服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,
等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。从上面过程可知,服务端通常需要等待完成数据的发送和处理,
所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

为什么 TIME_WAIT 等待的时间是 2MSL? MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,
超过这个时间报文将被丢弃。因为 TCP 报文基于是 IP 协议的,而 IP 头中有一个 TTL 字段,是 IP 数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减 1,
当此值为 0 则数据报将被丢弃,同时发送 ICMP 报文通知源主机。MSL 与 TTL 的区别: MSL 的单位是时间,而 TTL 是经过路由跳数。所以 MSL 应该要大于等于 TTL 消耗为 0 的时间,
以确保报文已被自然消亡。TIME_WAIT 等待 2 倍的 MSL,比较合理的解释是: 网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,
所以一来一回需要等待 2 倍的时间。比如如果被动关闭方没有收到断开连接的最后的 ACK 报文,就会触发超时重发 Fin 报文,另一方接收到 FIN 后,会重发 ACK 给被动关闭方, 
一来一去正好 2 个 MSL。2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的。
如果在 TIME-WAIT 时间内,因为客户端的 ACK 没有传输到服务端,客户端又接收到了服务端重发的 FIN 报文,那么 2MSL 时间将重新计时。

1.OSI网络七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP四层概念模型
应用层
传输层
网络层
数据链路层

2.Tcp和Udp的区别?
是否连接:Tcp面向连接,Udp面向非连接。
传输可靠性:Tcp可靠,Udp不可靠。
应用场合: Tcp传输大量数据,Udp少量数据。
速度:Tcp速度慢 , Udp速度快。
模式:Tcp面向字节流,Udp是面向报文的。

3、HTTP与HTTPS有什么区别?
  HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,
    为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
    简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
  HTTPS和HTTP的区别主要如下:
  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

4.长连接和短连接
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议

UDP包括DNS、TFTP等协议

TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议

UDP包括DNS、TFTP等协议

短连接

连接->传输数据->关闭连接

HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

长连接

连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

http的长连接

HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。
HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,
再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 
如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,
如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

总之,长连接和短连接的选择要视情况而定。


5、一次完整的Http请求是怎样的?

DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,
并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值