TCP/IP 协议

TCP:Transmission Control Protocol 传输控制协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议 和 传输层的TCP协议组成。

通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

IP层:

  • 接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
  • IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

TCP:

  • TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
  • TCP提供的是一种可靠的数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。
  • TCP还采用一种称为"滑动窗口"的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

TCP 了解:

TCP是一种传输层通信协议。
它在应用程序间建立了一条虚拟链路。

TCP具有6个特点:

面向连接的传输;
端到端的通信;
高可靠性,确保传输数据的正确性,不出现丢失或乱序;
全双工方式传输;
采用字节流方式,即以字节为单位传输字节序列;
紧急数据传送功能。

在TCP/IP协议中传输层具有四个主要任务:

组包、
通过滑动窗口实现连接控制、
寻址、
通过序号确认来提供可靠性。

TCP协议段格式:

TCP首部结构如下:



源/目的端口:认识端口号

各占2字节。
端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。
表示数据是从哪个进程来, 到哪个进程去;(端口是传输层与应用层的服务接口)

序号 & 确认号:

序号:
占4字节。
TCP连接中传送的数据流中的每一个字节都编上一个序号。
序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。确认号:
占4字节。
是期望收到对方的下一个报文段的数据的第一个字节的序号。

数据偏移:

占4位。4位TCP报头长度,即数据偏移。
它指出 TCP报文段的 数据起始处距离TCP报文段的起始处有多远。
“数据偏移”的单位是32位字(以4字节为计算单位)。
表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60。

保留:占6位,保留为今后使用,但目前应置为0。

6位标志位(每个标志位只占了 1 个比特):

紧急URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。确认ACK:只有当ACK=1时确认号字段才有效。ACK=0时,确认号无效。推送PSH:当TCP收到PSH = 1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。提示接收端应用程序立刻从TCP缓冲区把数据读走。复位RST:当RST=1时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。同步SYN: 请求建立连接;  把携带SYN标识的称为同步报文段(在连接建立是用来同步序号)                                      SYN=1,ACK=0,连接请求;SYN=1,ACK=1,同意建立连接终止FIN:用来释放一个连接。FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

窗口:

占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。
TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,
然后通知对方以确定对方的发送窗口的上限。表明当前允许发送方发送的数据量是以1个字节为单位的,
在TCP当中,使用的是大小可变的窗口机制进行流量控制的(接收方对发送方的流量控制)

检验和 & 紧急指针:

检验和:占 2 字节。检验和字段检验的范围包括首部和数据这两部分,在计算检验和时,要在 TCP 报文段的前面加上12字节的伪首部。紧急指针:占 16 位。指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

选项 & 填充:

选项:长度可变。TCP最初只规定了一种选项,即 MSS(最大报文段长度Maximum Segment Size)。                  MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” MSS是 TCP 报文段中的数据字段的最大长度,数据字段加上TCP首部才等于整个的TCP报文段。填充:为了使整个首部长度是 4 字节的整数倍。TCP 数据部分的最大长度 MSS=TCP 报文段长度 - TCP 首部长度

基于TCP应用层协议:

HTTP
HTTPS
SSH
Telnet
FTP
SMTP
当然, 也包括自己写TCP程序时自定义的应用层协议;

TCP小结

为什么TCP这么复杂? 因为要保证可靠性,同时又尽可能的提高性能。

  • 可靠性:校验和序列号(按序到达) 确认应答 超时重发 连接管理 流量控制 拥塞控制
  • 提高性能:滑动窗口 快速重传 延迟应答 捎带应答
  • 其他:定时器(超时重传定时器, 保活定时器, TIME_WAIT定时器等)

确认应答、超时重发、连接管理、流量控制 等等可以参考这篇博客学习:TCP协议——机制
再推荐一篇博客,很重要:TCP三次握手 & 四次挥手

