初识TCP

TCP是一种面向连接的、可靠的传输层协议,它确保数据无差错、不丢失、不重复地按序传输。TCP连接由两端点(套接字)唯一确定,涉及IP地址与端口号的组合。在数据传输中,TCP可根据网络状况决定报文段的大小,而接收方收到的字节流可能与发送方的块大小不同,但内容必须一致。TCP连接的建立和释放涉及三次握手和四次挥手过程,确保连接的稳定性和数据的正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP是什么?

答:TCP是TCP/IP体系中非常复杂的一个协议。它具有以下最主要的特点。

  • TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。也就是说,引用进程之间的通信就像是在通电话:通话前得先拨号建立连接,通话结束后要挂机释放连接
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的,就像通话,你再同一时间只能给一个人打电话或者接电话,不可同时接听两个电话或者同时打两个电话。
  • TCP提供可靠交付的服务(可靠控制方式后续会详细讲解),通过TCP连接传输的数据,无差错、不丢失、不重复,并且按序到达。
  • TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存的接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据
  • 面向字节流。TCP中的流指的是流入到进程或从进程流出的字节序列。面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块,但是TCP把应用程序交下来的数据看成是一连串的无结构的字节流。

 注意:TCP并不保真接收方应用程序所收到的数据块和发送方的发送应用程序发出的数据块具有对应的关系(例如,发送方应用程序交给发送方的TCP共10个数据块,但是接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。当然,接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层的数据。

图解:

 说明:TCP连接是一条虚连接,也就是逻辑连接,而不是一条真正的物理连接。TCP报文段先要传送到IP层(即网络层),加上IP首部后,再传送数据到数据链路层,再加上数据链路层的首部和尾部后,才离开主句发送到物理链路。另外需要指出的是,TCP和UDP在发送报文时所采用的的方式完全不同。TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定来决定一个报文段应包含多少个字节,而UDP发送的报文长度是应用进程给出的(相当于UDP是个老实娃,应用进程给多少,我就一次发出去,不管对方收不收得到,而TCP比较聪明,应用进程给我了一些数据,我会根据网络好坏判断此时发送多少数据保证对放能够收到,即:我会发送完数据的,但是发送几次我说了算),如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分成短一些再传送。如果引用进程依次只发来一个字节,TCP也可以等待积累有足够的多的字节再构成报文段发送出去。

TCP连接详解

TCP连接是TCP协议中最基本的概念,没有连接,一切都是空谈,那么它到底是怎样连接的呢?

前面已经提过,每一条TCP连接由两个端点。那么问题来了,这里所说的端点究竟是什么呢?

TCP连接的端点叫套接字(socket)或插口。RFC793定义:端口号拼接到IP地址即构成了套接字,因此,套接字的表示方法是在点分十进制的IP地址后边写上端口号,中间用冒号或逗号隔开。例如:若IP地址是192.3.4.5,而端口号是80,那么得到的套接字就是(190.3.4.5:80)。

每一条TCP连接唯一的被通信两端的两个端点(即两个套接字)所确定,即:

TCP连接::={socket1,socket2}={(IP1:PORT1),(IP2:PORT2)}

注意:我们平时说的在两个应用进程之间建立了一条TCO连接,其实是不严谨的,一定要知道:TCP直接连接的端点其实是套接字,即:IP:port。此外,同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在不同的TCP连接中。

附:TCP里边中所讲的socket和其它socket意义并不同,不可混为一谈

下一篇,可靠传输的实现!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值