码迷,mamicode.com
首页 > 其他好文 > 详细

三、 TCP(传输控制协议)

时间:2017-10-08 12:17:38      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:中断   暂停   连接   数据   套接字   之间   情况下   接收   是的   

  它建立在网际层协议(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(传输控制协议)

标签:中断   暂停   连接   数据   套接字   之间   情况下   接收   是的   

原文地址:http://www.cnblogs.com/shanpao/p/7636914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!