TCP(传输控制协议)简介
发布日期:2021-08-21 13:18:14 浏览次数:20 分类:技术文章

本文共 1488 字,大约阅读时间需要 4 分钟。


TCP是一个面向连接的、端到端的可靠的传输层协议。位于TCP/IP网络分层架构中的第三层,底层是IP协议。IP把TCP段封装在数据报中发送到网络上。

 


TCP的正式标准是RFC793,后序又有许多其他RFC补充了TCP其他方面的附加信息,其中一些是为适应现代网络所做的增强。

793

传输控制协议

813

窗口和确认策略

879

最大段长度和相关专题

1122

互联网主机要求——通信层

1323

TCP高性能扩展

2018

TCP选择性确认

2581

TCP拥塞控制

2757

细长网络

2988

计算TCP重传定时器


TCP协议在传输数据之前先在两台设备之间建立一条虚拟连接,之后就可以双向传输数据。它使用端口为应用程序提供传输层寻址,这样允许多个进程使用同一个IP地址(不同端口)与不同主机上的多个进程通信。

TCP主要完成如下功能:

(1)数据封装和传输

TCP建立连接时会与对方协商最大的段大小(Maximum Segment Size, MSS),应用程序的数据按MSS的大小分成多个TCP段,段的前面是TCP首部,后面是应用程序的数据。IP协议再把TCP段封装到数据报中发送到网络上。

TCP可以在两个方向上传输连续的字节流,与UDP不同,TCP发送的数据长度没有协议上设置的限制,只受限于双方处理数据的缓冲区。

(2)可靠性

TCP的底层IP协议是不可靠的,网络通信设备也会有干扰和故障,这些都会导致数据丢失、破坏、失序、重复。TCP需要从这些错误中恢复。

1. 每个TCP段都要计算校验和,用于监测数据是否被破坏。如果接收方发现校验和不正确,就抛弃该TCP段,不发送确认,发送方收不到对该数据的确认便会重新发送。

2. TCP为数据中的每一个字节分配一个序号,接收主机可以根据序号校正失序或重复的数据。

3. TCP发送的数据,要求接收主机的确认,如果在发送主机设定的时间内,确认没有到达,将进行重传。只有收到确认后,TCP才会把已经确认的数据从队列缓冲区中删除。

(3)流量控制

TCP对两端传输的数据流加以管理。发送方根据接收方反馈的“通告窗口”控制数据的发送数量。“通告窗口”指明接收方可以接受的序列号范围,发送方在接收到进一步的允许之前,发送的数据不能超出这个范围。

发送端也有一个“拥塞窗口”用于控制流量。“拥塞窗口”根据网络拥塞情况得出。如果发送出去的数据连续得到确认,“拥塞窗口”会不断增加,以提高效率。

允许发送的数据量是“拥塞窗口”和“通告窗口”中的最小值,“通告窗口”是接收方的流量控制,而“拥塞窗口”是发送方施加的流量控制。

(4)拥塞避免

一旦发生拥塞,“拥塞窗口”将设置为一个MSS大小,当新的数据被确认时再增加“拥塞窗口”。

(5)多路复用

IP地址和端口号构成一个socket,一对socket唯一标识一个连接。这样允许多个进程使用同一个IP地址(不同端口)与不同主机上的多个进程进行TCP通信。

(6)连接管理

当两个进程进行TCP通信时,需要先建立连接。建立连接使用三次握手机制,每一方都发送它的初始序列号,并接收对方的确认。

通信完成时,需要终止连接,释放资源。两个主机不需要同时终止连接,每台主机都可以发送FIN,通知另一方它已经完成了数据发送任务,关闭从它到对方的数据发送任务,但它仍然可以接收对方发过来的数据,直到对方也关闭了连接为止。


【学习资料】 《Winsock网络编程经络》

转载于:https://www.cnblogs.com/zhuyf87/archive/2012/12/27/2835832.html

转载地址:https://blog.csdn.net/weixin_33720078/article/details/93736177 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:hdu 1195 Open the Lock
下一篇:Lake Counting

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2023年03月09日 20时39分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

python sqlserver 数据操作_python上手--python操作数据库 2019-12-02 01:43:35
80端口攻击_使用 ZoomEye 寻找 APT 攻击的蛛丝马迹 2019-12-02 01:43:35
leetcode c程序总提示主函数_Python练手:一行Python解Leetcode习题 2019-12-02 01:43:35
python多线程实现同时下载_Python实现多线程下载 2019-12-02 01:43:36
linux sleeping进程多_你知道Linux进程的睡眠和唤醒操作? 2019-12-02 01:43:36
fastcopy会损坏硬盘_绚丽多彩 卓有不凡 三星移动固态硬盘T5金属红新品评测 2019-12-02 01:43:36
git 修改密码_在windows中利用gitblit搭建git服务端 2019-12-02 01:43:36
gitlens突然不显示了_监控画面突然没有了怎么办?监控画面不显示了? 2019-12-02 01:43:36
python threading join_浅谈Python中threading join和setDaemon用法及区别说明 2019-12-02 01:43:34
工业循环冷却水处理设计规范_循环冷却水系统及其水处理 2019-12-02 01:43:34
c++ 多线程 类成员函数_C++11多线程 2019-12-02 01:43:34
vb6 怎么把一个数组的 0 值 去掉_解决逆向查找问题?VLOOKUP、CHOOSE、IF,索引数组,轻松解决... 2019-12-02 01:43:34
sqlite3 加密版本 下载_制作Sqlcipher+SM4加密的framework包(OC) 2019-12-02 01:43:34
python中基础知识_Python中的一些基础知识 2019-12-02 01:43:35
高通的快充协议_高通发布QC5.0快充技术最高100W+功率!手机厂商私有协议更好... 2019-12-02 01:43:32
csv逗号分隔符转换_文件系统(02):基于SpringBoot管理Xml和CSV 2019-12-02 01:43:32
python函数作用的描述_python基础之函数内容介绍 2019-12-02 01:43:33
python存数据到impala_0039-如何使用Python Impyla客户端连接Hive和Impala 2019-12-02 01:43:33
python设计模式pdf_精通python设计模式豆瓣-精通python设计模式第二版电子书pdf下载-精品下载... 2019-12-02 01:43:33
eclipse代码量统计插件_推荐一波代码量、行数、提交量、作者等全维度统计神器... 2019-12-02 01:43:33