zoukankan      html  css  js  c++  java
  • TCP概述

    一、概述

    1、什么是TCP

    ​ 传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内另一个重要的传输协议。

    ​ 当应用层给TCP层传送大数据包时,通常受数据链路层最大传输单元MTU的限制,TCP会将包分片,并编号传送给IP层。等接收方收到数据包后,即会返回确认信息。另外会有校验数据是否准确

    2、什么时候用TCP

    ​ 对通信质量有要求,:整个数据要准确无误的传送给接收方。比如:qq传送文件,POP3等邮件协议时

    3、怎么用TCP

    ​ 案例: http协议底层就是使用的TCP协议

    ​ 在java中可以通过socket编程(即ServerSocket等)来实现TCP连接

    4、TCP的特点

    TCP 是面向连接的运输层协议。即传输数据前需先建立连接确保网络通畅。

    每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一,一个发一个收)。

    TCP 提供可靠交付的服务。

    TCP 提供全双工通信,A与B通信,A发数据给B,B要给A发送返馈信息,表示数据是否收到。

    面向字节流

    • 什么是面向字节流?

    image-20210105164912155

    过程说明:

    1、发送端读取文件内容到TCP缓存中

    2、再从缓存中读取要传输的内容 加上 首部传输给接收方

    3、接收方先把数据放到缓存中,再从缓存中读取字节

    5、TCP存在的问题

    1、TCP粘包问题(TCP是基于字节流的,说包可能不太确切)

    • 产生原因

      1、发送端:发送端的Nagle算法,如果发送数据包太小,会把较小的数据包合并

      2、接收端:由于接收端会先把数据包放在缓冲区中,如果数据没有及时被进程取走,那么缓冲区可能同时存在多次发送的数据。然后被一次取走多个数据包。产生粘包现象

      ​ 值的注意的是: 粘包并不都有问题。如果是不带结构的连续流(比如文件传输),那么就不需要分包

    • 解决方法

      一、发送端

      ​ 1、通过编程。数据发送时,强制push,不用等缓冲区满了才发送==》关闭了优化算法,性能会降低

      ​ 2、在数据包后加分隔符。 之后再通过分隔符进行分包

      二、接收端

      ​ 1、通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象...

    参考链接:

    https://zh.wikipedia.org/wiki/传输控制协议

    https://www.codenong.com/cs105953441/


    如果本篇博客有任何错误和建议,欢迎大佬们批评指正

    我是知逆,我们下期见

    Peace

  • 相关阅读:
    剑指offer——从尾到头打印链表节点的值
    1, sync_with_stdio(), tie()的应用
    Python基础1:一些小知识汇总
    HTML
    CSS
    周总结
    十三章
    十二章总结
    十一章总结
    第十一章
  • 原文地址:https://www.cnblogs.com/mercurytan/p/14239821.html
Copyright © 2011-2022 走看看