面向连接的传输层协议——TCP/IP协议相关推荐

  1. OSI七层与TCP\IP协议

    网络基础 网络基础 osi七层与TCP\IP协议 1为什么要分层? 2OSI七层模型 3七层总结 4数据封装的过程 5TCP/IP协议族的组成 总结 网络基础 什么是网络 网络:计算机网络是一组计算机 ...

  2. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★

    文章目录 一.传输层 TCP / UDP 协议 ★ 二.寻址端口号 ★ 三.UDP 协议特点 四.UDP 协议首部格式 五.UDP 校验 六.TCP 协议 特点 ★ 七.TCP 报文段首部格式 八.T ...

  3. 计算机网络参考模型(OSI七层与TCP/IP协议)

    目录 1 为什么要分层 1.1 层次划分的必要性 1.2 层次划分的方法 1.2 层次划分的优点 2 七层和四层的定义 2.1 七层的介绍 2.1.1 OSI七层参考模型 2.1.2 OSI七层工作原 ...

  4. OSI七层模型,TCP/IP协议

    物理层.数据链路层.网络层.传输层.会话层.表示层.应用层  物理层 作用:定义一些电器,机械,过程和规范,如集线器: PDU(协议数据单元):bit/比特 设备:集线器HUB; 注意:没有寻址的概 ...

  5. OSI七层与TCP/IP协议

    目录 1.OSI参考模型的分层 2.OSI参考模型每层的作用 3.设备与层的对应关系 二.TCP/IP协议族 1.传输层协议 2.网络层协议 3.应用层协议 三.数据封装与解封过程 1.封装过程 2. ...

  6. 网络协议——TCP/IP协议

    简介: TCP(传输控制协议)和 IP(网际协议)是两个独立且紧密结合的协议,负责管理和引导数据报文在 Internet上的传输.二者使用专门的报文头定义每个报文的内容.TCP 负责和远程主机的连接, ...

  7. 网络协议:TCP/IP协议,你看懂了吗?

    这样的TCP/IP协议,你看懂了吗? 本文章转载自https://blog.csdn.net/yulyu/article/details/69062288 精通 TCP/IP,熟练使用 Socket ...

  8. 链路层 ---《TCP/IP协议》卷一

    第2章 链路层 2.1 引言 链路层主要有三个目的: 为IP模块发送和接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请求和接收RARP应答. 将详细讨论: 以太 ...

  9. 传输层 :TCP/UDP 协议(用于封装接口)

    一.UDP协议 16 位源端口号.目的端口号:用于定位进程 . 端口号上限是 216^{16}16 - 1 = 65535. 二.TCP协议 TCP 数据报:除了拥有端口号,还拥有 (1)32 位为序 ...

最新文章

  1. 【剑指offer-Java版】28字符串的排列
  2. 点击area不出现黑框_6种黑框玻璃门隔断,凭高颜值和实用性成为小户型新宠!...
  3. Citrix各系列产品安装光盘资源下载链接
  4. git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
  5. Python 去除序列s中的重复元素
  6. 第一个脚本-HelloWorld
  7. 广度优先搜索——岛屿数量(Leetcode 200)
  8. POJ 2115C Looooops[一元线性同余方程]
  9. M1 Mac 档案的临时暂存区工具: Yoink
  10. Mozilla Thimble,在线html,javascript编辑器
  11. 多媒体文件格式全解说(下)--图片
  12. 力扣 69. x 的平方根 三种方法
  13. Finalize、dispose、dispose(bool disposing)
  14. Android 10 SystemUI中Android.bp文件中集成第三方JAR包或者so文件的方法
  15. IP (网络之间互连的协议)
  16. 计算机应用基础165791,人大网大计算机应用基础试题答案解析.doc
  17. P1164 小A点菜(DP动态规划,洛谷,java)
  18. 批量添加联系人的方法
  19. QT学习11:clicked和toggled信号
  20. android 播放器架构,Android播放器框架设计系列-1

热门文章

  1. 视频批量去片头片尾小工具源码分享
  2. 一次关于IconFont的调研
  3. java无极树形结构_Java爬虫框架:SeimiCrawler——结构化解析与数据存储
  4. 一文彻底搞懂代理模式(Proxy)
  5. 记录一次批量插入的优化历程
  6. jquery 获取radio的值
  7. windows的图片浏览器
  8. 网络编程—Linux多线程与多进程
  9. 公众号获取用户手机号_微信公众号模板消息软件怎么指定用户发送?
  10. 有关属性离散化算法CACC的再次补充说明