TCP-IP协议
来源:互联网 发布:苏联专家 知乎 编辑:程序博客网 时间:2024/05/22 03:08
TCP-IP协议通信有三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。
(1)建立TCP链接通道:三次握手。
(2)传输数据:超时重传,快速重传,流量控制,拥塞控制等。
(3)断开TCP连接通道:四次握手。
三次握手过程:
第一次握手:客户端发送syn包到服务器(seq=x),并进入SYN_SEND状态,等待服务器的确认。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1)发送ACK包,同时自己也发送一个SYN包到客户端(seq=y),服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN包+ACK包后,向服务器发送确认包ACK(ack=y+1),发送后客户的进入ESTABLISHED状态,完成了三次握手。
(握手过程中传送的包里不包含数据,三次握手之后,客户端和服务端才正式的开始传输数据,否则在关闭连接之前TCP链接一直都保持下去。)
传输数据过程:
1.超时重传:超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认为报文丢失,会重传这个数据包。
2.快速重传:接受数据一方发现有数据包丢掉了。就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。
3.流量控制:这里主要说TCP滑动窗流量控制。TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。 滑动窗可以是提高TCP传输效率的一种机制。
4.拥塞控制:滑动窗用来做流量控制。流量控制只关注发送端和接受端自身的状况,而没有考虑整个网络的通信情况。拥塞控制,则是基于整个网络来考虑的。考虑一下这样的场景:某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,于是,这个情况就会进入恶性循环被不断地放大。试想一下,如果一个网络内有成千上万的TCP连接都这么行事,那么马上就会形成“网络风暴”,TCP这个协议就会拖垮整个网络。为此,TCP引入了拥塞控制策略。拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。
四次握手断开连接:
第一次握手:客户端给服务端发送一个FIN告诉服务端我不会再发数据了,关闭客户端到服务端的数据传输。ack=y+1 seq=x+2 FIN
第二次握手:服务端收到FIN包后,发送一个ACK包告诉客户端我知道了,ack=x+3 ;
第三次握手:服务端给客户端发送一个FIN包用来告诉客户端我也不发数据了,关闭服务端到客户端的数据传送FIN seq = y+1。
第四次握手:客户端收到FIN后,发送一个ACK告诉服务端我知道了,ack=y+2。
- 【TCP/IP】TCP协议
- TCP/IP协议之TCP
- TCP/IP详解:协议(TCP)
- tcp/ip简介------TCP协议
- 了解TCP/IP协议
- TCP/IP协议介绍
- TCP/IP协议基础
- TCP/IP协议介绍
- TCP/IP协议简介
- TCP/IP 协议
- 重装TCP/IP协议
- TCP/IP协议简介
- TCP/IP协议分析
- TCP/IP协议基础
- 走近TCP/IP协议
- TCP/IP协议简介
- TCP/IP协议简介
- TCP/IP协议初探
- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
- ios 开发资源汇总
- Python逐行读取文件内容
- 算法导论11(散列表)
- oc 学习资源
- TCP-IP协议
- Scala的数据类型和基础语法
- OpenGL API 之 glTransfer
- example: call cuda toolkit curand API from common lisp
- 1280 前m大的数
- 啊三大三大三大阿斯顿
- ios 5个iOS应用开发者海外学习资源站推荐
- ratio_to_report()分析函数
- 【移动开发】AIDL中callback的实现