17.2 TCP的服务

TCP提供了一种面向连接的、可靠的字节流服务。两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接。

TCP通过下列方式来提供可靠性:

1)  应用数据被分割成TCP认为最合适发送的数据块

2)  当TCP发送一个段后,它会启动一个定时器,等待目的端确认。如果不能及时收到确认,将重发这个报文段。

3)  TCP收到数据后,它会发送一个确认。这个确认不是立即发送的,通常会推迟几分之一秒

4)  TCP将保持它首部和数据的校验和。(这是一个端到端的校验和,如果收到段的检验有错误,TCP将丢弃这个报文也不进行确认,这就会导致超时重传)

5)  TCP报文段作为IP数据报来传输,IP数据报的到达可能会失序。tcp段也就有可能会失序。所以TCP将对收到的数据进行重新排序,以正确的顺序将数据传给应用层。

6)  IP数据报会重复,TCP的接收端必须丢弃重复的数据

7)  TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出

另外、TCP对字节流的内容不作任何解释。对字节流的解释由TCP 连接双发的应用层解释。

17.3 TCP的首部

TCP数据被封装在一个IP数据报中,如下:

下面是TCP首部的数据格式,如果不及任选字段,它通常是20个字节:

源端口和目的端口:用于寻找发端和收端应用进程。(再加上IP首部中源端目的端IP地址就可以唯一确定一个TCP连接)

序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

确认序号:包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1.(只在ACK标志为1 时确认号才有效)

首部长度:首部中32bit字的数目。4位,最多就是15*4 = 60bit。没有任选字段时,正常长度是20字节。

6个标志比特:它们中的多个可以同时被设置为1,这里先简单说明:URG(紧急指针)、ACK(确认序号有效)、PSH(接收方应该尽快将这个报文交给应用层)、RST(重建连接)、SYN(发起连接)、FIN(发送端完成发送任务)。

16位的窗口大小:用于TCP的流量控制,窗口大小为字节数,起始于确认序号字段指明的值。

16位的校验和:校验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性字段,一定是由发端计算,收端验证

16位的紧急指针:只有在URG标志为1时才有效。这是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号

选项:最常见的可选字段是最长报文大小(MSS)。每个连接方通常都在通信的第一个报文段(连接时设置SYN的那个段)中指明这个选项,它表示本端所能接收的最大长度的报文段。

17.4 小结

TCP将用户数据打包成报文段:它发送数据后启动一个定时器;

另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复的数据

tcp提供端到端的流量控制,并计算和验证一个强制性的端到端校验和。

TCP/IP详解 卷1 第十七章 TCP:传输控制协议的更多相关文章

  1. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  2. TCP/IP详解 卷1 第二十一章 TCP的超时与重传

    21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...

  3. TCP/IP详解 卷1 第十八章 TCP的建立与终止

    第十八章 TCP的建立与终止 tcpdump Tcpdump可以将网络中传送的数据报完截获下来进行分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉 ...

  4. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  5. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  9. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

随机推荐

  1. 软件工程_8th weeks

    第八周PSP 个人时间管理 由于本周主要在做论文实验,除了学习时间外有一些零散的时间也在思考代码的书写以及论文实验的流程,但是这些零散的时间并没有在总的表记录,所以想问一下老师,像这种平时零散思考的时 ...

  2. mysql 数据表备份导出,恢复导入操作实践

    因为经常跑脚本的关系, 每次跑完数据之后,相关的测试服数据库表的数据都被跑乱了,重新跑脚本恢复回来速度也不快,所以尝试在跑脚本之前直接备份该表,然后跑完数据之后恢复的方式,应该会方便一点.所以实践一波 ...

  3. js 消息框

    消息框有三種:警告框.提示框.確認框 警告框: 確保用戶可以得到某些信息. 點擊確定以後,才能繼續後續操作. alert("不好") 確認框: 請用戶確認或者接受某些信息. 點擊確 ...

  4. DTD举例一

    DTD举例一: <!--动作库约束文件--> <!DOCTYPE actionGroup [ <!ELEMENT actionGroup (action*)> <! ...

  5. BZOJ3159决战——树链剖分+非旋转treap(平衡树动态维护dfs序)

    题目描述 输入 第一行有三个整数N.M和R,分别表示树的节点数.指令和询问总数,以及X国的据点. 接下来N-1行,每行两个整数X和Y,表示Katharon国的一条道路. 接下来M行,每行描述一个指令或 ...

  6. BZOJ2588Count on a tree——LCA+主席树

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

  7. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) A,B,C

    A.题目链接:http://codeforces.com/contest/828/problem/A 解题思路: 直接暴力模拟 #include<bits/stdc++.h> using ...

  8. day10 前向引用

    风湿理论,函数即变量.没定义没加载(开辟内存空间).都是没法用的 不定义调用必然出错 def foo(): print("from foo") bar () # 标红 foo() ...

  9. 在任意位置获取应用程序CONTEXT

    Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity, Provider等等)才能方便的使用api来获取Context, 而在某些工具类中要获 ...

  10. A1052. Linked List Sorting

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...