TCP/IP 高频点复习笔记

1.OSI七层模型和TCP/IP四层模型

OSI参考模型主要由七层架构组成,分别是:

  1. 物理层: 主要包括一些物理标准设备,如网线接口类型、光纤接口类型、各种传输介质速率等。主要作用是传输比特流。这一层的数据叫做比特

  2. 数据链路层: 主要从物理层接受的数据进行MAC地址(网卡地址)的封装与解封。这一层的设备叫交换机,数据通过交换机来传输。

  3. 网络层: 下层接收到的数据进行IP地址的封装与解封装。这一层工作得设备是路由器,这一层的数据叫数据包

  4. 传输层: 定义了一些传输数据的协议和端口号,如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。。主要是将下层数据进行分段传输,到达目的地后进行重组。这一层的数据叫

  5. 会话层: 通过传输层建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。

  6. 表示层: 主要对接收到的数据进行解释、加密和解密、压缩与解压缩

  7. 应用层: 主要是一些终端的应用,如FTP,WEB,QQ之类的。

TCP/IP四层模型分别是:
应用层: 参考于OSI参考模型的高层,为用户提供所需要的各种服务,如FTP、Tenlnet、DNS、SMTP等。

传输层: 对应与OSI参考模型的传输层,为应用层提供端到端的通讯功能,保证了数据包的顺序传送和数据的完整性。主要定义了TCPUDP协议。

网络层: 网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。该层协议有IP协议、地址解析协议(ARP)、互联网管理协议(IGMP)和互联网控制报文协议(ICMP)。

IP协议是网际互联层最重要的协议,它提供的是一个不可靠、无连接的数据报传递服务。

网络接口层: 网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。

TCP/IP 高频点复习笔记_第1张图片

OSI七层网络模型

TCP/IP四层概念模型  

对应网络协议

应用层(Application)

应用层

HTTP、TFTP, FTP, NFS, WAIS、SMTP

表示层(Presentation)

Telnet, Rlogin, SNMP, Gopher

会话层(Session)

SMTP, DNS

传输层(Transport)

传输层

TCP, UDP

网络层(Network)

网络层

IP, ICMP, ARP, RARP, AKP, UUCP

数据链路层(Data Link)

网络接口层

FDDI, Ethernet, Arpanet, PDN, SLIP, PPP

物理层(Physical)

IEEE 802.1A, IEEE 802.2到IEEE 802.11

优点:

  1. 把复杂网络分成更容易管理的层(复杂问题划分成若干个小问题)
  2. 没有一个厂商能够提供全套完成的解决方案和所有的设备、协议
  3. 分工明确,上层不关心下层下层细节

2. TCP 协议

2.1 TCP长连接和短链接

TCP在真正的读写操作之前,server和client必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接。连接的建立通过三次握手,释放需要四次挥手。所以说每建立一个连接都是需要消耗资源和时间的。

TCP短链接

短链接步骤:client向server发送连接请求 -> server接到请求 -> client向server发送消息 -> server回应client -> 一次读写完成,一般由client发起close操作。

短连接之间一般只会在client/server之间传递一次读写操作。

TCP长链接

长链接步骤:client向server发送连接请求 -> server接到请求 -> client向server发送消息 -> server回应client -> 一次读写完成,连接不关闭 -> 后续读写操作 -> 一般由client发起close操作

各自优缺点以及应用场景

  • 长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。
  • client和server之间连接一直不关闭的话,会导致客户端连接越来越多,导致server压力过大。这时server会采用一些策略,关闭一些较长没有IO时间的连接等。
  • 短链接对于服务器比较简单,存在的连接都是有用连接,不需要额外手段。但如果请求频繁,在建立和关闭连接上会浪费资源。

长连接适用场景:监控系统、即时通讯系统、数据库连接

短链接使用场景:Http服务

2.2 TCP三次握手和四次挥手

TCP/IP 高频点复习笔记_第2张图片

  • 序列号SEQ:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

  • 确认序号 ack:占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

  • 确认标志位ACK:占1位,确认序号有效。

  • 同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。

  • 终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

2.2.1 三次握手

TCP/IP 高频点复习笔记_第3张图片

第一次握手: 客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。

第二次握手: 服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为x+1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。

第三次握手: 客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=Y+1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。

问题:为什么不能用两次握手进行连接?
答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

问题:如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

2.2.2 四次挥手

TCP/IP 高频点复习笔记_第4张图片
四次挥手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包
第一次挥手: 主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X,ACK为Z。
第二次挥手: 被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
第三次挥手: 被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
第四次挥手: 主动关闭方发送第四个包,其中发送顺序号seq为X,接收顺序号ack为Y + 1。至此,完成四次挥手。

超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO.

问题:为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
两个存在的理由:1、无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文。2、关闭链接一段时间后可能会在相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2MSL足以让分组最多存活msl秒被丢弃。

2.3 TCP滑动窗口

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方何有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接受。如果发送窗口左部的字节已经发送并且收到了确认,那么将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接受窗口的滑动类似,接受窗口左部字节已经发送确认并交付主机,就向滑动接受窗口。

2.4 UDP协议和TCP协议的区别

UDP又称无连接协议, 主要用于如下:

特征点 TCP UDP
是否连接 面向连接 非连接
传输可靠性 可靠 会丢包,不可靠
应用场景 传输数据量大 传输量小
速度

你可能感兴趣的:(计算机网络)