TCP协议简介
2016-06-22 19:10
351 查看
1.TCP协议的特点
TCP是面向连接的运输层协议每一条TCP连接只能有两个端点。TCP只能进行点对点通信
TCP提供可靠交付的服务。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达
TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP通信的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据。
面向字节流。
面向字节流的含义是:虽然应用程序和TCP的交互是一个一个的数据块,但是TCP把应用程序交下的数据看成仅仅是一串的无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对用关系。
TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节。如果应用程序传递到TCP缓存的数据块太长,TCP可以把它划分短一些再传递。如果应用程序发来的数据块太短,TCP也可以等待积累足够多的字节后再构成报文段发送。
2.可靠传输的工作原理
2.1停止等待协议
"停止等待":就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。1.无差错的情况
A发送分组M1,发送完就暂停发送,等待B确认。B收到M1后就向A发送确认。A收到对M1的确认,继续发送下一个分组。
2.出现差错
B接收M1出现差错,就丢弃M1,其他什么也不做。A只要超过一段时间没有收到确认,就认为刚才发送的分组丢失,因此重传前面发送的分组。这就叫做超时重传.
以上应该注意一下三点:
A发送完一个分组后,必须暂时保留已发送的分组的副本。只有在收到相应的确认后才能清楚保留的副本。
分组和确认必须进行编号。这样才能明确是哪一个发出去的分组收到了确认。
超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
3.确认丢失和确认迟到
如上图a.B所发送的对M1的确认丢失。A在设定超时重传时间内没有收到确认,但并无法知道是自己发送的分组出错、丢失、或者B发送的确认丢失。因此A在超时计时器到期后就要重传M1.现在B需要采取如下两个动作。
丢弃这个重复的分组M1,不向上层交付。
向A发送确认。
如图b。传输过程没有出现差错,但B对分组M1的确认迟到。A回收到重复的确认。对重复的确认的处理很简单:收下后丢弃。B任然会收到重复的M1,并且同样丢弃重复的M1。
2.2连续ARQ协议
滑动窗口协议是TCP协议的精髓所在。如图a发送方维持发送窗口,它的意义是:位于发送窗口内的5个分组可连续发送出去,而不需要等待对方的确认。连续的ARQ协议规定,发送当收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用累积确认的方式。就是接收方不必对收到的分组逐个确认,而是可以收到几个分组后对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已经收到。
相关文章推荐
- Linux下tcp协议socket的recv函数返回时机分析(粘包)
- BZOJ 2756 [SCOI2012]奇怪的游戏
- Spring MVC将异常映射到HTTP状态码
- 使用GCDAsyncUdpSocket&GCDAsyncSocket进行TCP连接和UDP连接
- 将图片打包成文件上传服务器 POST请求 AFNetWorking网络请求
- 【Python】使用socketserver建立一个异步TCP服务器
- HTTPS那些事(一)HTTPS原理
- Okhttp任务队列工作原理
- 计算机网络——TCP三次、四次握手详解
- Android中的网络技术基础用法
- JAVA发送http、https请求
- Python即时网络爬虫:API说明
- 如何搭建免费的网络验证系统
- [freeCodeCamp] solution to HTTP JSON API SERVER passed!
- 问题:Tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误
- RDO单机安装Openstack以及lvm卷存储与Vxlan网络配置
- 第7讲 Android网络与数据存储
- TCP协议详解---上
- Android基础学习【历史流程重走】 ---- 网络请求(四)
- HTTP Referer简介