1、简述osi七层模型和TCP/IP五层模型
网络协议通常分不同层次进行开发,每一层分别负责不同的通行功能。
OSI七层模型
OSI:Open System Internetconnection(开放系统互联),由ISO国际标准化组织定义;目的是规范网络环境,实现软硬件兼容;自上而下共分为七层
应用层:各种应用程序及接口
表示层:对数据进行转换,加密、压缩
会话层:维持不同应用程序的数据分离
传输层:提供可靠的端到端的报文传输和差错控制
网络层:将分组从源端到目的端,提供路由选择
数据链路层:将分组数据封装成帧,提供节点到节点的方式传输
物理层:在媒体上传输比特,提供电气和机械的规约
特点:上层依赖于下层,下层为上层提供服务
TCP/IP五层模型
TCP/IP(Transmission Control Protocol/Internet Protocol)协议属于网络传输协议。TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。TCP/IP的应用层相当于OSI七层协议的应用层、表示层、会话层,其他各层一一对应。
2、总结描述TCP三次握手四次挥手
上图为TCP整个完整的通信过程,首先经过三次握手建立连接(绿色部分),连接建立后可以正常通信(蓝色部分),通信完毕需要四次挥手断开连接(红色部分)
三次握手
tcp是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。
如果client向server发送的第一条请求连接报文段由于网络原因,延迟发送。由于client没有接收到server对SYN的确认报文段,会重发SYN报文。server回复ACK,建立连接。数据发送完毕,这条连接正常关闭。这时,延迟的SYN报文发送到server,服务器误认为这是client重新发送的同步报文,又回复了一个ACK,和客户端建立了连接。
如果server给client发送的ACK报文,由于网络原因,报文被丢弃,但server认为已经建立好连接,但是client没有收到server发来的确认报文,认为没有建立好连接。client会重新发送SYN报文,此时server已经处于ESTABLISHED状态,认为已经建立好连接。
如果client向server发送了第一条请求连接报文段,但发送过后client由于程序关闭或超时导致直接关闭,但server收到了客户端发来的请求,并回复ACK报文,建立连接。这样会浪费服务器的资源。
四次挥手
客户端向服务器发送连接释放报文段并停止发送数据。此报文段中终止控制位FIN=1,seq=u(等于前面已传送过的数据的最后一个字节加1)。此时A进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据也要消耗一个序号。
服务器收到连接释放报文段后就发出确认报文段。此报文段中确认号ack=u+1,seq=v(等于前面已传送过的数据的最后一个字节加1)。此时服务器进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程通知应用进程,客户端到服务器的连接释放了,这时的TCP连接处于半关闭(half-close)状态,但服务器到客户端的连接并未关闭,此时服务器发数据,客户端仍要接收。
客户端收到服务器的确认后,就进入FIN-WAIT2(终止等待2)状态,等待服务器发出的连接释放报文段
如果服务器已没有要发送的数据,就发送连接释放报文段。此报文段中FIN=1,seq=w(在半关闭状态中B可能发送了数据),ack=u+1。此时服务器进入LAST-ACK(最后确认)状态
客户端收到了服务器的连接释放报文段后就发出确认报文段。此报文段中ACK=1,ack=w+1,seq=u+1。此时客户端进入TIME-WAIT(时间等待)状态
此时TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的2倍的最长报文段寿命MSL(Maximum Segment Lifetime)后,客户端才进入到CLOSED状态。MSL建议设为2分钟。当客户端撤销相应的传输控制块TCB后,就结束了这次TCP连接
服务器收到客户端的确认报文,就进入CLOSED状态。服务器撤销相应的传输控制块TCB后,就结束了这次的TCP连接
3、描述TCP和UDP区别
1)基于连接vs无连接
TCP是面向连接的协议,而UDP是无连接的协议。
2)可靠性不同
TCP提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的。如果消息在传输过程中丢失,那么它将重发,这是由TCP协议本身控制的。另一方面,UDP是不可靠的,它不提供任何交付的保证。一个数据报包在运输途中可能会丢失。这就是为什么UDP是不适合保证交付的项目。
3)有序性
TCP保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。UDP不提供任何有序性或序列性的保证。数据包将以任何可能的顺序到达。这就是为什么TCP是适合需要顺序交付方式的应用,尽管有基于UDP的协议通过使用序列号和重传来提供有序和可靠性的应用
4)速度
TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,他需要做比UDP多的多的事。这就是为什么UDP更适用于对速度比较敏感的应用,例如:在线视频媒体,电视广播和多人在线游戏。
5)头大小
TCP具有比UDP更大的头。一个TCP数据包报头的大小是20字节,每行32位,5行。UDP数据报报头是8个字节,每行32位,2行。TCP报头中包含序列号,ACK号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口。而UDP报头只包含长度,源端口号,目的端口,和校验和。
6)拥塞或流控制
TCP有流量控制。在任何用户数据可以被发送之前,TCP需要三数据包来设置一个套接字连接。TCP处理的可靠性和拥塞控制。另一方面,UDP不能进行流量控制。