tcp/ip分层协议栈(七层架构)
物理层:解决电信号的传输问题,定义电器规范,设备规范,物理接口等,研究对象为比特位,为两端设备提供原始比特流的传输通路。设备:集线器,网线,HUB,RJ45标准。
链路层:将下层比特位分帧(Frame),这些帧可以被识别,能进行物理地址(MAC地址)寻址和重发。设备:交换机,网桥,网卡。
网络层:将数据帧以包为单位分包,并为数据在节点之间的传输创建逻辑链路,并进行地址管理和路由选择。设备:路由器,防护墙,IP协议,OSFP。
传输层:提供应用程序进程之间的逻辑通信。建立进程之间连接,处理数据包错误和包次序等。出现了进程,TCP,UDP,进程和端口等概念
会话层:会话的访问验证和会话管理,会话断开连接的重连等。
表示层:数据加密解密,编码和解码,压缩和解压缩。
应用层:为操作系统或应用程序提供访问网络服务的接口。常见:FTP,HTTP,DNS,SSH,SNMP。
tcp的三握四挥
三握
第一次握手:客户端发送syn包给服务器,SYN=1,序列号seq=x,客户端进入syn-sent状态
第二次握手:服务器收到syn包以后返回报文,ack=x+1,ACK=1,SYN=1,同时生成序列号seq=y,进入syn-rcvd状态
第三次握手:客户端收到服务器的报文以后,返回给服务器ack=y+1,ACK=1,自己的序列号seq=x+1,进入established状态,服务器收到也进入established状态
四挥
第一次挥手:客户端发送连接释放报文(FIN=1,序列号seq=u)并停止发送数据,关闭链接,进入FIN-WAIT-1状态
第二次挥手:服务器收到释放连接发送确认报文(ACK=1,ack=u+1,序列号seq=p),服务器进入CLOSE-WAIT状态,客户端收到报文,进入FIN-WAIT-2状态
第三次挥手:服务器发送连接释放报文(FIN=1,ACK=1,ack=u+1,序列号seq=w),服务器进入LAST-ACK状态
第四次挥手:客户端收到服务器连接释放报文,发出确认报文(ACK=1,ack=w+1,seq=u+1),进入TIME-WAIT状态,等待2MSL后,进入CLOSE状态
tcp断开链接为什么是四挥,能不能三挥?
四次挥手把同意对方请求跟自身请求分离开。是因为在客户端请求断开时(客户端发送端->服务器接收端),服务器可能还有数据未发完,所以需要分开操作:
- 先同意对方关闭连接,对方无法传输数据;(第二次挥手)
- 自己若还有数据未发送完,接着发送直至全部发送完毕;
- 请求自身关闭连接;(第三次挥手)
也就是说,三次握手、四次挥手差别就在第二次,有没有把同意对方请求跟自身请求拆分开。
HTTP1.0和1.1的区别
缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
带宽优化及网络连接的使用
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
错误通知的管理
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
Host头处理
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
长连接
HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
tcp和udp的区别
OSI 和 TCP/IP 模型在传输层定义两种传输协议:TCP(或传输控制协议)和 UDP(或用户数据报协议)。
UDP:
UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。ICQ 短消息使用 UDP 协议发送消息。
许多程序将使用单独的TCP连接和单独的UDP连接。重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。
TCP:
TCP的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。记住,较低的网络层会将每个数据包视为一个独立的单元,因此,数据包可以沿完全不同的路径发送,即使它们都是同一消息的组成部分。这种路由与网络层处理分段和重新组装数据包的方式非常相似,只是级别更高而已。
为确保正确地接收数据,TCP要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。
区别
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道