OSI七层网络
- TCP提供什么功能?
Transmission Control Protocol,缩写为TCP。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据包协议(UDP)是同一层内另一个重要的传输协议。
传输层:端对端连接
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
-
TCP 三次握手和四次挥手
建立连接
- 什么是可靠连接
- 服务器被动打开
- SYN:很小的数据包
- ACK:
2.1 为什么三次握手?
采用三次握手是为了防止已连接的请求报文段又传送到服务器,造成服务器崩溃。
假设只有两次握手,连接时,第二次丢失,服务器认为连接成功,而客户端认为连接失败,继续发送连接请求,服务器就会收到SYN的洪水攻击。
2.2 为什么建立连接是三次握手,关闭连接是四次握手?
全双工:指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
半双工:指一个时间内只有一个方向的信号传输(A→B或B→A)。
因为TCP是全双工模式,因此每个方向都需要一个FIN和ACK,当一端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。
在建立连接时,服务器可以把SYN和ACK放在一个包中发送。
假设在断开连接时,如果一端收到FIN包,但此时仍有数据未发送完,此时就需要先向对端回复FIN包的ACK。等到将剩下的数据都发送完之后,才能向对端发送FIN,断开这个方向的连接。
因此很多时候FIN和ACK需要在两个数据包中发送,则需要四次握手。
2.3 2MSL等待时间( Maximum Segment Life)
第四个消息:A发出ACK,用于确认收到B的FIN当B接收到此消息,即认为双方达成了同步:双方都知道连接可以释放了,此时B可以安全地释放此TCP连接所占用的内存资源、端口号。
所以被动关闭的B无需任何wait time,直接释放资源。
但,A并不知道B是否接到自己的ACK,A是这么想的:
- 1)如果B没有收到自己的ACK,会超时重传FiN那么A再次接到重传的FIN,会再次发送ACK.
- 2)如果B收到自己的ACK,也不会再发任何消息,包括ACK无论是1还是2,A都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是:去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。这恰恰就是2MSL( Maximum Segment Life)。
- TCP为什么能保证可靠传输?
- 确认和重传机制
- 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
- 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
- 数据排序
- TCP有专门的序列号SN字段,可提供数据re-order
- 流量控制
- 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
- 拥塞控制
- 套接字是什么?
为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
- TCP和UDP的区别
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) - TCP首部开销20字节;UDP的首部开销小,只有8个字节
网友评论