TCP(传输控制协议)
Posted 许昌山炮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了 TCP(传输控制协议)相关的知识,希望对你有一定的参考价值。
它建立在网际层协议(IP)提供的数据包传输技术之上,。TCP使应用程序可使用连续的数据进行通信。除非由于网络故障导致连接中断或冻结,TCP都能保证数据流完好地传输。而不会发生丢包 ,重包或是乱序的问题。
1 TCP工作原理
如果使用udp提供的数据报机制,代码还要考虑传输的可靠性问题,以及错误是的恢复方案。但如果用TCP,数据包就隐藏在协议层之下,应用只需要型目标机器发生数据流,TCP会自动将丢失的信息重发,保证信息能够成功到达目标机器。
#每个TCP数据包都有一个序列号
#并不使用顺序的整数作为数据包的序列号
#初始序列号是随机的
#并不通过锁步的方式通信,这种方式必须等待每个接收完才发下一个。相反,TCP可以无需等待一口气发多个。某一刻对方希望同时传输的数据量叫做TCP窗口的大小。
#接收方的TCP实现可以通过控制发送方的窗口大小来减缓或暂停。这叫流量控制。
#如果TCP认为数据包被丢弃,他会认为网络变拥挤,然后减少发送的数据量。
2 何时使用TCP
两台主机间建立TCP连接需要三个数据包:
SYN:“我想通信,这是数据包的初始序列号”
SYN-ACK:“好的,这是我向你发送数据包的初始序列号”
ACK::“好的”
通信结束时,要发送另外3个或4个数据包来关闭连接。
不需要使用TCP:
一。如果客户端只需向服务器发送单个较小的请求,并且请求后无需后续通信。
二。客户端与服务器之间不存在长时间的连接的情况下。
三。当丢包现象发生时,如果应用程序有比简单地重传数据聪明的多的方法的话。
3 TCP套接字的含义
getsockname()函数用于获取一个套接字的名字。它用于一个已捆绑或已连接套接字s,本地地址将被返回。本调用特别适用于如下情况:未调用bind()就调用了connect(),这时唯有getsockname()调用可以获知系统内定的本地地址。在返回时,namelen参数包含了名字的实际字节数。
跟UDP的情况一样,TCP也使用端口号来区分同一IP地址上运行的不同应用程序。对于知名端口号和临时端口号的划分习惯于UDP是一致的。
以上是关于 TCP(传输控制协议)的主要内容,如果未能解决你的问题,请参考以下文章